AutoItの代わりにnode.jsで自動化してエクセルファイルを出力します。会社によってはパソコンにexe入れるのにシステム管理部署に問い合わせとか必要で、サクッと入れて使えないことも多々あるらしく。
というわけで、node.jsでサクッとwebからデータを定期取得してエクセルに転記するような人がやるべきではない作業を行う為に、xlsxパッケージを使ってみます。
1.xlsxパッケージを使う
npm install xlsx でパッケージをインストール。これでrequire(‘xlsx’);で使えるようになります。
Chromeでパッケージのサイト見ると「保護されていない通信」になるんですが・・

2.データを用意し、シートに書き込み保存
新規ワークブックにデータを書き込み、ファイルとして保存してみます。
データは2次元配列で、1行ずつ、数は違っていてもOK。
const xlsx = require('xlsx'); const xutil = xlsx.utils; //util変数にセットしておくと楽 (async() => { let d = [ ["one","2番目","3番目"], //1行目 [4,10,"https://www.yahoo.co.jp","こんにちは"] ]; let wb = xutil.book_new(); let ws = xutil.aoa_to_sheet(d); let ws_name = "シート1番目"; xutil.book_append_sheet(wb,ws,ws_name); xlsx.writeFile(wb, "test.xlsx"); })();
2.1 utils.aoa_to_sheet
JSデータ配列を新規ワークシートに変換。 aoa= array of array of JS ということか。
Utilities Importingにはほかにもjson_to_sheet、sheet_add_aoa(aoaを既存のシートに追加)などあるので、用途に応じて使うといいです。
3. 既存のエクセルに書き込み
新規エクセルファイルに書き込むのは簡単です。
実際は、ピボットなど設定した、既存のエクセルに追記することが多いのではないでしょうか?
集計、グラフなど追加したエクセルにデータ部分を追記していくという。
それをやってみます。
var wb = xlsx.readFile('test.xlsx'); //workbookを読み込む var ws = wb.Sheets[wb.SheetNames[0]];//1番目のシート let d = [ ["1番目","second"], [1,"あ","いうえお","さしす"], ]; // 選択したシートws に r=1番目(2行目),c=0番目(A列)から書き込む xlsx.utils.sheet_add_aoa(ws,d,{origin:{r:1,c:0}}); xlsx.writeFile(wb, "after.xlsx");
分かりやすいですね。addなので追加、場所も originで r=row=行インデックス(0=1行目)、c=column=列インデックス(0=A列)となります。
4. テンプレートエクセルを用意してそこに書き込む
よくあるのがテンプレートエクセルに追記する形ですね。
既存のスタイルなどを踏襲したいところです。例えばC列はURL入れるのでハイパーリンク最初から設定したり。
一番やりたいのは、データシートにはテーブルがセットしてあり、違うシートにはピボット、グラフなど設定したテンプレートエクセルに、データシートのデータ部分だけを書き換えてということなんですが。
xlsx.writeFile(‘fiename’); するだけで、テーブル設定がOFFになりますね・・・
うーん、node.jsだと厳しいのかな・・・
わかったら更新しようと思います。
コメント