Closed10
Excel ファイルを読み書きするプログラムを TypeScript で書いていく
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
はじめに
とある選手権イベントの Excel ファイルを加工する仕事を割り当ててもらった、手作業でやっても良いがせっかくなのでプログラムを書いていこう。
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
使用する npm パッケージ
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
ワークスペースの準備
コマンド
# cd ~/workspace
mkdir edamame
cd edamame
npm init -y
npm install xlsx
npm install --save-dev typescript @types/node ts-node
touch main.ts
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
テスト実行
main.ts
async function main() {
console.log("Hello World");
}
main().catch((err) => console.error(err));
コマンド
npx ts-node main.ts
コンソール出力
Hello World
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
NestJS を使えば良かった
TypeScript のセットアップとかが楽になるな。
次回からはそうしてみよう。
今回も途中で困ったら NestJS に切り替えよう。
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
Excel ファイルの準備
コマンド
mkdir data
touch .gitignore
git init
.gitignore
data/*
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
Excel ファイルの準備
yosen.xlsx という名前で Excel ファイルを data ディレクトリにコピーした。
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
Excel ファイルの読み込み
main.ts
import { readFile, utils } from "xlsx";
async function main() {
const workbook = readFile("data/yosen.xlsx");
const sheetIndividualMatch = workbook.Sheets["個人戦"];
const jsonIndividualMatch = utils.sheet_to_json(sheetIndividualMatch);
console.log(jsonIndividualMatch);
}
main().catch((err) => console.error(err));
コンソールに Excel ファイルのデータが JSON 形式で出力されたら成功している。
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
一旦休憩
次はエクセルの列にデータを追加していこう。
これは手作業でやった方が良さそう。
![薄田達哉 / tatsuyasusukida](https://res.cloudinary.com/zenn/image/fetch/s--h04js5hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/02d3bdd44b.jpeg)
結局手作業で終わらせてしまった
終わってから理解したがやりたいことが HTML 出力だったので次は Remix を使ってやってみよう。
このスクラップは1ヶ月前にクローズされました