Semi-streaming XLS(X) / ODS / QPW (and more) parser.
"Semi" because these spreadsheet formats are not streamable so the whole thing is buffered in memory. Same asexcel-stream
but faster because there's no filesystem IO or child process.
npm i spreadsheet-stream format-data
const sheet = require('spreadsheet-stream')
const format = require('format-data')
const fs = require('fs')
fs.createReadStream('example.xlsx')
.pipe(sheet())
.pipe(format('json'))
.pipe(process.stdout)
NB. Although the underlying parser (xlsx
) also supports non-binary formats like CSV, for those formats you're better off with truly streaming solutions like tabular-stream
(to support both spreadsheets and CSV), csv-parser
or similar. Those are not limited by memory. For a command-line interface, see tabular-cli
.
Returns a duplex stream of which the writable side takes a spreadsheet and the readable side yields row objects. Options:
maxSize
(number, default 0): destroy stream when more thanmaxSize
bytes have been written (i.e. reject big files)sheetIndex
(number, default 0): select a sheetsheet
(string, default none): select a sheet by its name. Takes precedence oversheetIndex
.
With npm do:
npm install spreadsheet-stream
MIT © 2019-present Vincent Weevers.