/xlstream

Turns XLSX into a readable stream.

Primary LanguageTypeScriptMIT LicenseMIT

Build Status codecov npm

xlstream

Memory-efficiently turns XLSX file into a transform stream with all it's benefits.

  • Stream is pausable.
  • Emits all default events (data, end, etc.)
  • Returns header, raw and formatted row data in just one data event.
  • Maintains desirable behavior of merged cells.

Installation

npm install xlstream

Example

source.xlsx contents:

A B
hello 123

Where 123 is a 123.123 number formatted to be rounded to integer.

Script:

const { getXlsxStream } = require('xlstream');

(async () => {
    const stream = await getXlsxStream({
        filePath: './source.xlsx',
        sheet: 0,
    });
    stream.on('data', x => console.log(x));
})();

Result:

{ 
    "raw": { 
        "obj": { "A": "hello", "B": 123.123 }, 
        "arr": [ "hello", 123.123 ] 
    },
    "formatted": { 
        "obj": { "A": "hello", "B": 123 }, 
        "arr": [ "hello", 123 ] 
    },
    "header": []
}

getXlsxStream

Returns transform stream of the sheet.

Options

option type description
filePath string Path to the XLSX file
sheet string or number If string is passed, finds sheet by it's name. If number, finds sheet by it's index.
withHeader boolean If true, column names will be taken from the first sheet row. If duplicated header name is found, column name will be prepended with column letter to maintain uniqueness.
ignoreEmpty boolean If true, empty rows won't be emitted.
fillMergedCells boolean If true, merged cells will have the same value (by default, only the first cell of merged cells is filled with value). Warning! Enabling this feature may increase streaming time because file must be processed to detect merged cells before actual stream.

getXlsxStreams

Async generator which yields transform streams of the sheets.

Options

option type description
filePath string Path to the XLSX file
sheets array of sheet objects Options of sheet object can be found below.

Sheet object

option type description
id string or number If string is passed, finds sheet by it's name. If number, finds sheet by it's index.
withHeader boolean If true, column names will be taken from the first sheet row. If duplicated header name is found, column name will be prepended with column letter to maintain uniqueness.
ignoreEmpty boolean If true, empty rows won't be emitted.
fillMergedCells boolean If true, merged cells will have the same value (by default, only the first cell of merged cells is filled with value). Warning! Enabling this feature may increase streaming time because file must be processed to detect merged cells before actual stream.

getWorksheets

Returns array of sheets with name and hidden info.

Options

option type description
filePath string Path to the XLSX file

Building

You can build js source by using npm run build command.

Testing

Tests can be run by using npm test command.