excel ERR错误:到达数据结尾(数据长度= 0,请求索引= 4),拉链坏了?

mhd8tkvw  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(441)

我正在制作一个WhatsApp机器人,我将聊天记录保存在Excel文件中(我使用Exceljs)来读取和处理一些响应,我更喜欢使用Promise并解决它们,我有一个读取聊天记录的函数:

const readChat = (number, message, step = null) =>
  new Promise((resolve, reject) => {
    setTimeout(() => {
      number = number.replace("@c.us", "");
      number = `${number}@c.us`;
      const pathExcel = `./chats/${number}.xlsx`;
      const workbook = new ExcelJS.Workbook();
      const today = moment().format("DD-MM-YYYY hh:mm");

      if (fs.existsSync(pathExcel)) {
        const workbook = new ExcelJS.Workbook();
        workbook.xlsx
          .readFile(pathExcel)
          .then(() => {
            const worksheet = workbook.getWorksheet(1);
            const lastRow = worksheet.lastRow;
            let getRowInsert = worksheet.getRow(++lastRow.number);
            getRowInsert.getCell("A").value = today;
            getRowInsert.getCell("B").value = message;

            if (step) {
              getRowInsert.getCell("C").value = step;
            }

            getRowInsert.commit();
            workbook.xlsx
              .writeFile(pathExcel)
              .then(() => {
                const getRowPrevStep = worksheet.getRow(lastRow.number);
                const lastStep = getRowPrevStep.getCell("C").value;
                resolve(lastStep);
              })
              .catch((err) => {
                console.log("ERR", err);
                reject("error");
              });
          })
          .catch((err) => {
            console.log("ERR", err);
            reject("error");
          });
      } else {
        const worksheet = workbook.addWorksheet("Chats");
        worksheet.columns = [
          { header: "Fecha", key: "number_customer" },
          { header: "Mensajes", key: "message" },
          { header: "Paso", key: "step" },
        ];

        step = step || "";

        worksheet.addRow([today, message, step]);
        workbook.xlsx
          .writeFile(pathExcel)
          .then(() => {
            resolve("STEP_1");
          })
          .catch((err) => {
            console.log("Error", err);
            reject("error");
          });
      }
    }, 1000);
  });

字符串
但是在那之后的代码,它给了我错误:ERR错误:到达数据结尾(数据长度= 0,请求索引= 4)。拉链坏了?,else,应该在该聊天没有保存excel时执行。我搜索了很多问题和网页,但我没有找到任何解决方案

lg40wkob

lg40wkob1#

我相信你会得到这个错误后,你停止你的执行之间,即当文件得到更新,这将损坏Excel文件。
您可以尝试在if条件中添加一个“try catch”,并在遇到这些特定错误时创建一个新的工作簿副本('End of data reached(data length = 0,asked index = 4).拉链坏了?'或'未找到文件:')

az31mfrm

az31mfrm2#

我在前端遇到过同样的问题,在我的情况下,文件被损坏了。尝试在Excel中打开它。

xdnvmnnf

xdnvmnnf3#

在我例子中,安装jszip

npm i jszip

字符串

相关问题