Skip to content
← Back

Excel to CSV - Online Tool

Data
Runs locally · Not uploaded

Convert Excel (.xlsx/.xls) files to CSV format online. All processing is done locally in your browser.

Was this result helpful?

For local tools, open DevTools → Network and search your input — it should not appear in requests.

Usage Guide

Turn an Excel workbook (.xlsx or .xls) into plain CSV in the browser. SheetJS reads the file locally; the first worksheet is exported with sheet_to_csv; you can copy the text or download a .csv file. Nothing is uploaded. This page is a grid snapshot tool, not a full workbook clone — formulas become cached values, merges and drawings disappear, and only one sheet is exported per run.

1. Convert a workbook in three steps

The UI intentionally stays simple: pick a file, get CSV. If your workbook has multiple sheets, export only covers the first sheet SheetJS resolves. To convert another sheet, isolate it in Excel (copy to a one-sheet workbook) or use a sibling Excel tool that exposes a sheet picker, then come back here.

  1. Choose a local .xlsx or .xls file. The tool reads it as an ArrayBuffer in your tab — there is no upload progress bar because nothing leaves the device.
  2. Wait for the CSV text to appear in the output panel. Spot-check the first few and last few rows: header names, empty trailing columns, and any cell that contained commas or quotes.
  3. Copy to the clipboard or download export.csv (named from the source file). Open the result in a text editor before feeding it to an importer so you catch encoding and quoting issues early.

2. What CSV keeps — and what it drops

CSV is a rectangular text grid. Cell values survive; cell styles, conditional formatting, charts, comments, pivot caches, and embedded images do not. Merged cells flatten to whatever SheetJS emits for the top-left (or equivalent) value — do not expect merged layout to round-trip. Formulas export as calculated values already stored in the file; if someone never recalculated before saving, you may see stale numbers. Treat the output as a snapshot of the grid, not an equivalent of the workbook.

  • One sheet per CSV file. Multi-sheet books need one export each.
  • Long numeric IDs and phone numbers often become scientific notation when re-opened in Excel — import those columns as text in the next tool.
  • Dates may appear as serial numbers or locale strings depending on how the sheet stored them; verify with a known date row before batch work.

3. Quoting, commas, and newlines (RFC 4180 habits)

SheetJS sheet_to_csv wraps fields that contain commas, quotes, or newlines and doubles internal quotes — the usual RFC 4180 pattern. That is enough for most importers, but not every downstream parser is strict. Failure sample: a cell with a literal newline in an address field can look like two rows if a consumer ignores quotes. Failure sample: a field that already contains a double quote must appear doubled inside the quoted field; if a hand-edited CSV breaks that rule, re-export from this page instead of patching by eye.

  • Prefer downloading the file over pasting through chat apps that reflow lines.
  • If a database loader rejects a row, open the CSV in a plain-text editor and jump to that line — check for an unclosed quote earlier in the file.
  • Delimiter is the SheetJS default comma. Semicolon-heavy European Excel locales still produce comma CSV here; convert separators only if your importer demands it.

4. When CSV is the right hop — and when it is not

Use CSV when a script, SQL loader, or Git-friendly diff needs plain text; when a partner system only accepts CSV; or when you want to strip macros and objects and keep the grid. Skip CSV when you need multiple sheets in one artifact, when formulas must remain formulas, or when nested JSON is the real target. Native JSON exports from the source system usually beat Excel→CSV→JSON guessing. Sibling pages cover Excel→JSON, Excel→Markdown, and CSV→SQL when those shapes fit better.

5. Privacy and handover notes

Spreadsheets often hold phone numbers, orders, and payroll. Local parsing avoids random online converters, but downloads still land in your Downloads folder and clipboard history can retain rows. Clear temporary copies on shared machines. When you hand a CSV to someone else, add one line of context: which workbook and sheet it came from, that only the first sheet was exported, and any columns that are text-not-number. That note prevents the classic “why did my employee IDs lose leading zeros” thread.

6. Acceptance checklist before you trust the file

  1. Row count roughly matches the sheet (header plus data rows).
  2. A known messy cell (comma inside text, multiline note) still parses as one field in your target importer.
  3. Identifier columns still look like identifiers after the first import attempt.
  4. You kept the original .xlsx until the importer succeeds — CSV is lossy relative to the workbook.

FAQ

Files are parsed locally in your browser with SheetJS and never touch a server — a safer bet than feeding spreadsheets full of phone numbers, orders, and payroll to a random online converter. Remember to clear the CSV copy left in your downloads folder afterwards.

Both .xlsx and .xls. The page exports the first worksheet of the workbook as CSV; for multi-sheet files, split them or save each sheet separately in Excel first — the page does not process a whole workbook at once.

Cells containing commas, quotes, or newlines are automatically wrapped in double quotes and escaped, following the RFC 4180 standard.

Merged cells, rich text, and images stay behind, and formulas export whatever the preview shows — computed value or literal. Treat the CSV as a grid snapshot, not an equivalent of the workbook.

Long numbers may flip back to scientific notation and dates to serial numbers — that is the opening app guessing types again. Import identifier columns as text and spot-check the first and last rows plus any cells containing commas.

CSV fits whenever scripts, diff, or Git need plain text, the receiving system only accepts CSV, or you want the grid without macros and objects. For JSON downstream, use a CSV-to-JSON converter; for INSERT statements, use CSV-to-SQL.

Related Tools

Related Articles