CSV Import/Export
Cellify provides comprehensive support for reading and writing CSV files with automatic type detection.
Importing CSV
Basic Import
import { csvToWorkbook } from 'cellify';
const csv = `Name,Age,City
Alice,30,New York
Bob,25,Los Angeles`;
const workbook = csvToWorkbook(csv);
const sheet = workbook.sheets[0];
console.log(sheet.getCell(0, 0)?.value); // 'Name'
console.log(sheet.getCell(1, 1)?.value); // 30 (number)
Import with Options
import { csvToWorkbook } from 'cellify';
const workbook = csvToWorkbook(csvText, {
// Delimiter detection (auto-detects if not specified)
delimiter: ',',
// Quote character
quoteChar: '"',
// Sheet name for imported data
sheetName: 'Imported Data',
// Starting cell position
startCell: 'A1',
// First row contains headers
hasHeaders: true,
// Skip empty lines
skipEmptyLines: true,
// Trim whitespace from values
trimValues: true,
// Auto-detect numbers
detectNumbers: true,
// Auto-detect dates
detectDates: true,
// Date formats to try (in order)
dateFormats: ['yyyy-mm-dd', 'mm/dd/yyyy', 'dd/mm/yyyy'],
// Limit rows imported (0 = unlimited)
maxRows: 1000,
// Progress callback
onProgress: (current, total) => {
console.log(`Processing row ${current} of ${total}`);
},
});
Import into Existing Sheet
import { csvToSheet } from 'cellify';
const sheet = workbook.addSheet('CSV Data');
const result = csvToSheet(csvText, sheet, {
startCell: 'B2',
hasHeaders: true,
});
console.log('Rows imported:', result.rowCount);
console.log('Columns:', result.columnCount);
console.log('Headers:', result.headers);
Import from Buffer (Node.js)
import { csvBufferToWorkbook } from 'cellify';
import { readFileSync } from 'fs';
const buffer = readFileSync('data.csv');
const workbook = csvBufferToWorkbook(new Uint8Array(buffer), {
delimiter: ';',
detectNumbers: true,
});
Exporting to CSV
Basic Export
import { Workbook, sheetToCsv } from 'cellify';
const workbook = new Workbook();
const sheet = workbook.addSheet('Data');
sheet.cell(0, 0).value = 'Name';
sheet.cell(0, 1).value = 'Age';
sheet.cell(1, 0).value = 'Alice';
sheet.cell(1, 1).value = 30;
const csv = sheetToCsv(sheet);
console.log(csv);
// "Name","Age"
// "Alice",30
Export with Options
import { sheetToCsv } from 'cellify';
const csv = sheetToCsv(sheet, {
// Field delimiter
delimiter: ',',
// Row delimiter
rowDelimiter: '\n',
// Quote character
quoteChar: '"',
// Quote all fields (not just those that need escaping)
quoteAllFields: false,
// Include UTF-8 BOM for Excel compatibility
includeBom: true,
// How to represent null values
nullValue: '',
// Date format
dateFormat: 'ISO', // 'ISO', 'locale', or custom format
// Export specific range only
range: 'A1:D10',
});
Export to Buffer (Node.js)
import { sheetToCsvBuffer } from 'cellify';
import { writeFileSync } from 'fs';
const buffer = sheetToCsvBuffer(sheet, {
includeBom: true,
delimiter: ',',
});
writeFileSync('output.csv', buffer);
Export Multiple Sheets
import { sheetsToCsv } from 'cellify';
const csvMap = sheetsToCsv(workbook.sheets, {
delimiter: ',',
includeBom: true,
});
// Map of sheet name to CSV string
csvMap.forEach((csv, sheetName) => {
console.log(`Sheet: ${sheetName}`);
console.log(csv);
});
Delimiter Detection
Cellify automatically detects the delimiter when importing CSV files:
// Auto-detects comma, semicolon, tab, or pipe
const workbook = csvToWorkbook(csvText);
Supported delimiters:
,(comma) - default;(semicolon) - common in European locales\t(tab) - TSV files|(pipe)
Type Detection
Numbers
Automatically converts numeric strings to numbers:
const csv = `Value
123
45.67
-89.01
1,234.56
$99.99
50%`;
const workbook = csvToWorkbook(csv, { detectNumbers: true });
// Values: 123, 45.67, -89.01, 1234.56, 99.99, 0.5
Dates
Automatically converts date strings to Date objects:
const csv = `Date
2024-01-15
01/15/2024
15/01/2024`;
const workbook = csvToWorkbook(csv, {
detectDates: true,
dateFormats: ['yyyy-mm-dd', 'mm/dd/yyyy', 'dd/mm/yyyy'],
});
Booleans
Automatically converts boolean strings:
const csv = `Active
true
false
TRUE
FALSE`;
const workbook = csvToWorkbook(csv);
// Values: true, false, true, false (boolean type)
RFC 4180 Compliance
Cellify's CSV parser follows RFC 4180:
- Fields containing delimiters, quotes, or newlines are quoted
- Quote characters within quoted fields are escaped by doubling
- Multi-line fields are supported
const csv = `Name,Description
Widget,"A ""great"" product"
Gadget,"Features:
- Fast
- Reliable"`;
const workbook = csvToWorkbook(csv);
// Correctly parses escaped quotes and multi-line fields
Import Result
interface CsvImportResult {
rowCount: number;
columnCount: number;
headers?: string[];
warnings: string[];
}