jsonexport在Windows系统无法正常生成XLS文件问题求助
解决Linux生成的XLS文件在Windows打开异常的问题
我帮你分析了下,核心问题出在你生成的其实是制表符分隔的纯文本文件(TSV),却给它标了.xls后缀——Windows系统的Excel对这种“伪Excel文件”的解析逻辑和Linux下的办公软件(比如LibreOffice)差异很大,再加上换行符、编码的问题,就会导致打开异常。下面给你几个具体的修复方案:
方案1:调整换行符与编码,适配Windows解析
Linux默认用\n作为换行符,但Windows的Excel需要\r\n才能正确识别行结构;另外你用binary编码写入文本内容也容易出问题,换成utf8更稳妥。修改后的代码如下:
const fs = require('fs'); // 注意原代码漏了引入fs模块,必须加上! var arrayData = [{"Email":"Email","P1":"TEST1","P2":"P2"}, {"Email":"Email","TEST1":"TEST1","TEST2":"TEST2"}]; var jsonexport = require('jsonexport'); var options = { rowDelimiter:'\t', newline: '\r\n' // 强制使用Windows兼容的换行符 }; jsonexport(arrayData,options,function(err, xlsfile){ if(err) return console.log("error while writing xls file "+err); // 如果是在Windows环境运行,路径要改成Windows格式,比如'C:/Desktop/test.xls' var pathToSave = '/Desktop/test.xls'; fs.writeFileSync(pathToSave, xlsfile, 'utf8'); // 用utf8编码写入文本内容 cb(null,pathToSave) });
方案2:改用TSV后缀,让Excel正确识别格式
既然生成的是制表符分隔的文本,不如直接给文件改成.tsv后缀,Windows下Excel会自动识别这种格式,不会出现解析混乱。只需要把路径改成/Desktop/test.tsv就行,这个方法最简单。
方案3:生成真正的二进制XLS文件(推荐)
如果确实需要标准的.xls文件(不是文本伪装的),建议改用专门生成Excel文件的库,比如node-xlsx或者exceljs,因为jsonexport本质是生成文本表格,不是真正的Excel二进制文件。用node-xlsx的示例代码如下:
const fs = require('fs'); const xlsx = require('node-xlsx'); // 把JSON转成Excel需要的二维数组格式 var excelData = [ ["Email", "P1", "P2"], // 表头行 ["Email", "TEST1", "P2"], // 第一行数据 ["Email", "TEST1", "TEST2"] // 第二行数据 ]; // 创建工作表并生成二进制文件 const workSheet = [{ name: 'Sheet1', data: excelData }]; const excelBuffer = xlsx.build(workSheet); fs.writeFileSync('/Desktop/test.xls', excelBuffer);
内容的提问来源于stack exchange,提问作者Shree
相关产品推荐
相关产品推荐

