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を使用するべき。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

実践TypeScript【電子書籍】[ 吉井健文 ]
価格:3726円 (2019/7/23時点)

[

楽天で購入

](https://hb.afl.rakuten.co.jp/hgc/18648e8b.7d833591.18648e8c.ed1bab3c/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F5456816fd8833397a6aa8b80647873ad%2F%3Fscid%3Daf_pc_bbtn&m=http%3A%2F%2Fm.rakuten.co.jp%2Frakutenkobo-ebooks%2Fi%2F18341447%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxfQ==)

速攻でメモできる QuickNote リリースしました!

QuickNoteは動作が超軽量でサクサクかけるノートアプリです。一瞬の閃きを逃さずにノートを開き書き始めることができます。 アカウント登録も不要です。お試しあれ!

Excel操作をコマンドで! proBoarderExcel

Excelはマウスで操作するのが基本ですが、マウス操作に疲れてはいませんか? キーボードでExcel操作ができるようになるアプリです。オープンソースで無料です。

積み上げ! Daily Stack リリースしました!

Daily Stack は日々の積み上げを管理するToDoアプリです。過去の積み上げの振り返りだけでなく、ツイート機能もあります。 アカウント登録不要ですぐに使い始めることができます。

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