こんにちは。
前回の続きです。
今回は、前回の内容を応用して書き込みを行います。
前回の内容はこちらを参考に。
では、サンプルです。
var xlsx = require('xlsx'); var book = xlsx.readFile('sample.xlsx'); var ws = book.Sheets['Sheet1']; var range = ws['!ref']; var decodeRange = xlsx.utils.decode_range(range); for (var colIdx = decodeRange.s.c; colIdx <= decodeRange.e.c; colIdx++) { for (var rowIdx = decodeRange.s.r; rowIdx <= decodeRange.e.r; rowIdx++) { var address = xlsx.utils.encode_cell({ r: rowIdx, c:colIdx }); var cell = ws[address]; if (typeof cell !== "undefined" && typeof cell.v !== "undefined") { ws[address] = {t : 's', v : 'chg:' + address, w : 'chg:' + address}; } else { ws[address] = {t : 's', v : 'add:' + address, w : 'add:' + address}; } } } book.Sheets['Sheet1'] = ws; xlsx.writeFile(book, 'sample.xlsx');
結果はこんな感じ。
詳細を見ていきましょう。
準備
こちらは前回の記事でも紹介しているので今回は割愛。
var xlsx = require('xlsx'); var book = xlsx.readFile('sample.xlsx'); var ws = book.Sheets['Sheet1']; var range = ws['!ref']; var decodeRange = xlsx.utils.decode_range(range);
ループで回して値を設定
ループの部分は前回の記事で紹介しているので割愛。
for (var colIdx = decodeRange.s.c; colIdx <= decodeRange.e.c; colIdx++) { for (var rowIdx = decodeRange.s.r; rowIdx <= decodeRange.e.r; rowIdx++) { ..... } }
次に、アドレスの取得。
これも前回紹介したので割愛。
var address = xlsx.utils.encode_cell({ r: rowIdx, c:colIdx }); var cell = ws[address];
最後が値の設定処理です。
今回は、すでに値がある場合は「chg:アドレス」
空の場合は「add:アドレス」を書き込みます。
if (typeof cell !== "undefined" && typeof cell.v !== "undefined") { ws[address] = {t : 's', v : 'chg:' + address, w : 'chg:' + address}; } else { ws[address] = {t : 's', v : 'add:' + address, w : 'add:' + address}; }
ブックを更新して書き込み
最後に設定した値をブックに書き込みます。
これをしないとせっかく設定した値が書き込まれないので
忘れないでくださいね。
book.Sheets['Sheet1'] = ws; xlsx.writeFile(book, 'sample.xlsx');
以上です。
エクセルは使うことがたくさんあると思うので
覚えておくといいですね。