Export breakers test values
Values that pass validation and break only in the exported file. 12 values, each with what it breaks and what a correct application does instead.
Type them one at a time with AltShiftN
in the palette, or take them all into a script with nkb emit export-breakers.
Value starting with =
export-breakers/formula-equals
=1+1
=1+1
- 4 graphemes
- 4 code points
- 4 bytes
- 4 UTF-16 units
- What it breaks
- A value starting with an equals sign is treated as a formula by spreadsheet software; the exported file shows a computed result instead of the data.
- What a correct application does
- Escaped on export so the spreadsheet shows the text as entered.
Code that looks like a date
export-breakers/sheet-date-mar1
MAR1
MAR1
- 4 graphemes
- 4 code points
- 4 bytes
- 4 UTF-16 units
- What it breaks
- Spreadsheet software converts short codes that look like dates into dates, and the original value cannot be recovered from the file.
- What a correct application does
- Exported as text, with the column typed so the conversion never happens.
Comma inside a value
export-breakers/csv-comma
Kowalski,Jan
Kowalski, Jan
- 13 graphemes
- 13 code points
- 13 bytes
- 13 UTF-16 units
- What it breaks
- A comma inside a value splits one column into two unless the value is quoted correctly at every export step.
- What a correct application does
- Quoted on export; the file parses back into the same number of columns.
Quotation marks inside a value
export-breakers/csv-quote
Jan"Janek"Kowalski
Jan "Janek" Kowalski
- 20 graphemes
- 20 code points
- 20 bytes
- 20 UTF-16 units
- What it breaks
- Quotation marks inside a quoted value must be doubled; getting this wrong shifts every following column.
- What a correct application does
- Quoted and escaped so the round trip returns the original text.
Line break inside a value
export-breakers/csv-newline
JanKowalski
Jan\u000AKowalski
- 1 line break
- 12 graphemes
- 12 code points
- 12 bytes
- 12 UTF-16 units
- What it breaks
- A line break inside a value turns one row into two for every parser that splits on lines before parsing.
- What a correct application does
- Quoted so the record stays one row, or rejected at input.
Nineteen-digit identifier
export-breakers/sheet-precision
1234567890123456789
1234567890123456789
- 19 graphemes
- 19 code points
- 19 bytes
- 19 UTF-16 units
- What it breaks
- Spreadsheets keep about fifteen significant digits, so long identifiers come back rounded and in exponential notation.
- What a correct application does
- Exported as text; the identifier survives opening and saving the file.
Code with leading zeros
export-breakers/leading-zero-code
007
007
- 3 graphemes
- 3 code points
- 3 bytes
- 3 UTF-16 units
- What it breaks
- Codes lose their leading zeros the moment a spreadsheet treats the column as numeric.
- What a correct application does
- Exported as text so the code stays as issued.
Phone number starting with +
export-breakers/formula-plus
+48123456789
+48123456789
- 12 graphemes
- 12 code points
- 12 bytes
- 12 UTF-16 units
- What it breaks
- A phone number written with a country prefix is read as a formula, and the cell shows an error instead of the number.
- What a correct application does
- Escaped on export, or the column typed as text.
Value starting with -
export-breakers/formula-minus
-1+1
-1+1
- 4 graphemes
- 4 code points
- 4 bytes
- 4 UTF-16 units
- What it breaks
- Same as the equals sign, in a form that also looks like an ordinary negative number.
- What a correct application does
- Escaped on export.
Value starting with @
export-breakers/formula-at
@name
@name
- 5 graphemes
- 5 code points
- 5 bytes
- 5 UTF-16 units
- What it breaks
- A social handle or mention becomes a function call in some spreadsheet software.
- What a correct application does
- Escaped on export.
Semicolon inside a value
export-breakers/csv-semicolon
a;b
a;b
- 3 graphemes
- 3 code points
- 3 bytes
- 3 UTF-16 units
- What it breaks
- The alternative column separator used in several locales; a file correct in one locale breaks in another.
- What a correct application does
- The separator declared in the file, and values quoted regardless of which one is used.
Fraction that looks like a date
export-breakers/sheet-date-3-4
3/4
3/4
- 3 graphemes
- 3 code points
- 3 bytes
- 3 UTF-16 units
- What it breaks
- A fraction, a ratio or a house number, converted to a date on opening the file.
- What a correct application does
- Exported as text; opening and saving the file does not change the value.