原本只是想写个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;