当我想在节点中解析 .xlsx 文件时,我正在努力解决一个错误,我希望有人能帮助我。
我的任务是我需要对 SFTP 服务器上的 xlsx 文件做一些事情,因此我想将它解析为 json。我发现 npm 包 xlsx 适合这项工作并开始尝试。一切都按预期工作:
const SFTP = require('ssh2-sftp-client');
const xlsx = require('xlsx');
require('dotenv').config('./.env');
const parseXlsx = async () => {
const Client = new SFTP();
await Client.connect({
port: process.env.Server_Port,
host: process.env.Server_Host,
user: process.env.Server_User,
password: process.env.Server_Pass,
});
const xlsxFile = await Client.get('/myFile.xlsx')
const workbook = xlsx.read(xlsxFile, { cellDates: true });
const sheet = workbook.Sheets[workbook.SheetNames[0]];
const json = xlsx.utils.sheet_to_json(sheet);
console.log(json);
}
上面的代码很好地记录了json格式的文件内容。然而,以上是在“乱搞文件夹”中完成的。我想在不同的项目/文件夹中使用此代码片段,因此我复制并粘贴了代码并确保我具有与测试相同的依赖项/版本。当我在项目中执行此代码段时,出现以下错误:
发生异常:错误:在 zip 中找不到文件 xl/worksheets/_rels/sheet1.xml.rels
我已经确保依赖项是对应的。
我试图让它在项目文件夹中使用本地 xlsx 文件并使用节点 fs (fs.readfileSync()) 模块读取它而不是从 SFTP 服务器获取它,但它仍然给出相同的错误。
两个文件夹都使用相同的 VS Code 工作区打开,并且都使用节点 v16.14.0。
如果从 SFTP 服务器正确获取数据,我已经通过调试检查了“xlsxFile”变量,并且在这两种情况下它似乎是相同的缓冲区。
我已经尝试初始化一个新项目,只包含代码片段使用的依赖项和版本,并且它在那里工作。这让我相信它一定与项目文件夹有关,但它可能是什么?我不太确定从这里去哪里,我们将不胜感激!如果需要更多信息来解决这个问题,请告诉我。