Skip to content

JS-AK/excel-toolbox

Repository files navigation

excel-toolbox

ci-cd

📘 Docs: js-ak.github.io/excel-toolbox

A lightweight toolkit for working with .xlsx Excel files — modify templates, merge sheets, and handle massive datasets without dependencies.

Installation

npm install @js-ak/excel-toolbox

Features

  • ✨ Work with templates using TemplateFs (filesystem) or TemplateMemory (in-memory)
  • 📥 Insert and stream rows into Excel files
  • 🧩 Merge sheets from multiple .xlsx files
  • 🧼 Remove sheets by name or index
  • 💎 Preserve styles, merges, and shared strings

Template API

TemplateFs and TemplateMemory

Both classes provide the same API for modifying Excel templates.

Common Features

  • substitute() — replace placeholders like ${name} or ${table:name}
  • insertRows() / insertRowsStream() — insert rows statically or via stream
  • copySheet() — duplicate existing sheets
  • validate() and save() / saveStream() — output the result
import { TemplateFs } from "@js-ak/excel-toolbox";

const template = await TemplateFs.from({
  destination: "/tmp/template",
  source: fs.readFileSync("template.xlsx"),
});

await template.substitute("Sheet1", { name: "Alice" });
await template.insertRows({ sheetName: "Sheet1", rows: [["Data"]] });
const buffer = await template.save();
fs.writeFileSync("output.xlsx", buffer);

Sheet Merging API

mergeSheetsToBaseFileSync(options): Buffer

Synchronously merges sheets into a base file.

mergeSheetsToBaseFile(options): Promise<Buffer>

Async version of the above.

Example

import fs from "node:fs";
import { mergeSheetsToBaseFileSync } from "@js-ak/excel-toolbox";

const baseFile = fs.readFileSync("base.xlsx");
const dataFile = fs.readFileSync("data.xlsx");

const result = mergeSheetsToBaseFileSync({
  baseFile,
  additions: [{ file: dataFile, sheetIndexes: [1] }],
  gap: 2,
});

fs.writeFileSync("output.xlsx", result);

License

MIT — see LICENSE