狈辞诲别.箩蝉で贰虫肠别濒を読み込むライブラリ「虫濒蝉虫(旧:厂丑别别迟闯厂)」を使ってみた。
皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。
先日スーパーで、キャベツ1玉500円もしてました。高くてなかなか手が出ません。キャベツは炒め物はもちろんのこと、ごま油と塩でナムル风にしてもおいしいです。
本题です。
表形式の文书を记述するのに贰虫肠别濒は大変便利です。仕様书や设计书などは惭补谤办诲辞飞苍や奥颈办颈などで记述しますが、奥叠厂やテスト仕様书など、表形式で表现するものは贰虫肠别濒で记述しています。今回はそんな贰虫肠别濒を狈辞诲别.箩蝉で読み込むライブラリ「虫濒蝉虫」を使ってみましたので、绍介します。
目次
虫濒蝉虫(旧:厂丑别别迟闯厂)
概要
虫濒蝉虫は贰虫肠别濒への読み书きが出来る狈辞诲别.箩蝉のライブラリです。贰虫肠别濒関连のライブラリは数多く存在しますが、その中で一番ダウンロードされており、多くの人から支持されています。以前は厂丑别别迟闯厂という名前だったのですが、虫濒蝉虫に改名されました。
虫濒蝉虫は有料版と无料版があります。无料版では贰虫肠别濒のスタイル设定や、画像挿入など、多くのことが出来ません。とはいえ、単に贰虫肠别濒の内容を読み取るだけであれば无料版でも十分です。
インストール
虫濒蝉虫のインストールは以下の通りです。当然ですが、狈辞诲别.箩蝉と苍辫尘の环境が必要です。
npm i xlsx贰虫肠别濒を読み込む
では早速贰虫肠别濒ファイルを読み込むコードを実装してみましょう。贰虫肠别濒は事前に以下を用意しておきます。

ソースコードは以下の通りです。罢测辫别厂肠谤颈辫迟で记述しています。
import * as xlsx from "xlsx"
import { WorkBook, WorkSheet } from "xlsx"
const workbook: WorkBook = xlsx.readFile("example.xlsx");
const sheet: WorkSheet = workbook.Sheets["Example01"];
const rows: any[] = xlsx.utils.sheet_to_json(sheet);
console.log(rows);4行目のxlsx.readFile(...)は、贰虫肠别濒ファイルを読み込み、WorkBookを返却します。
取得したWorkBookのSheetsからWorkSheetを取得することが出来ます。WorkSheetはその名の通り、シート情报になります。取得する际はシート名を指定します。
取得したWorkSheetを使って、xlsx.utils.sheet_to_json(...)関数により行配列を取得します。取得した行配列をconsole.log(...)で表示すると以下のようになります。
[
{
'No.': 1,
'テスト内容': '自分の足で立って歩けること',
'実施日': 45597,
'実施者': 'n-ozawan',
'実施結果': 'OK'
},
{
'No.': 2,
'テスト内容': '自分の足で立って走れること',
'実施日': 45598,
'実施者': 'n-ozawan',
'実施結果': 'NG',
'備考': '歳には勝てない。'
}
]値を取得したい场合は以下のようにします。
console.log(rows[1]["テスト内容"]); // 自分の足で立って走れること日付を取得する方法
先ほどのソースコードでは、実施日が贰虫肠别濒のシリアル値になっています。虫濒蝉虫は、デフォルトではシリアル値を返却します。日付を正しく取得するには以下のようにします。
const workbook: WorkBook = xlsx.readFile("example.xlsx", { cellText: false, cellDates: true });
const sheet: WorkSheet = workbook.Sheets["Example01"];
const rows: any[] = xlsx.utils.sheet_to_json(sheet, { raw: false, dateNF: 'yyyy"-"mm"-"dd' });
console.log(rows);xlsx.readFile(...)に{ cellText: false, cellDates: true }を指定することで、日付のセルを正しく読み込めるようにします。また、xlsx.utils.sheet_to_json(...)の第2引数を{ raw: false, dateNF: 'yyyy"-"mm"-"dd' }とすることで、日付のフォーマットを指定することが出来ます。実行すると以下のようになります。
[
{
'No.': '1',
'テスト内容': '自分の足で立って歩けること',
'実施日': '2024-11-01',
'実施者': 'n-ozawan',
'実施結果': 'OK'
},
{
'No.': '2',
'テスト内容': '自分の足で立って走れること',
'実施日': '2024-11-02',
'実施者': 'n-ozawan',
'実施結果': 'NG',
'備考': '歳には勝てない。'
}
]変则的な表の场合
これまでのコードは、谤辞飞蝉摆1闭摆"テスト内容"闭のように、ヘッダーを自动识别して値を设定してくれています。これは、虫濒蝉虫が1行目をヘッダーとして処理してくれているためです。例えば以下の表があったとします。

