Convert a 2D array to xls-compatible CSV, TSV, or XLSX file.
include csv4xls script, and use:
// always catch exception in case XLSX fails to convert.
try {
// Default: XLSX
ret = csv4xls.toBlob([[1,2,3],[4,5,6]])
// Tab-separated (TSV) / comma-separated (CSV)
ret = csv4xls.toBlob([[1,2,3],[4,5,6]], {format: 'tsv'})
ret = csv4xls.toBlob([[1,2,3],[4,5,6]], {format: 'csv'})
// XLSX (default; uses the builtin 0-dependency writer)
ret = csv4xls.toBlob([[1,2,3],[4,5,6]], {format: 'xlsx'})
// XLSX keeping native number / boolean types
ret = csv4xls.toBlob([[1,2,3],[4,5,6]], {format: 'xlsx', forceText: false})
// XLSX via SheetJS instead of the builtin writer (requires global XLSX)
ret = csv4xls.toBlob([[1,2,3],[4,5,6]], {format: 'xlsx', engine: 'sheetjs'})
// Download with options
csv4xls.download([[1,2,3],[4,5,6]], "mydata") // Will download as mydata.xlsx
csv4xls.download([[1,2,3],[4,5,6]], "mydata", {format: 'csv'}) // Will download as mydata.csv
csv4xls.download([[1,2,3],[4,5,6]], "mydata", {format: 'tsv'}) // Will download as mydata.tsv
} catch(e) {
}
csv4xls provides following APIs:
toString(data, delimiter = '\t')- convert given 2D array to CSV/TSV in String format.toArray(data, delimiter = '\t')- convert given 2D array to an xls-compatible CSV/TSV file in the returned Uint8Array.toXlsx(data, options = {forceText: true, sheetName: 'Sheet1', engine: 'builtin'})- convert given 2D array to xlsx file bytes in a Uint8Array.- Uses the builtin, dependency-free writer. Pass
engine: 'sheetjs'to use the global XLSX (SheetJS) library instead.
- Uses the builtin, dependency-free writer. Pass
toWorkbook(data, options = {forceText: false})- convert given 2D array to a SheetJS workbook object (requires XLSX library).toBlob(data, options = {delimiter: '\t', format: 'auto', forceText: true})- convert data to blob with specified format.- If
formatis'xlsx', returns XLSX blob - If
formatis'html', returns HTML table as blob with MIME typetext/html - If
formatis'xls-html', returns HTML table with BOM as blob with MIME typeapplication/vnd.ms-excel- Uses
mso-number-format:'\@'style to prevent Excel from changing formats
- Uses
- If
formatis'auto'(default), returns XLSX. Use'csv'/'tsv'for delimiter-separated output - HTML options can be passed via
options.htmlobject (seetoHtmlfor available options) - If
forceTextistrue(default for XLSX), all cells are written as text so Excel won't reinterpret values like"00123". Set tofalseto keep native number / boolean types options.sheetNamesets the worksheet name (default'Sheet1')
- If
toHref(data, options = {delimiter: '\t', format: 'auto', forceText: true})- same astoBlobbut return a corresponding object url.toHtml(data, options = {})- convert given 2D array to HTML table format.options.tableClass- CSS class for the table (default: 'csv4xls-table')options.cellStyle- Whether to applymso-number-format:'\@'style to cells to prevent Excel from changing formats (default: true)options.headerRow- Whether to treat the first row as a header row using<th>tags (default: false)
download(data, name = "data", options = {delimiter: '\t', format: 'auto', forceText: true})- trigger file download- If
formatis'xlsx', file extension will be.xlsx - If
formatis'html', file extension will be.html - If
formatis'xls-html', file extension will be.xls(HTML with BOM that Excel can open) - If
formatis'auto'(default), uses XLSX - If using CSV/TSV: delimiter
','→.csv, delimiter'\t'→.tsv
- If
- CSV/TSV format only works with Excel if file is opened directly. Doesn't work when importing with text import wizard.
- Default format is xlsx. For CSV/TSV output, set
format(ordelimiter) explicitly; default delimiter is tab ('\t'). - File extension and MIME type are automatically set based on the format and delimiter:
- XLSX →
.xlsxwith MIME typeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet - Comma (
,) →.csvwith MIME typetext/csv - Tab (
\t) →.tsvwith MIME typetext/tab-separated-values
- XLSX →
- XLSX output is generated by a builtin writer with zero dependencies. It writes a minimal package (inline strings, no styling, STORE-mode zip), which Excel opens directly.
- SheetJS is only used when
engine: 'sheetjs'is given explicitly, in which case the globalXLSXmust be available. - When
formatis set to'auto'(default), XLSX is used.
When using in Nodejs environment, version 18+ is required for Blob support which is used in toBlob function. Also, download api trigger download via link clicking thus it's also a frontend-only feature.
MIT