TypeScript で xlsx ファイルを新規作成する

Excel ファイル (.xlsx)を自動的に出力して欲しいという要望があり、今までExcelVBAで作成していましたが、なんとか開発効率を上げられないかと考えている中で試行錯誤で使ってみましたので、紹介します。

※タイトルに TypeScript で、と書いてますが、あまりTypeScript的な要素は無いです。

1. Nodeモジュール

xlsx というモジュールを使ってみました。インストールは以下のコマンドで行います。


npm i xlsx

2. 配列からワークシートを作成し、Excelファイルを出力する。

import * as xlsx from "xlsx"
const Workbook = xlsx.utils.book_new();
let wsData = [
    ["ヘッダ1", "ヘッダ2"],
    ["値1", "値2"]
]
let ws = xlsx.utils.aoa_to_sheet(wsData)
xlsx.utils.book_append_sheet(Workbook, ws, "AOASheet")
xlsx.writeFile(Workbook, "aoa.xlsx")

実行すると、aoa.xlsxというファイルがカレントディレクトリに出力されます。

以下のようなExcelファイルが作成されるはずです。

  • xlsx.utils.book_new() で、Excelブックを新規作成しています。
  • xlsx.utils.aoa_to_sheet で、配列データを受け取ってワークシートオブジェクトを生成します。その後、
  • xlsx.utils.book_append_sheet で、ワークシートをブックに追加します。このときのワークシート名は AOASheet としています。
  • xlsx.writeFile でファイルに書きだしています。このときのファイル名は aoa.xlsx としています。

3. JSON からワークシートを作成し、Excelファイルを出力する。

import * as xlsx from "xlsx"
const Workbook = xlsx.utils.book_new();
let wsData = [
    { "ヘッダ1":1, "ヘッダ2":2},
    { "ヘッダ1":"A", "ヘッダ2":"B"}
  ]
let option = {
    header:["ヘッダ1","ヘッダ2"]
}
let ws = xlsx.utils.json_to_sheet(wsData, option)
xlsx.utils.book_append_sheet(Workbook, ws, "test1")
xlsx.writeFile(Workbook, "json.xlsx")

実行すると、json.xlsxというファイルがカレントディレクトリに出力されます。

以下のようなExcelファイルが作成されるはずです。

変化点としては、ワークシートとヘッダを分けて定義しています。

  • wsData オブジェクトでデータを定義しています。オブジェクトのメンバーは後述する option のヘッダ項目名と対応します。
  • option オブジェクトで、オプションを定義しています。この中の header 配列でヘッダ名を定義しています。

4. 感想

  1. データベースからSQLで情報をとってきて、Excelに変換する処理だったら、VBAより効率よく実装できそう。
  2. 罫線とかグラフとかの作成方法は分からないので、今後調査する。
  3. このモジュールがMicrosoft製ではないので、出来ないことがあることを念頭に使用する。
  4. すべてを網羅しようと思うと、PowerShellとかC#とかVBAを使用するべき。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です