原本只是想寫個NodeJS爬蟲,中間涉及到一點Excel。找了找Excel模塊,xlsx模塊在npm官網上搜索排名很靠前,就選了它,star數還比較可觀。仔細瞭解了xlsx模塊才發現這玩意生成Excel文件實在太麻煩,搜索網上的博客,那些人都是互相抄襲,代碼也不夠優雅。得了,仍是我本身造輪子吧。
註釋很詳細,直接上代碼:npm
const XLSX = require('xlsx'); class WorkBook { /** * @param {Object} data Excel表格源數據,格式以下: * { * Sheet1: [ * ['姓名', '學號', '籍貫'], * ['lxz', '10131911', 'hunan'] * ] * } */ constructor(srcData) { this.srcData = srcData; this.workbook = {}; this.workbook.SheetNames = []; this.workbook.Sheets = {}; for(let item in srcData) { this.workbook.SheetNames.push(item); this.addSheet(item, srcData[item]); } } /** * 往Excel文件添加一個表格 * @param {string} sheetName 表格名 * @param {object} sheet 表格數據 * @returns void */ addSheet(sheetName, sheet) { this.workbook['Sheets'][sheetName] = {}; let row = sheet.length; let col = sheet[0].length; let to = ''; for(let i=0; i<row; i++) { for(let j=0; j<col; j++) { let key = this.ten2twentysix(j+1) + (i+1); this.workbook['Sheets'][sheetName][key] = {'v': sheet[i][j]}; to = key; } } this.workbook['Sheets'][sheetName]['!ref'] = 'A1:' + to; } /** * 10進制轉26進制 * @param {number} num 正整數 * @returns string */ ten2twentysix(num) { let str = ''; while(num) { let rest = num % 26; num = (num-rest) / 26; str += String.fromCharCode(rest + 64); } let twentysixNumber = ''; let len = str.length; for(let i=len-1; i>=0; i--) { twentysixNumber += str[i]; } return twentysixNumber; } /** * 將數據寫入Excel * @param {string} filename 文件路徑 */ writeFile(filename) { XLSX.writeFile(this.workbook, filename); } } module.exports = WorkBook;