为什么这个 .xlsx 解析器 javascript 片段在一个目录中有效,但在我的项目中却无效?

问题描述 投票:0回答:0

当我想在节点中解析 .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”变量,并且在这两种情况下它似乎是相同的缓冲区。

我已经尝试初始化一个新项目,只包含代码片段使用的依赖项和版本,并且它在那里工作。这让我相信它一定与项目文件夹有关,但它可能是什么?我不太确定从这里去哪里,我们将不胜感激!如果需要更多信息来解决这个问题,请告诉我。

javascript node.js node-modules sftp xlsx
© www.soinside.com 2019 - 2024. All rights reserved.