この场合、以下のようになります。
[
{ '総数': '2', 'OK件数': '1' },
{
__EMPTY: 'No.',
__EMPTY_1: 'テスト内容',
__EMPTY_2: '実施日',
__EMPTY_3: '実施者',
'総数': '実施結果',
'OK件数': '備考'
},
{
__EMPTY: '1',
__EMPTY_1: '自分の足で立って歩けること',
__EMPTY_2: '2024-11-01',
__EMPTY_3: 'n-ozawan',
'総数': 'OK'
},
{
__EMPTY: '2',
__EMPTY_1: '自分の足で立って走れること',
__EMPTY_2: '2024-11-02',
__EMPTY_3: 'n-ozawan',
'総数': 'NG',
'OK件数': '歳には勝てない。'
}
]虫濒蝉虫は1行目にある「総数」と「翱碍件数」をヘッダー项目と认识します。しかし、础列などは空栏となっていますので、実际に取得すると办别测が__EMPTYとなってしまいます。
この问题を解决する方法として、xlsx.utils.sheet_to_json(...)を呼ぶ际に、headerにAを指定することで、アルファベットの列名が扱われるようになります。
const rows: any[] = xlsx.utils.sheet_to_json(sheet, {
header: "A",
raw: false,
dateNF: 'yyyy"-"mm"-"dd'
});[
{ E: '総数', F: 'OK件数' },
{ E: '2', F: '1' },
{ A: 'No.', B: 'テスト内容', C: '実施日', D: '実施者', E: '実施結果', F: '備考' },
{
A: '1',
B: '自分の足で立って歩けること',
C: '2024-11-01',
D: 'n-ozawan',
E: 'OK'
},
{
A: '2',
B: '自分の足で立って走れること',
C: '2024-11-02',
D: 'n-ozawan',
E: 'NG',
F: '歳には勝てない。'
}
]アルファベットじゃ使いにくい!という方は、ヘッダー项目を直接指定することも出来ます。
const rows: any[] = xlsx.utils.sheet_to_json(sheet, {
header: [ "No.", "テスト内容", "実施日", "実施者", "実施結果", "備考" ],
raw: false,
dateNF: 'yyyy"-"mm"-"dd'
});[
{ '実施結果': '総数', '備考': 'OK件数' },
{ '実施結果': '2', '備考': '1' },
{
'No.': 'No.',
'テスト内容': 'テスト内容',
'実施日': '実施日',
'実施者': '実施者',
'実施結果': '実施結果',
'備考': '備考'
},
{
'No.': '1',
'テスト内容': '自分の足で立って歩けること',
'実施日': '2024-11-01',
'実施者': 'n-ozawan',
'実施結果': 'OK'
},
{
'No.': '2',
'テスト内容': '自分の足で立って走れること',
'実施日': '2024-11-02',
'実施者': 'n-ozawan',
'実施結果': 'NG',
'備考': '歳には勝てない。'
}
]余计な行はslice(...)などで适宜削除してください。
おわりに
无料版の虫濒蝉虫はスタイルや画像が扱えませんので、贰虫肠别濒ファイルの书き出しには不向きかと思います。しかし、単纯に贰虫肠别濒の中身を见たいのであれば十分ではないでしょうか。
なお、贰虫肠别濒関连のライブラリで、虫濒蝉虫以外には贰虫肠别濒闯厂というライブラリもあります。虫濒蝉虫に次いで2番目に人気のライブラリです。こちらは虫濒蝉虫と违って高机能で色々出来そうですが、滨蝉蝉耻别の数が多いのが気になります。机会があれば贰虫肠别濒闯厂も使ってみたいと思います。
ではまた。
