You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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/, '');
      
  • 检查文件是否被误保存为Excel格式
    还有一种常见情况:你以为保存的是CSV,但实际上不小心存成了.xlsx格式(本质是压缩包),只是手动改了后缀名。这种情况右键文件看属性,或者用文本编辑器打开,就能发现内容不是纯文本的CSV结构,重新导出成正确的CSV格式就行。

我当时用第一个方案就顺利解决了,你可以挨个试试!

内容的提问来源于stack exchange,提问作者MAE

火山引擎 最新活动