Exceljs不存在目标Excel文件时创建触发ENOENT错误问题咨询
问题根本原因
你的报错核心是异步操作时序错误:createWorkBook 中调用的 workbook.xlsx.writeFile 是异步方法,执行后不会等待文件写入完成就直接返回,你紧接着调用 runTests 时,Excel文件还没被创建完成,appendToExcel 中执行 XLSX.readFile 自然会抛出找不到文件的 ENOENT 错误。
另外你代码中还有一个隐藏逻辑错误:判断工作表是否存在的逻辑写错,永远会判定为工作表不存在。
修复步骤
1. 改造createWorkBook返回Promise,让上层可以等待写入完成
同时修复工作表存在性判断的错误:
function createWorkBook(){ const workbook = new Excel.Workbook(); for (const sheet of bookAppSheets) { // 修复判断逻辑:worksheets是工作表对象数组,要匹配name属性判断是否存在同名工作表 const sheetExists = workbook.worksheets.some(ws => ws.name === sheet); if (!sheetExists) { console.log("Created sheet: "+sheet); workbook.addWorksheet(sheet); } } // 直接返回写入操作的Promise,方便上层等待执行完成 return workbook.xlsx.writeFile(filename) .then(() => { console.log("Excel文件创建完成"); }) .catch((err) => { console.log("创建Excel文件出错:", err); throw err; // 抛出错误给上层处理 }); }
2. 修改main函数逻辑,等待文件创建完成后再执行测试
给fs.access的回调加上async标识,用await等待createWorkBook执行完成:
function main(){ if(driver==null) { setUp(); } console.log(filename); fs.access(filename, async (err)=> { if (err) { try { // 等待文件创建写入完成后,再执行测试逻辑 await createWorkBook(); runTests(); } catch (e) { console.error("初始化Excel文件失败,程序终止:", e); } } else { console.log("文件已存在"); runTests(); } }); }
3. (可选优化)跨平台路径兼容
不要硬编码Windows路径分隔符\\,用Node.js内置的path模块拼接路径,适配所有操作系统:
首先在代码顶部导入path模块:
const path = require('path');
修改filename的定义:
const filename = path.join(process.cwd(), "portonBookAppTests.xlsx");
内容的提问来源于stack exchange,提问作者Arundeep Chohan
相关产品推荐
相关产品推荐

