使用ExcelJS解析Windows创建的CSV文件时出现错误
解决Windows生成CSV文件用ExcelJS解析时的"找不到中央目录"错误
嘿,我之前也踩过这个一模一样的坑!当你用Windows系统创建的CSV文件(比如Excel导出的),用ExcelJS尝试解析时弹出这个错误:
message: "Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"
其实根本不是文件变成了zip,问题出在Windows生成的CSV的编码和格式特性上,给你几个靠谱的解决办法:
手动转换文件编码为UTF-8无BOM
最简单的方式是用系统自带的记事本打开这个CSV文件,点击「文件」→「另存为」,在弹出的窗口里把编码改成「UTF-8」(注意别选带BOM的选项,有些编辑器里会标注为「UTF-8无BOM」),保存之后再用ExcelJS解析,大概率就能正常工作了。在代码里指定编码或处理BOM
如果不想手动改文件,也可以在读取时针对性处理编码:- 如果是Windows Excel导出的UTF-16 LE编码CSV,读取时指定编码:
const fs = require('fs'); const ExcelJS = require('exceljs'); async function parseWindowsCSV() { const fileBuffer = fs.readFileSync('your-windows-csv.csv'); // 转换为UTF-16 LE编码的字符串 const csvContent = fileBuffer.toString('utf16le'); const workbook = new ExcelJS.Workbook(); await workbook.csv.readString(csvContent); // 后续处理表格内容 } - 如果是带BOM的UTF-8编码,先去掉BOM再解析:
const csvContent = fileBuffer.toString('utf8').replace(/^\uFEFF/, '');
- 如果是Windows Excel导出的UTF-16 LE编码CSV,读取时指定编码:
检查文件是否被误保存为Excel格式
还有一种常见情况:你以为保存的是CSV,但实际上不小心存成了.xlsx格式(本质是压缩包),只是手动改了后缀名。这种情况右键文件看属性,或者用文本编辑器打开,就能发现内容不是纯文本的CSV结构,重新导出成正确的CSV格式就行。
我当时用第一个方案就顺利解决了,你可以挨个试试!
内容的提问来源于stack exchange,提问作者MAE




