Excel ファイルにデータを書き込むためのオープンソース Node.js ライブラリ
シンプルな API を提供し、.xlsx(Excel)ファイルの生成とストリーミング方式での Excel ファイルへのデータ書き込みを実現する、専用のオープンソース Node.js Excel XLSX ライブラリです。
Node-XLSX-Writer とは何ですか?
Node.js開発の世界では、レポートの作成やデータのエクスポートは一般的な要件です。exceljsのような強力なライブラリが存在しますが、時には1つのタスクに特化した解決策が必要です。既存ファイルの読み取りや操作のオーバーヘッドなしに、XLSXファイルを迅速かつ効率的に書き込むことです。そこで登場するのがNode-XLSX-Writerです。この目的のために設計された軽量でシンプルなライブラリです。シンプルさと機能の特化が際立っています。読み取り・書き込み・操作をすべて扱う包括的なExcelライブラリとは異なり、このモジュールはXLSXファイルの書き込みのみに集中しており、軽量で学習が容易、実装が速く、信頼性があります。
Node-XLSX-Writerは、Node.jsアプリケーションでXLSX(Excel)ファイルを生成するために特別に設計された軽量かつシンプルなライブラリです。Excelの書式設定やマルチシートサポート(シンプルなAPIを通じて)を活かしたCSVライクなエクスポートを生成するようなタスクに最適で、コードをクリーンに保ち、アプリケーションのメモリフットプリントを小さく抑えることができます。Ruben Vermeerschが作成し、サンプルXLSXファイルから逆コンパイルしたこのモジュールは、複雑なExcel操作ライブラリを使用せずにデータをExcel形式にエクスポートするシンプルで効果的な方法を開発者に提供します。そのため、データベースやAPIから大規模なレポートを生成する必要があるアプリケーションに最適で、ストリーミング方式により膨大なデータセットでも低メモリ使用を実現します。
Node-XLSX-Write の開始方法
Node-XLSX-Writer をインストールする前に、システムに libzip 開発ライブラリがインストールされている必要があります。このライブラリは、ZIP ファイル(XLSX ファイルは実質的に圧縮された XML)を作成するためにネイティブバインディングに依存しています。インストールを成功させるには、以下のコマンドを使用してください。
npmでNode-XLSX-Writeをインストール
npm install --save xlsx-writerGitHub リポジトリから ダウンロード して、コンパイルされた共有ライブラリをインストールできます。
Node.js における Excel XLSX スプレッドシートの作成
オープンソースの Node-XLSX-Writer ライブラリは、Node.js アプリケーション内で Excel XLSX ファイルを作成・操作する機能を提供します。このライブラリは Microsoft Excel や COM インタープロを必要としません。XLSX ファイル(実質的に XML パーツの ZIP ファイル)をプログラムで構築します。サーバーサイドの Node.js でも使用できるようになっています。以下のコード例は、簡単なデータで Excel ファイルを作成する最もシンプルな方法を示しています。
Node.jsアプリでExcel XLSXファイルを作成する方法は?
// Import the library
const XLSXWriter = require('node-xlsx-writer');
// 1. Create a new instance, specifying the output file path.
const xlsx = new XLSXWriter('./output/simple_report.xlsx');
// 2. Write the header row (optional, but recommended).
xlsx.writeRow(['Name', 'Email', 'Sign-Up Date']);
// 3. Write some data rows.
xlsx.writeRow(['Alice Smith', 'alice@example.com', '2023-10-25']);
xlsx.writeRow(['Bob Johnson', 'bob.j@domain.com', '2023-10-26']);
xlsx.writeRow(['Charlie Brown', 'charlie@brown.com', '2023-10-27']);
// 4. Finalize the file. This step is crucial to save the file properly.
xlsx.finalize();
console.log('Excel file created successfully!');
大規模データセット向けストリーミング
Node-XLSX-Writer が本当に秀でているのはここです。すべてのデータをメモリにロードする代わりに、行を一つずつストリーミングできます。データベースクエリ結果の処理に最適です。ライブラリはデータベースの各レコードを発行する関数を使用します。レコードを取得したらすぐに Excel ファイルの新しい行として書き込みます。このアプローチにより、エクスポートが 100 行でも 100 万行でも、メモリ使用量は一定のままです。
Node.jsアプリでデータベースからストリーミングを実行する方法は?
// Import the library
const XLSXWriter = require('node-xlsx-writer');
// 1. Create a new instance, specifying the output file path.
const xlsx = new XLSXWriter('./output/simple_report.xlsx');
// 2. Write the header row (optional, but recommended).
xlsx.writeRow(['Name', 'Email', 'Sign-Up Date']);
// 3. Write some data rows.
xlsx.writeRow(['Alice Smith', 'alice@example.com', '2023-10-25']);
xlsx.writeRow(['Bob Johnson', 'bob.j@domain.com', '2023-10-26']);
xlsx.writeRow(['Charlie Brown', 'charlie@brown.com', '2023-10-27']);
// 4. Finalize the file. This step is crucial to save the file properly.
xlsx.finalize();
console.log('Excel file created successfully!');
カスタムスタイル(フォント、色、境界線)
完全な機能を備えたスイートほどの広範囲ではありませんが、オープンソースの Node-XLSX-Writer ライブラリは、レポートをプロフェッショナルに見せるための基本的なスタイリングオプションを提供します。フォントを太字や斜体にしたり、背景色や枠線の色を設定したり、枠線スタイル(細い、普通、太い)を定義したりといった、スプレッドシートのスタイル処理に関するさまざまな機能をサポートしています。以下の例は、Node.js アプリ内でヘッダー行にスタイルを適用する方法を示しています。
Node.jsライブラリでヘッダー行にスタイルを適用する方法は?
const XLSXWriter = require('node-xlsx-writer');
const xlsx = new XLSXWriter('./output/styled_report.xlsx');
// Define a style object for the header
const headerStyle = {
bold: true,
background: 'FF2A52F5', // Blue background (ARGB Hex format)
color: 'FFFFFFFF', // White text
border: 'thin', // Thin border around cells
borderColor: 'FF000000' // Black border
};
// Apply the style when writing the header row
xlsx.writeRow(['Product', 'Category', 'Price', 'Stock'], headerStyle);
// Data rows are written without a style (or with a different one)
xlsx.writeRow(['Laptop', 'Electronics', 999.99, 15]);
xlsx.writeRow(['Desk Chair', 'Furniture', 249.50, 8]);
xlsx.finalize();