我正在制作一个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时执行。我搜索了很多问题和网页,但我没有找到任何解决方案
3条答案
按热度按时间lg40wkob1#
我相信你会得到这个错误后,你停止你的执行之间,即当文件得到更新,这将损坏Excel文件。
您可以尝试在if条件中添加一个“try catch”,并在遇到这些特定错误时创建一个新的工作簿副本('End of data reached(data length = 0,asked index = 4).拉链坏了?'或'未找到文件:')
az31mfrm2#
我在前端遇到过同样的问题,在我的情况下,文件被损坏了。尝试在Excel中打开它。
xdnvmnnf3#
在我例子中,安装jszip
字符串