Skip to main content

Writing Options

XLSX.write(wb, write_opts) attempts to write the workbook wb

XLSX.writeFile(wb, filename, write_opts) attempts to write wb to filename. In browser-based environments, it will attempt to force a client-side download.

XLSX.writeFileAsync(filename, wb, o, cb) attempts to write wb to filename. If o is omitted, the writer will use the third argument as the callback.

The write functions accept an options argument:

Option NameDefaultDescription
typeOutput data encoding (see Output Type below)
cellDatesfalseStore dates as type d (default is n)
codepageIf specified, use code page when appropriate **
bookSSTfalseGenerate Shared String Table **
bookType"xlsx"Type of Workbook (see below for supported formats)
sheet""Name of Worksheet for single-sheet formats **
compressionfalseUse ZIP compression for ZIP-based formats **
PropsOverride workbook properties when writing **
themeXLSXOverride theme XML when writing XLSX/XLSB/XLSM **
ignoreECtrueSuppress "number as text" errors **
numbersPayload for NUMBERS export **
  • bookSST is slower and more memory intensive, but has better compatibility with older versions of iOS Numbers
  • The raw data is the only thing guaranteed to be saved. Features not described in this README may not be serialized.
  • cellDates only applies to XLSX output and is not guaranteed to work with third-party readers. Excel itself does not usually write cells with type d so non-Excel tools may ignore the data or error in the presence of dates.
  • codepage is applied to legacy formats including DBF. Characters missing from the encoding will be replaced with underscore characters (_).
  • Props is an object mirroring the workbook Props field. See the table from the Workbook File Properties section.
  • if specified, the string from themeXLSX will be saved as the primary theme for XLSX/XLSB/XLSM files (to xl/theme/theme1.xml in the ZIP)
  • Due to a bug in the program, some features like "Text to Columns" will crash Excel on worksheets where error conditions are ignored. The writer will mark files to ignore the error by default. Set ignoreEC to false to suppress.
Exporting NUMBERS files (click to show)

The NUMBERS writer requires a fairly large base. The supplementary xlsx.zahl scripts provide support. xlsx.zahl.js is designed for standalone and NodeJS use, while xlsx.zahl.mjs is suitable for ESM.

Adding NUMBERS export support involves two steps:

1) Load the xlsx.zahl script

2) Pass the payload into the numbers option to write or writeFile.

<meta charset="utf8">
<script src=""></script>
<script src=""></script>
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([
["SheetJS", "<3","விரிதாள்"],
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});

Supported Output Formats

For broad compatibility with third-party tools, this library supports many output formats. The specific file type is controlled with bookType option:

bookTypefile extcontainersheetsDescription
xlsx.xlsxZIPmultiExcel 2007+ XML Format
xlsm.xlsmZIPmultiExcel 2007+ Macro XML Format
xlsb.xlsbZIPmultiExcel 2007+ Binary Format
biff8.xlsCFBmultiExcel 97-2004 Workbook Format
biff5.xlsCFBmultiExcel 5.0/95 Workbook Format
biff4.xlsnonesingleExcel 4.0 Worksheet Format
biff3.xlsnonesingleExcel 3.0 Worksheet Format
biff2.xlsnonesingleExcel 2.0 Worksheet Format
xlml.xlsnonemultiExcel 2003-2004 (SpreadsheetML)
numbers.numbersZIPsingleNumbers 3.0+ Spreadsheet
ods.odsZIPmultiOpenDocument Spreadsheet
fods.fodsnonemultiFlat OpenDocument Spreadsheet
wk3.wk3nonemultiLotus Workbook (WK3)
csv.csvnonesingleComma Separated Values
txt.txtnonesingleUTF-16 Unicode Text (TXT)
sylk.sylknonesingleSymbolic Link (SYLK)
html.htmlnonesingleHTML Document
dif.difnonesingleData Interchange Format (DIF)
dbf.dbfnonesingledBASE II + VFP Extensions (DBF)
wk1.wk1nonesingleLotus Worksheet (WK1)
rtf.rtfnonesingleRich Text Format (RTF)
prn.prnnonesingleLotus Formatted Text
eth.ethnonesingleEthercalc Record Format (ETH)
  • compression only applies to formats with ZIP containers.
  • Formats that only support a single sheet require a sheet option specifying the worksheet. If the string is empty, the first worksheet is used.
  • writeFile will automatically guess the output file format based on the file extension if bookType is not specified. It will choose the first format in the aforementioned table that matches the extension.

Output Type

The type argument for write mirrors the type argument for read:

"base64"string: Base64 encoding of the file
"binary"string: binary string (byte n is data.charCodeAt(n))
"string"string: JS string (not compatible with binary formats)
"buffer"nodejs Buffer
"array"ArrayBuffer, fallback array of 8-bit unsigned int
"file"string: path of file that will be created (nodejs only)
  • For compatibility with Excel, csv output will always include the UTF-8 byte order mark.