CSV stores characters, spreadsheets assign types

A CSV field does not carry a built-in “customer ID” type. When a spreadsheet opens the file directly, it may infer that a digit-only field is a number. Numeric representations do not need leading zeros, so they disappear.

The same inference creates two related risks:

  • Long identifiers: values beyond a spreadsheet’s numeric precision may be rounded or displayed in scientific notation.
  • Date-like strings: a value such as 03/04/26 may become a date according to local settings.
  • Formula-like text: fields beginning with characters such as = may be evaluated rather than treated as literal text.

A controlled round trip changed all four classes

In the CSVProof seed benchmark, a default LibreOffice 26.8.0.3 headless CSV → XLSX → CSV round trip changed 00001234 to 1234, rewrote a 30-digit identifier in scientific notation, reduced 00000000000000000042 to 42, and evaluated =2+2 as 4.

This does not mean every spreadsheet import must damage these fields. Import-as-text settings can avoid some changes. It does show why opening, inspecting and saving are part of one safety question.

Read the method and download the fixture →

Before you edit or resave the file

Keep the original untouched.Work on a copy and compare the output back to the source.
Inspect raw text first.Confirm leading zeros, long identifiers and date-like values before type inference.
Set columns to text explicitly.Use an import flow that allows per-column control; avoid direct double-click opening for authoritative interchange files.
Check more than the visible cells.Verify record counts, malformed rows, quoting, encoding and line endings.
Compare after saving.Use record keys and per-field differences, not only line position or a spot check.

Preservation is the default; conversion is a named step

CSVProof treats values as text unless you add an explicit cast or transformation. Risky-looking fields are flagged for review, the parser contract stays visible, and any normalization is previewed and counted before a new output file is written.

Get early access