A CSV file has no types: every field is text, and whatever opens it has to guess. Excel guesses as it opens the file, and the guesses destroy data. Opened in Excel for Mac, a CSV holding 007 showed 7; +441234567890 became the number 441234567890; 1-2, 3/4 and the gene name SEPT2 became dates; 1e5 became 100000 and 1 1/2 became 1.5; =1+2 became a formula; and a 20-digit id kept its first 15 digits and turned the rest into zeros, because Excel holds 15 significant digits. Saving the CSV again writes the damage back into the file. Recent Microsoft 365 versions let you switch some of these conversions off under Automatic Data Conversion, but 1-2 and 3/4 still become dates, and the person you send the file to has their own settings. An .xlsx does not have the problem at all, because each cell carries its type, and a cell marked as text is shown as text whatever it contains.
The CSV is read with the same RFC 4180 scanner as CSV to JSON — a quoted field may hold the delimiter, line breaks, and "" for a literal quote — and on Auto the delimiter is whichever of comma, semicolon, tab or pipe appears most in the first line. Then each field is typed cautiously. It becomes a number only if it is a plain decimal with no leading zero, plus sign, exponent or thousands separator, and at most 15 significant digits; everything else is written as text, character for character, and the values Excel would have changed are counted, with examples. Numbers keep their appearance too: 12.50 is stored as 12.5 with a 0.00 format, and a 13-digit barcode gets a 0 format so it is not shown as 4.00638E+12. ISO 8601 dates become Excel dates only if you turn that on, and 03/04/2026 never does, because it is 3 April in one country and 4 March in another.
Excel’s own Save As CSV makes a good test of the result, because it writes each cell as it is displayed: opening a workbook from this converter in Excel and saving it as CSV gave back the original file field for field. The header row is bold and frozen, column widths are estimated from the content, and the workbook is written without a library — sheet XML, a shared string table, number formats and a DEFLATE-compressed ZIP, all in this page. Numbers with thousands separators, such as 1,234.50, stay text, because the comma is the decimal mark in much of Europe; Excel’s Data > Text to Columns converts them with the separators you choose.