支持读写Excel的node.js模块支持读写excel文件的模块有很多,但是各有不足。有的只支持xls/xlsx一种格式,有的只支持读写。取数据有的只支持导出文件,有的需要依赖python解析。常见的npm依赖模块如下:js-xlsx:目前Github上处理Excel星数最多的库,支持解析XLSX/XLSM/XLSB/XLS/CSV多种格式。解析是用纯js实现的,编写需要nodejs或者FileSaver.js可以生成写入Excel,可以生成分表Excel,功能强大,但是上手稍微有点难度。没有提供Exceltableapiexamplecellwidth的基本设置,文档有点乱,不适合快速使用;node-xlsx:基于Node.js解析excel文件数据并生成excel文件,只支持xlsx格式文件;excel-parser:基于Node.js解析excel文件数据,支持xls、xlsx格式文件,需要依赖python,过于繁重,不实用;excel-export:基于Node.js生成并导出excel文件,生成的文件格式为xlsx,可设置单元格宽度,API简单易用,但不能生成worksheet单词列表,比较简单,而且基本功能基本可以满足;node-xlrd:基于node.js从excel文件中提取数据,只支持xls格式文件,不支持xlsx,有点过时,常用的都是XLSX格式。xlxs对于Excel文件的内容解析和转换已经有了比较成熟的解决方案:https://github.com/SheetJS/js...npminstallxlsxworkbook对象是指整个Excel文档。我们使用js-xlsx读取Excel文档后,会得到workbook对象。引用Excel文档中表格的工作表对象。我们知道一个Excel文档可以包含很多表格,每个表格对应一个worksheet对象。单元格对象是指工作表中的单元格,单元格就是一个单元格对象。A1标记,引用单元格时使用的地址格式(eg:A1,C7):{...},//单元格'A2':{...},...},//工作表'sheet2':{//单元格'A1':{...},//单元格'A2':{...},...}}}基本用法使用XLSX.read读取获取的Excel数据,返回工作簿,使用XLSX.readFile打开Excel文件,返回工作簿并使用工作簿.SheetNames获取sheet名称使用workbook.Sheets[xxx]通过表名获取表格使用worksheet[address]操作单元格使用XLSX.utils.sheet_to_json获取单个表格的表格数据转换为json格式用XLSX.writeFile(wb,'output.xlsx')生成新的Excel文件,从'xlsx'中读取文件importXLSX;constwb=XLSX.readFile('path/to/file.xlsx');//返回工作簿工作簿对象结构如下:{SheetNames:['Sheet1','Sheet2'],Sheets:{'Sheet1':{...},'Sheet2':{...}},Props:{...},....}获取工作表根据工作表名称获取对应的工作Tableconstws=wb.Sheets[workbook.SheetNames[0]];//返回worksheetworksheet对象结构如下:{'!ref':'A1:C7',A1:{...},B1:{...},....}//whereworksheet['!ref']是工作表的有效范围(根据A-1)。通过worksheet[address_of_cell]获取单元格,即通过A1标记的键名获取单元格:constcell=wb['C7'];或者通过地址对象获取{r:R,c:C}单元格,R和C分别代表从0开始的行和列索引。//XLSX.utils中的encode_cell/decode_cell方法可以转换cell地址constcell=wb[XLSX.utils.encode_cell({r:7,c:2})];//相当于wb['C7']cell对象结构如下:{v:'C7SKY',w:'C7SKY',t:'s',...}editcellcell.v='Xiaoyingzhi';删除单元格.w;需要注意的是,内置的导出工具会先尝试使用w的值,所以如果以后要使用导出功能,修改值时要删除w按钮或者设置为undefined。删除行/删除列js-xlsx没有提供删除行/删除列的功能,需要我们自己实现:functionencodeCell(r,c){returnXLSX.utils.encode_cell({r,c});}functiondeleteRow(ws,index){constrange=XLSX.utils.decode_range(ws['!ref']);对于(letrow=index;row
