You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 11:15:06