XLSX vs CSV: What Changes
Before converting, understand what CSV preserves and what it drops:
| Feature | XLSX | CSV |
|---|---|---|
| Cell values (text, numbers) | Yes | Yes |
| Formulas | Yes (stored) | No (only computed values) |
| Formatting (bold, colors) | Yes | No |
| Multiple sheets | Yes | No (one sheet per file) |
| Charts and images | Yes | No |
| Data types (dates, currency) | Yes (typed cells) | Plain text only |
| File size (1000 rows) | ~50–200 KB | ~10–50 KB |
| Universal compatibility | Needs Excel/reader | Any text editor |
If you only need the raw data — for database import, data analysis, or cross-platform sharing — CSV is the right choice. If you need to preserve formatting, formulas, or multiple sheets, keep the XLSX format.
Method 1: Online Converter (Convertio)
The fastest method. No software to install, works on any device with a browser.
- Go to convertio.com/xlsx-to-csv
- Click Choose XLSX File or drag and drop your spreadsheet
- Click Convert
- Download the resulting CSV file
Best for: Quick one-off conversions. No installation needed. Files are encrypted during upload and automatically deleted within 2 hours.
Method 2: Microsoft Excel
If you already have Excel installed, you can export directly:
- Open the
.xlsxfile in Excel - If the workbook has multiple sheets, click the sheet tab you want to export
- Go to File → Save As (or File → Save a Copy in newer versions)
- In the “Save as type” dropdown, select CSV (Comma delimited) (*.csv)
- Choose your save location and click Save
- Excel will warn that some features are not compatible with CSV — click Yes to continue
Excel offers several CSV variants in the Save As dialog:
| Option | Encoding | Delimiter | Best For |
|---|---|---|---|
| CSV (Comma delimited) | System default (often Windows-1252) | Comma | US/UK English data |
| CSV UTF-8 (Comma delimited) | UTF-8 with BOM | Comma | International characters |
| CSV (Macintosh) | Mac Roman | Comma | Legacy macOS apps |
| CSV (MS-DOS) | OEM/DOS codepage | Comma | Legacy DOS programs |
Tip: Always choose CSV UTF-8 if your data contains accented characters, CJK text, or any non-ASCII symbols. The plain “CSV (Comma delimited)” uses a locale-specific encoding that may corrupt special characters on other systems.
Method 3: Google Sheets
Free and available on any platform with a browser:
- Open sheets.google.com and upload your XLSX file (File → Open → Upload)
- Google Sheets imports the workbook and preserves most formatting visually
- Select the sheet tab you want to export
- Go to File → Download → Comma Separated Values (.csv)
- The current sheet downloads as a
.csvfile
Google Sheets always exports CSV in UTF-8 encoding, which is the safest choice for international data. The delimiter is always a comma regardless of your locale settings.
Method 4: LibreOffice Calc
LibreOffice is free, open-source, and available on Windows, macOS, and Linux. It gives you the most control over CSV export settings.
- Open the
.xlsxfile in LibreOffice Calc - Go to File → Save As
- Select Text CSV (.csv) as the format
- Click Use Text CSV Format when prompted
- In the export dialog, configure:
- Character set: Unicode (UTF-8)
- Field delimiter: comma
,(or semicolon, tab) - Text delimiter: double-quote
"
- Click OK
Batch Conversion via Command Line
LibreOffice supports headless (no GUI) mode, making it ideal for batch processing:
# Convert a single file
libreoffice --headless --convert-to csv report.xlsx
# Convert all XLSX files in current directory
libreoffice --headless --convert-to csv *.xlsx
# Specify output directory
libreoffice --headless --convert-to csv --outdir ./csv-output/ *.xlsx
Note: LibreOffice headless mode only exports the first sheet. For multi-sheet workbooks, use a Python script (Method 5) or convert each sheet manually.
Method 5: Python (pandas)
Python with the pandas library is the best option for automated, repeatable, or batch conversions. It handles multi-sheet workbooks, encoding, and custom delimiters natively.
Basic Conversion
import pandas as pd
# Read the first sheet and save as CSV
df = pd.read_excel("report.xlsx")
df.to_csv("report.csv", index=False, encoding="utf-8-sig")
Convert All Sheets to Separate CSV Files
import pandas as pd
xlsx = pd.ExcelFile("workbook.xlsx")
for sheet_name in xlsx.sheet_names:
df = pd.read_excel(xlsx, sheet_name=sheet_name)
filename = f"{sheet_name}.csv"
df.to_csv(filename, index=False, encoding="utf-8-sig")
print(f"Saved {filename}")
Batch Convert Multiple XLSX Files
import pandas as pd
from pathlib import Path
for xlsx_file in Path(".").glob("*.xlsx"):
df = pd.read_excel(xlsx_file)
csv_file = xlsx_file.with_suffix(".csv")
df.to_csv(csv_file, index=False, encoding="utf-8-sig")
print(f"{xlsx_file} → {csv_file}")
Install: pip install pandas openpyxl — the openpyxl engine is required for reading .xlsx files. It is used automatically by pandas when installed.
Method 6: Command Line Tools
For server environments, CI/CD pipelines, or scripted workflows where you cannot open a GUI.
ssconvert (Gnumeric)
A lightweight command-line spreadsheet converter included with Gnumeric:
# Install on Ubuntu/Debian
sudo apt install gnumeric
# Convert single file
ssconvert report.xlsx report.csv
# Export all sheets (creates report.csv.0, report.csv.1, etc.)
ssconvert -S report.xlsx report.csv
# Batch convert all XLSX files
for f in *.xlsx; do ssconvert "$f" "${f%.xlsx}.csv"; done
csvkit (in2csv)
A Python-based toolkit specifically designed for CSV operations:
# Install
pip install csvkit
# Convert (first sheet by default)
in2csv report.xlsx > report.csv
# Specify a sheet by name
in2csv --sheet "Sales Q4" report.xlsx > sales-q4.csv
# List all sheet names
in2csv --names report.xlsx
Common Issues and How to Fix Them
Encoding Problems (Garbled Characters)
The most common issue. Accented characters (é, ü, ñ), CJK text, or symbols like € appear as é, ???, or other garbled text.
Root cause: The CSV was saved in one encoding but opened in another. Excel on Windows defaults to the local codepage (e.g., Windows-1252 for Western European), not UTF-8.
Solution:
- Always save as UTF-8 with BOM (byte order mark). The BOM signals to Excel and other applications that the file is UTF-8.
- In Python: use
encoding="utf-8-sig"(UTF-8 with BOM) instead ofencoding="utf-8" - When opening a CSV in Excel: use Data → From Text/CSV import wizard, which lets you select the encoding before importing
Delimiter Mismatches
Some European locales use semicolons (;) instead of commas as the CSV delimiter, because commas are used as decimal separators in those locales (e.g., 1.234,56 in German).
Symptoms: All data appears in a single column when opened in Excel, or numeric values are split across columns.
Solution:
- Check your system locale: Windows users in German, French, or Italian locales may need semicolons
- In Python:
df.to_csv("file.csv", sep=";")for semicolon-delimited output - In LibreOffice: set the field delimiter explicitly during export
- When importing: use the text import wizard and specify the correct delimiter
Multi-Sheet Workbooks
CSV format supports exactly one sheet per file. When converting a multi-sheet XLSX workbook, most tools export only the first (active) sheet.
Solution:
- Export each sheet separately using the Python multi-sheet script above
- Use
ssconvert -Swhich automatically creates numbered CSV files for each sheet - In Excel or Google Sheets, manually switch tabs and export each one
Date and Number Formatting
Dates and numbers can change when converting to CSV because CSV has no concept of data types. A date like 2026-03-24 might become 46108 (Excel serial number) or 3/24/2026 (locale-dependent format).
Solution:
- Format date columns as text in the desired format before exporting (e.g.,
YYYY-MM-DDfor ISO 8601) - In Python:
df.to_csv(..., date_format="%Y-%m-%d") - For numbers, remove thousands separators and ensure consistent decimal format
Which Method Should You Use?
| Method | Speed | Multi-Sheet | Encoding Control | Batch | Best For |
|---|---|---|---|---|---|
| Convertio | Instant | First sheet | Auto (UTF-8) | No | Quick one-off conversions |
| Excel | Fast | Manual per sheet | 4 options | No | Desktop users with Excel installed |
| Google Sheets | Medium | Manual per sheet | UTF-8 only | No | Chromebook / no desktop app |
| LibreOffice | Fast | First sheet (CLI) | Full control | Yes (CLI) | Linux users, batch via CLI |
| Python | Fast | All sheets | Full control | Yes | Developers, automation |
| CLI (ssconvert) | Fast | All sheets (-S) | Default UTF-8 | Yes | Servers, CI/CD pipelines |