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

Playwright+ExcelJS报错ReferenceError: worksheet未定义,求解决方案

问题解决:ReferenceError: worksheet未定义

问题根源

你在.then()的回调函数内部声明了const worksheet,这个变量的作用域仅限于该回调函数内部。回调外面的代码(比如你尝试获取单元格的那一行)根本访问不到它,所以抛出了未定义错误。而且你已经用了async/await,没必要再混用.then(),这只会让代码结构混乱,放大作用域问题。

修正后的代码

const ExcelJS = require('exceljs'); 

async function excelTest() {
    const workbook = new ExcelJS.Workbook();
    
    // 用await替代.then(),直接读取文件
    await workbook.xlsx.readFile("/Users/me/desktop/excelDownloadTest.xlsx");
    
    // 将worksheet声明在函数作用域内,后面的代码都能访问到
    const worksheet = workbook.getWorksheet('Sheet1');
    
    // 遍历所有行和单元格,自动替换所有"Apple"为"Iphone"
    worksheet.eachRow((row, rowNumber) => {
        row.eachCell((cell, colNumber) => {
            if (cell.value === "Apple") {
                console.log(`找到Apple在第${rowNumber}行,第${colNumber}列`);
                cell.value = "Iphone"; // 直接替换
            }
        });
    });
    
    // 保存修改后的文件
    await workbook.xlsx.writeFile("/Users/me/desktop/excelDownloadTest.xlsx");
    console.log("文件修改完成");
}

excelTest();

关键修改点

  • 移除了.then()回调,用await直接处理文件读取,让代码逻辑更线性,避免回调嵌套导致的作用域隔离。
  • 将worksheet变量提升到函数的顶层作用域(读取文件后直接声明),确保后面的代码能正常访问它。
  • 新增了自动替换逻辑,不需要手动指定行列,找到所有值为"Apple"的单元格直接替换成"Iphone",更贴合你的需求。

内容的提问来源于stack exchange,提问作者fypnlp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:19:54