ExcelJSでExcelファイルを読み書きしてみる
業務用アプリを作る上で、Excelファイルの読み書きは切っても切れない問題です。(少なくとも私の職場ではそう)
てな訳で、node.js用ライブラリExcelJSを利用してExcelファイルを読み込んでみます。
準備
筆者の愛機MacBook(金)にはExcelなんぞ入っていません。なんで、Microsoftのテンプレートサイトからxlsxファイルを調達します。
今回は毎日のタスク リストというファイルをお借りして、Book1.xlsx
という名前でダウンロードしておきます。
で、毎度のごとく作業スペースの作成から。新緑の季節なのでleaf
にしときます。
$ mkdir leaf
$ cd leaf/
$ npm init
ExcelJSのインストール。
$ npm install exceljs
作成
公式サイトのreadmeを参考に、app.jsを作成します。
とりあえず’毎日のタスク リスト’シートのセルG6を読み込んでをコンソールに表示するだけのプログラム。
var Excel = require('exceljs');
var workbook = new Excel.Workbook();
workbook.xlsx.readFile("./Book1.xlsx")
.then(function() {
var worksheet = workbook.getWorksheet('毎日のタスク リスト');
var g6 = worksheet.getCell('G6');
console.log(g6);
});
実行
実行すると…
$ node app.js
こんな結果が返ってきます。
(node:5041) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.
{ _row:
{ _worksheet:
{ id: 1,
name: '毎日のタスク リスト',
_rows: [Object],
_columns: [Object],
_keys: {},
_merges: [Object],
_workbook: [Object],
tabColor: undefined,
dataValidations: [Object] },
_number: 6,
_cells: [ , [Object], [Object], , [Object], [Object], [Circular] ],
style: {},
height: 17.25,
_hidden: false },
_column:
{ _worksheet:
{ id: 1,
name: '毎日のタスク リスト',
_rows: [Object],
_columns: [Object],
_keys: {},
_merges: [Object],
_workbook: [Object],
tabColor: undefined,
dataValidations: [Object] },
_number: 7,
_key: undefined,
width: 35,
style:
{ numFmt: 'mm-dd-yy',
font: [Object],
border: null,
fill: [Object],
alignment: [Object] },
_header: [],
_hidden: false },
_address: 'G6',
_value:
{ model:
{ address: 'G6',
type: 3,
value: '休み中に必要なものをカバンに詰める',
shared: true,
style: [Object] } },
style:
{ numFmt: 'General',
font: { size: 6, name: 'メイリオ', family: 3, charset: 128, scheme: 'minor' },
border: null,
fill: { type: 'pattern', pattern: 'none' },
alignment: { vertical: 'middle', wrapText: true } },
_mergeCount: 0 }
単に文字列やスタイルだけでなく、かなりいろんな情報が取得できますね。
本題からは逸れますが、コンソールに表示されるfs: re-evaluating native module sources is not supported.
とかいうメッセージは、Node.js v6に対応できていないライブラリを使った時に出るようです。どうしても気になるようなら、 Node.jsをv4.4.4(LTS)やv5に戻しましょう。
で、こんなに細かい情報はいらない、セルの値だけでいいという場合は、app.js
の6行目を
var g6 = worksheet.getCell('G6').value;
とすると、
休み中に必要なものをカバンに詰める
とだけ返ってきます。