Note: the core of tabular-stream 1.0 has moved to
detect-tabular
. This is now a data normalizer on top of that.
Detects tabular data (dsv, json, ndjson, xls, xlsx, xml, ods or sylk) and emits objects. Ensures all rows have the same keys, optionally transforms keys and tries to coerce values to numbers. Spreadsheets and DSV must have a header.
npm i tabular-stream snake-case format-data
var tabular = require('tabular-stream')
, fs = require('fs')
, snake = require('snake-case')
, format = require('format-data')
fs.createReadStream('test/air_pollution_nl.xlsx')
.pipe( tabular(snake) )
.pipe( format('json') )
.pipe( process.stdout )
Need a CLI doing just this? Jump to tabular-cli, which pairs tabular-stream
with format-data
to convert tabular data to json, ndjson, dsv or sse. For example:
tabular -k snake-case -o tsv < input.xls > output.tsv
Returns a duplex stream - give it any tabular data, get back objects. (keys)
is a shorthand for ({ keys: keys })
. The available options are:
An optional function to transform and/or filter keys. Receives a single argument, for every key of the first row. Everything at change-case works well. If it returns an empty string or anything other than a string, the key is ignored (i.e. not included in the emitted objects).
function keys(key) {
if (key === 'useless') return false
return key.toUpperCase()
}
Fallback value to use for null
and undefined
values. Default is 0
.
Whether to emit null prototype objects via Object.create(null)
or plain javascript objects (the default).
Whether to use phpexcel-stream (memory efficient) or excel-stream (usually faster) for spreadsheets. Default is undefined
, meaning it will try to require phpexcel-stream
but if PHP is not available, fallback to excel-stream
. This might change in the future. Hopefully someone comes up with a native, pure streaming, memory efficient spreadsheet parser.
With npm do:
npm install tabular-stream
MIT © Vincent Weevers. Test data © Statistics Netherlands, The Hague/Heerlen.