node(TypeScript)でExcelの中身をjsonで吐き出す
xlsxというライブラリを使います。
スター数も多いし安定していそうです。
https://www.npmjs.com/package/xlsx
こちらの実験環境に中身を入れていきます。
まずはxlsxをinstallします。
npm install xlsx
適当なExcelファイルを用意する
実験用にExcelを用意して、assetsフォルダを作成してそこに突っ込んでください。
Excelデータは以下をベースに、歯抜けデータの確認したいので少しいじったものを用意しました。
mkdir assets
table-data-with-hyperlinks.xlsxをそこにいれます。
index.ts
import * as xlsx from "xlsx";
const main = () => {
let book = xlsx.readFile("assets/table-data-with-hyperlinks.xlsx")
let sheet = xlsx.utils.sheet_to_json(book.Sheets["PlainTable"], {header: "A", raw: false, blankrows: true,defval: null})
console.log(sheet)
};
main();
nodeでのみreadFileを使いましょう。
バイナリデータとかならreadメソッドで読めるはずです。
今回はExcelの中身をjsonに吐き出したいので、utils.sheet_to_jsonを使います。
ちなみに、これ以外にも以下のような吐き出し方があるようです。
・sheet_to_csv
・sheet_to_txt
・sheet_to_html
・sheet_to_formulae
sheet_to_formulaeについては、使い方が少しマニアックだなという印象でした。
話をsheet_to_jsonに戻します。
第二引数にオプションを指定することができます。
sheet_to_json(worksheet: WorkSheet, opts?: Sheet2JSONOpts)
オプションについての詳しい説明は以下を読んでください。
https://docs.sheetjs.com/docs/api/utilities/#formulae-output
今回使っているオプションについてざっくり説明します。
その前に、説明しやすくするために吐き出される結果を先に掲載しときます。
[
{
A: 'Event ID',
B: 'Date',
C: 'Location',
D: 'Capacity',
E: 'Speakers',
F: 'Num'
},
{
A: 'E107',
B: '2020-12-10',
C: null,
D: null,
E: 'Debra Berger',
F: null
},
{
A: 'E108',
B: 'おおおお',
C: 'Montgomery',
D: '10',
E: 'Delia Dennis',
F: '2'
},
{
A: 'E109',
B: '2020-12-12',
C: 'Montgomery',
D: '10',
E: 'Diego Siciliani',
F: '3'
},
{
A: 'E110',
B: '2020-12-13',
C: 'Boise',
D: '25',
E: 'Gerhart Moller',
F: '4'
},
{ A: null, B: null, C: null, D: null, E: null, F: null },
{
A: 'E112',
B: '2020-12-15',
C: 'Fremont',
D: '25',
E: 'Irvin Sayers',
F: '6'
},
{
A: 'E113',
B: '2020-12-16',
C: 'Salt Lake City',
D: '20',
E: 'Isaiah Langer',
F: '7'
},
{
A: 'E114',
B: '2020-12-17',
C: 'Salt Lake City',
D: '20',
E: 'Johanna Lorenz',
F: '8'
}
]
header: “A”
1行が一つのオブジェクトで表現されていています。
これはオプションで指定したheader: “A”が効いているため、このようになっています。
各値にどの列かわかるようにA,B,Cというようなキーが振られています。
Excelの列名と同じですね。
raw: false
生の値(true)またはフォーマットされた文字列(false)を使用します。
falseにすることで、セルに入っている値がそのままの文字列として表現されます。
こちらを指定しなければ型もそのままで入ってきます。数値ならnumberです。
blankrows: true
出力に空白行を含めるかどうかの設定です。
defval: nullnull
または undefined の代わりに指定された値を使用する。今回は明示的にnullにしました。
ディスカッション
コメント一覧
まだ、コメントがありません