Giter Site home page Giter Site logo

xlstream's Introduction

Build Status codecov npm

xlstream

Memory-efficiently turns XLSX file into a transform stream with all its benefits.

  • Stream is pausable.
  • Emits all default events (data, end, etc.)
  • Returns header, raw and formatted row data, as well as totalSheetSize and processedSheetSize (in bytes) in just one data event.
  • Maintains desirable behavior of merged cells.
  • Supports files created by OpenXML.
  • Supports standard, Excel and custom number formats.

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": [],
    "totalSheetSize": 1110,
    "processedSheetSize": 1110
}

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 or number 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. 0-based row location can be passed to this option if header is not located on the first row.
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.
numberFormat standard or excel or object By default standard format is used. Excel implementation of number formatting differs from standard (can be read here) so excel option can be used to match this difference. If custom formatting is needed, a dictionary object can be passed to this option.
encoding string Sets file encoding.

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.
encoding string Sets file encoding.

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. 0-based row location can be passed to this option if header is not located on the first row.
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.
numberFormat standard or excel or object By default standard format is used. Excel implementation of number formatting differs from standard (can be read here) so excel option can be used to match this difference. If custom formatting is needed, a dictionary object can be passed to this option.

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.

xlstream's People

Contributors

achekanov avatar alextimo avatar altxis avatar continuousjr avatar dependabot[bot] avatar gkostov avatar jacktherock avatar jansivans avatar santiq avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.