
Security News
GitHub Actions Pricing Whiplash: Self-Hosted Actions Billing Change Postponed
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.
@rippeyai/excel-row-stream
Advanced tools
Fast and simple transform stream for excel file parsing
npm i excel-row-stream
Here is an example:
import { createReadStream } from "fs";
import { Writable } from "stream";
import { pipeline } from "stream/promises";
import createExcelWorkbookStream, { Row } from "excel-row-stream";
const fileStream = createReadStream("./some.xlsx");
const workbookStream = createExcelWorkbookStream({
matchSheet: /sheet name/i,
dropEmptyRows: true,
});
const resultStream = new Writable({
objectMode: true,
write(row: Row, _encoding, callback) {
console.log(row.index, row.values);
callback();
},
});
await pipeline(fileStream, workbookStream, resultStream);
console.log("Done!");
The workbookStream will only return rows from matched sheets.
hh:mm format (without seconds) in excel but the underlying data has more resolution. Defaults to true, because this library is intended for data analysis, not replicating what the user saw in Excel. Also because this is what pandas would do. This is only applied to when the time field has a format type of CUSTOM . Which is what Excel automatically applies when it infers a field is a time field.All row.values have unknown type. Please always validate your data. For example, you can do it with the excellent io-ts library.
This library provides several streams to make your life easier
Creates a stream that converts rows with values into objects with column names. The column names come from the first row (index = 1).
Options: – sanitizeColumnName optional function to transform column names.
const fileStream = createReadStream("file.xlsx");
const parserStream = createExcelParserStream({
matchSheet: /.*/,
dropEmptyRows: true,
});
const withColumnsStream = createRowToRowWithColumnsStream({
sanitizeColumnName: (columnName) =>
columnName.toLowerCase().replace(/\W/g, "_"),
});
const resultStream = new Writable({
objectMode: true,
write(row: RowWithColumns, _encoding, callback) {
console.log(row.index, row.columns);
callback();
},
});
await pipeline(fileStream, parserStream, withColumnsStream, resultStream);
Creates a stream that strips the index from rows and returns the data directly, either values or columns.
const fileStream = createReadStream("file.xlsx");
const parserStream = createExcelParserStream({
matchSheet: /.*/,
dropEmptyRows: true,
});
const asObjectsStream = createRowToRowAsObjectStream();
const resultStream = new Writable({
objectMode: true,
write(row: unknown[], _encoding, callback) {
console.log("values", row);
callback();
},
});
await pipeline(fileStream, parserStream, asObjectsStream, resultStream);
Creates a stream that checks if no data flows through it and throws an error with message.
const fileStream = createReadStream("file.xlsx");
const parserStream = createExcelParserStream({
matchSheet: /.*/,
dropEmptyRows: true,
});
const filterStream = new Transform({
objectMode: true,
transform(row: RowWithValues, _encoding, callback) {
// skip all the data
callback();
},
});
const throwIfEmpty = createThrowIfEmptyStream({
message: "Can not believe it",
});
// will throw
await pipeline(fileStream, parserStream, filterStream, throwIfEmpty);
License
FAQs
Fast and simple transform stream for excel files parsing
We found that @rippeyai/excel-row-stream demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.