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
相关产品推荐
相关产品推荐

