やること
1.ExcelファイルをJSONで取得。
2.JSONの編集後、新しいExcelファイルに出力する。
環境
Node.js
・インストール
https://nodejs.org/ja/
推奨版(執筆時点:12.18.4)
・package.jsonの作成
作業用ディレクトリで以下を実行する。
node init -y(-y:全てYesでデフォルト設定)
xlsx(npm package)
・インストール
npm install xlsx
・公式
https://www.npmjs.com/package/xlsx
実装
前提
・本の貸出履歴から、各ユーザの未返却履歴のみを抽出する状況を想定。
・履歴データはユーザIDと書籍コードで管理されているため、抽出データは氏名と書籍名を追加する。
・データは以下とする。(BookLendingHistory.xlsx)
Excelファイルの読込
index.js
letXLSX=require('xlsx')letworkbook=XLSX.readFile('BookLendingHistory.xlsx',{cellDates:true})// cellDates(日付セルの保持形式を指定)// false:数値(シリアル値)[default]// true :日付フォーマットデータ取得(JSON)
シート毎にJSONで取得します。
index.js
lethistory,users,booksworkbook.SheetNames.forEach(sheet=>{if("history"==sheet)history=XLSX.utils.sheet_to_json(workbook.Sheets[sheet])if("users"==sheet)users=XLSX.utils.sheet_to_json(workbook.Sheets[sheet])if("books"==sheet)books=XLSX.utils.sheet_to_json(workbook.Sheets[sheet])})history(貸出履歴)
※データが無いセルのJSONプロパティは取得されません。(返却日時)
抽出
返却日時が無い履歴を抽出します。
index.js
letnotReturned=history.filter(function(item){return!("返却日時"initem)})加工
ユーザ名と書籍名を加えたJSONを作成します。
index.js
letnotReturnedReport=[]notReturned.forEach(item=>{item.ユーザ名=getUserName(item)item.書籍名=getBookName(item)notReturnedReport.push(item)})/**
* JSON内のユーザIDに一致するユーザ名を返す
* @param {*} item
*/functiongetUserName(item){letuserName=""users.some(function(user){if(user.ユーザID==item.ユーザID)userName=user.ユーザ名})returnuserName}/**
* JSON内の貸出書籍コードに一致する書籍名を返す
* @param {*} item
*/functiongetBookName(item){letbookName=""books.some(function(book){if(book.書籍コード==item.貸出書籍コード)bookName=book.書籍名})returnbookName}出力(Excel)
新しいExcelファイルに書き出します。
index.js
letexportBook=XLSX.utils.book_new()letsexportSheet=XLSX.utils.json_to_sheet(notReturnedReport)XLSX.utils.book_append_sheet(exportBook,sexportSheet,"sheetName")XLSX.writeFile(exportBook,"NotReturnedReport.xlsx")






