Three formats, endless confusion. We cut through the noise: when CSV wins, when Excel is the right call, and why TSV is the unsung hero of data pipelines that nobody talks about.
The short answer
If you're sending data to another person or importing into a web tool: use CSV. If your data has commas inside it (addresses, notes, descriptions): use TSV. If you need formatting, formulas, or multiple sheets for a non-technical audience: use XLSX.
Everything below explains why.
CSV: the reliable workhorse
CSV stands for Comma-Separated Values. Every row is a line of text. Fields are separated by commas. Headers are the first row. That's the entire spec — no binary encoding, no proprietary format, no version numbers.
This simplicity is both CSV's greatest strength and its most misunderstood weakness. Because there's no official standard (RFC 4180 exists but isn't universally followed), different programs produce slightly different CSVs. Some wrap every field in quotes. Some don't quote anything. Some use \r\n line endings, some use just \n. Excel on Windows uses a different default delimiter than Excel on Mac in some locales.
In practice, modern CSV parsers handle all of this gracefully. The format is durable.
When to use CSV
- Importing contacts into any CRM (Salesforce, HubSpot, Zoho, Mailchimp)
- Moving data between different systems
- Anywhere you need a file a developer can open with any text editor
- Data that will be processed by scripts or pipelines
- Archiving — CSV files from 1985 still open today
The comma problem
CSV breaks down when your data contains commas. An address field like 123 Main St, Suite 400 will look like two fields unless it's wrapped in quotes. Well-formed CSV handles this by quoting the field: "123 Main St, Suite 400". Most exporters do this automatically. But if you're building a CSV manually or your exporter is sloppy, it's a silent bug that's annoying to track down.
TSV: better for messy data, worse for compatibility
TSV is Tab-Separated Values. Same idea as CSV, but tabs as delimiters instead of commas.
The immediate advantage: tabs almost never appear naturally in data. An address, a company name, a phone number, a product description — none of them will contain a tab character. So you rarely need to quote fields, and the parsing is cleaner.
When to use TSV
- Data that frequently contains commas (addresses, product descriptions, notes)
- Internal data pipelines where you control both ends
- Exporting from databases — PostgreSQL's
\copyand MySQL'sSELECT INTO OUTFILEdefault to tab-separated - Log file formats
The compatibility problem
The downside of TSV is that fewer tools recognize it by default. Excel will open a TSV file if you rename it .txt and use the import wizard — but it won't just double-click open correctly like CSV does. Many web-based CRM import tools only accept CSV. For anything going to a non-technical audience or an external system, CSV is safer.
XLSX: more than a spreadsheet
XLSX is Excel's modern format (introduced in 2007, replacing the binary .xls format). Under the hood it's a ZIP file containing XML — which is why you can rename a .xlsx file to .zip and browse its internals.
The key differences from CSV and TSV:
- Multiple sheets — a single XLSX file can contain multiple distinct datasets
- Data types — dates stay as dates, numbers stay as numbers, booleans stay as booleans. CSV stores everything as strings.
- Cell formatting — colors, bold text, column widths, number formats
- Formulas — calculated cells
- Charts — embedded visualizations
All of this comes at a cost: XLSX files are larger, require a library to read programmatically (like SheetJS or openpyxl), and are overkill for plain data transfer.
When to use XLSX
- Sending a report to a colleague who needs to edit it in Excel
- Data that needs precise date or number formatting preserved
- When you need multiple related datasets in one file
- Anything that will be viewed in Excel by a non-technical person
Side-by-side comparison
| Feature | CSV | TSV | XLSX |
|---|---|---|---|
| Universally supported | ✓ Yes | Mostly | Excel required |
| Human-readable | ✓ Yes | ✓ Yes | No (binary) |
| Multiple sheets | No | No | ✓ Yes |
| Data types preserved | No | No | ✓ Yes |
| Handles commas in data | With quoting | ✓ Naturally | ✓ Yes |
| File size (same data) | Small | Small | Larger |
| CRM import support | ✓ Universal | Limited | Some |
| Developer-friendly | ✓ Yes | ✓ Yes | Needs library |
How each format handles the same edge cases
Understanding the format differences gets more concrete when you look at specific data types that cause problems.
Phone numbers and ZIP codes with leading zeros
The value 07030 is a ZIP code, not the number 7030. In CSV, it's stored as the text string 07030 — the leading zero is there in the file. The problem happens when Excel opens the CSV: it sees an unquoted string of digits and interprets it as the number 7030. The leading zero disappears permanently when you save back to CSV.
In TSV, same behavior — stored correctly as text in the file, but Excel strips the leading zero on open.
In XLSX, you can format the column as "Text" before entering data, which tells Excel to treat the values as strings and preserve leading zeros. This is one of XLSX's genuine advantages for data that looks numeric but isn't: phone numbers, product codes, account numbers.
When using CSV for such data, the defensive move is to quote the values: "07030" in the CSV file. A properly written CSV parser will treat quoted values as text strings. Excel's CSV parser does respect this when the field is explicitly quoted — but only at import time, not after you've opened and saved the file.
Multiline text fields
What happens when a cell value contains a newline character? This comes up with address lines, notes fields, and any free-text content.
CSV handles this with quoted fields. If a value contains a newline, the entire value must be wrapped in double quotes. A properly written CSV parser handles this correctly and treats it as a single field even though it spans multiple lines in the file. Many naive CSV parsers (and text editors doing find-and-replace) don't handle this correctly, treating each line as a new row.
TSV has the same issue. XLSX handles it natively — multiline content in a cell is just a cell with newlines, no special encoding required.
If your data contains a lot of multiline content (notes, descriptions, addresses), XLSX is technically more robust. For most tools and pipelines that consume the data downstream, CSV with proper quoting works fine — but you need to verify your parser handles quoted multiline fields.
Large numbers and precision
CSV and TSV store numbers as text strings, so there's no precision loss — 1234567890123456 stays exactly that in the file. XLSX stores numbers as IEEE 754 64-bit floats, which gives you 15–17 significant decimal digits of precision. A 16-digit number like a credit card number or a large database ID stored in an XLSX cell might silently lose precision in the last digit or two.
For numeric identifiers with 15+ digits, CSV is actually the safer format than XLSX.
Format choice by use case
| Use case | Best format | Why |
|---|---|---|
| CRM import (Salesforce, HubSpot) | CSV | Universal support, smaller file size |
| Email marketing (Mailchimp, Klaviyo) | CSV | Required format for most email tools |
| Database bulk load | CSV or TSV | TSV if data has commas; CSV otherwise |
| Sending to non-technical stakeholders | XLSX | Opens in Excel without configuration |
| Data with lots of commas in values | TSV | Avoids delimiter conflicts |
| Preserving number formatting | XLSX | Column types are stored explicitly |
| Large files (>50 MB) | CSV | Much smaller than XLSX for same data |
| API / JSON pipeline input | CSV | Easier to parse programmatically |
Converting between formats
CSV Splitter Online's Convert tab handles all three directions without uploading your file anywhere. Drop your file, pick the output format, download. The whole thing takes about five seconds. Numbers and dates are preserved when converting from XLSX to CSV — which Excel notoriously does not do well when you use File → Save As.
For command-line conversion, Python with pandas is the cleanest approach:
import pandas as pd
# XLSX → CSV (preserves dates as ISO strings)
df = pd.read_excel('data.xlsx')
df.to_csv('data.csv', index=False)
# CSV → TSV
df = pd.read_csv('data.csv')
df.to_csv('data.tsv', sep='\t', index=False)
# CSV → XLSX
df = pd.read_csv('data.csv', dtype=str) # keep as strings to preserve leading zeros
df.to_excel('data.xlsx', index=False)
Excel's date trap. When Excel saves a spreadsheet as CSV via File → Save As, it converts dates to whatever display format is set on your computer. A date stored as a proper date object becomes "6/12/2025" or "12-Jun-25" or "2025-06-12" depending on your locale — destroying date sorting and database imports. CSV Splitter Online and pandas both convert dates to ISO 8601 (YYYY-MM-DD), which is universally parseable.
Need to convert or split your file?
All three formats supported. Nothing uploaded to any server.
Try CSV Splitter Online free →Frequently asked questions
Can Excel open TSV files?
Yes, but not automatically. If you rename a TSV file to .txt and open it in Excel, the Text Import Wizard will appear and you can select "Tab" as the delimiter. Alternatively, use CSV Splitter Online to convert TSV to CSV or XLSX first.
Does CSV preserve leading zeros?
No — this is a classic gotcha. If you have a field like a ZIP code 07030, CSV stores it as the text string "07030". But when Excel opens the file, it interprets unquoted numeric strings as numbers and drops the leading zero, showing 7030. The fix is to either quote the field in the CSV (which tells Excel to treat it as text) or use XLSX with that column formatted as Text.
Which format should I use for Python pandas?
CSV is the default for pandas and works perfectly for most use cases. Use pd.read_csv(). For XLSX, use pd.read_excel() with the openpyxl engine. TSV works with pd.read_csv('file.tsv', sep='\t'). CSV is generally faster to read for large files.
Ready to try it?
Use our free, browser-based CSV tools to apply what you've just learned — no upload, no signup.
Open Split CSV →