やること
1.ExcelファイルをJSONで取得。
2.JSONの編集後、新しいExcelファイルに出力する。
環境
Node.js
・インストール
https://nodejs.org/ja/
推奨版(執筆時点:12.18.4)
・package.jsonの作成
作業用ディレクトリで以下を実行する。
npm init -y
(-y:全てYesでデフォルト設定)
xlsx(npm package)
・インストール
npm install xlsx
・公式
https://www.npmjs.com/package/xlsx
実装
前提
・本の貸出履歴から、各ユーザの未返却履歴のみを抽出する状況を想定。
・履歴データはユーザIDと書籍コードで管理されているため、抽出データは氏名と書籍名を追加する。
・データは以下とする。(BookLendingHistory.xlsx)
<貸出履歴>
<ユーザマスタ>
<書籍マスタ>
Excelファイルの読込
1 2 3 4 5 |
let XLSX = require('xlsx') let workbook = XLSX.readFile('BookLendingHistory.xlsx', {cellDates:true}) // cellDates(日付セルの保持形式を指定) // false:数値(シリアル値)[default] // true :日付フォーマット |
データ取得(JSON)
シート毎にJSONで取得します。
1 2 3 4 5 6 |
let history, users, books workbook.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プロパティは取得されません。(返却日時)
users(ユーザマスタ)
books(書籍マスタ)
抽出
返却日時が無い履歴を抽出します。
1 2 3 |
let notReturned = history.filter(function(item) { return !("返却日時" in item) }) |
抽出結果
加工
ユーザ名と書籍名を加えたJSONを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
let notReturnedReport = [] notReturned.forEach(item => { item.ユーザ名 = getUserName(item) item.書籍名 = getBookName(item) notReturnedReport.push(item) }) /** * JSON内のユーザIDに一致するユーザ名を返す * @param {*} item */ function getUserName(item){ let userName = "" users.some(function(user) { if(user.ユーザID == item.ユーザID) userName = user.ユーザ名 }) return userName } /** * JSON内の貸出書籍コードに一致する書籍名を返す * @param {*} item */ function getBookName(item){ let bookName = "" books.some(function(book) { if(book.書籍コード == item.貸出書籍コード) bookName = book.書籍名 }) return bookName } |
加工結果
出力(Excel)
新しいExcelファイルに書き出します。
1 2 3 4 |
let exportBook = XLSX.utils.book_new() let sexportSheet = XLSX.utils.json_to_sheet(notReturnedReport) XLSX.utils.book_append_sheet(exportBook, sexportSheet, "sheetName") XLSX.writeFile(exportBook, "NotReturnedReport.xlsx") |
出力されたExcelファイル
Github
Sample of Excel to JSON or JSON to Excel
コメント