CSV Viewer and Editor
Open a CSV, sort it, filter it, fix a cell, save it back. Every value stays the text it was in the file, so a zip code keeps its leading zero and a long id keeps all of its digits.
Drop a CSV here, or pick one from your machine.
Nothing here is read as a number
An importer that reads 07030 as a number hands back 7030, and no later step can put the zero back on. This page reads every field as text and keeps it that way from the file, through the grid and the edits, to the export.
Microsoft documents both halves of what a spreadsheet does by default. In Microsoft 365 and Excel 2024 there is a setting called "Remove leading zeros and convert to a number", and turning it off is what makes 00123 stay 00123. Older Excel has the behaviour and not the switch. On long numbers, Excel "has a maximum precision of 15 significant digits", and past that "any numbers past the 15th digit are rounded down to zero". Their own example turns 12345678901234567890 into 12345678901234500000.
The panel that says what you would have lost
Open a file and the page counts the cells a spreadsheet would rewrite, before you scroll anywhere. Leading zeros, ids longer than a double can count to, prices whose trailing zero is the whole point, dates that could be read either way round, and text that a spreadsheet turns into a date.
That last one is not hypothetical. Ziemann, Eren and El-Osta scanned 35,175 supplementary Excel files from 18 genomics journals and found gene name errors in 19.6 percent of the papers that shipped a gene list, because SEPT2 becomes 2-Sep and MARCH1 becomes 1-Mar (Genome Biology 17:177, 2016). The example file here has both of those in it.
Every flagged cell keeps its value. The count is a warning about where the file is headed next.
What it can tell you about the file itself
Two things get worked out on import, and the page says which one it knows and which one it is guessing at. A byte order mark is a fact. Valid UTF-8 with no mark is likely rather than certain. Bytes that are not valid UTF-8 fall back to Windows-1252, and that gets called a guess, because it is one.
The delimiter works the same way. Four candidates get tried, the one that splits every line the same way wins, and the reason sits under the picker: "every line splits into 8 fields". A file that is one long column says so instead of pretending it found something.
A file that comes back the way it went in
Export writes the delimiter the file used, the line endings it used, its quoting style and its trailing newline. A file you did not edit comes back byte for byte identical. That is checked in the tests, and it is checked again on the example here.
One thing does not survive. A field that was quoted when it did not need to be comes back unquoted, because quoting is not part of a value. "abc" goes in and abc comes out, with the same three characters in it.
How much file
A 72 MB file of a million rows read in about a second and a half when I measured it. A 219 MB one took about three seconds. The page stops at two million rows and says that it stopped, because a tab that runs out of memory takes the file down with it, and a number you can read on the page is better than a promise of unlimited that ends with a dead tab.
The reading happens in a worker, so the page stays usable while it goes. The progress bar counts real bytes, and the Stop button means it.
Nothing is uploaded and nothing is saved
The file is read with File.slice inside this tab, a megabyte at a time. There is no server in the picture and nothing to sign into.
Four settings stay in this browser: the delimiter, the encoding, whether the first row is a header, and whether to write a byte order mark. Your file is not one of them, and neither is any piece of it.
Mixpanel and Google Analytics load with Softery.io. They see that a file was opened, roughly how big it was as a band, and which buttons got pressed. They never get a cell, a column name or a file name. If the file you are looking at is JSON rather than a table, the JSON Formatter and Validator reads that one the same way, and if you are about to paste a chunk of this into a model, the Token Counter will tell you how much of the window it takes.
Common questions
Does my file leave my browser?
No. It is read in this tab with File.slice, a megabyte at a time, inside a worker. You can check that yourself: open the network panel, load a file, and watch nothing happen.
Why does my zip code lose its leading zero everywhere else?
Because most tools read a field that looks like a number as a number, and 07030 as a number is 7030. Excel does it by default. Microsoft 365 and Excel 2024 have a switch for it under File then Options then Data, and older versions have the behaviour without the switch. This page never makes that call in the first place, so there is nothing to turn off.
How big a file can it open?
Two million rows. A 72 MB file of a million rows read in about a second and a half here, and a 219 MB file took about three seconds and hit the cap. Past the cap the page stops and tells you.
What happens to a field with a comma or a line break inside it?
It stays one field. Quoted commas, quoted line breaks and doubled quotes get read the way RFC 4180 says, and they get written back the same way. A cell holding a line break shows on one line in the grid with a mark next to it, and the real value is what lands in the export.