Node.js读取Excel数据触发TypeError,请求技术解决方案
问题:使用xlsx库读取Excel数据时触发TypeError错误
我在Visual Studio中尝试处理Excel文件,使用xlsx库读取数据时遇到问题。我的代码如下:
const urlStatusCode = require("url-status-code"); const xls = require("xlsx"); const url = 'https://www.cricinfo.com' let workbook = xls.readFile("sitemap.xlsx"); let worksheet = workbook.Sheets[workbook.SheetNames[0]]; for(let ind = 0; ind < 390000; ind++){ let urll = worksheet[`A${ind}`].v; console.log(urll); }
运行后出现如下错误:
let urll = worksheet[`A${ind}`].v; ^ TypeError: Cannot read properties of undefined (reading 'v')
移除代码中的.v后,能得到包含t、h、v等字段的结果,但我需要获取v字段对应的值,恳请指导解决方法。
解决方法
错误原因
- Excel的单元格索引从1开始,你的循环从
0启动,A0是不存在的单元格,导致worksheet[A0]为undefined,直接访问.v就会触发TypeError。 - 即使从1开始循环,当
ind超过表格实际行数时,worksheet[A${ind}]同样会是undefined,也会报错。
方案一:检查单元格存在性后访问.v
修改循环起始值,并增加单元格存在性判断,避免访问undefined的属性:
const urlStatusCode = require("url-status-code"); const xls = require("xlsx"); const url = 'https://www.cricinfo.com' let workbook = xls.readFile("sitemap.xlsx"); let worksheet = workbook.Sheets[workbook.SheetNames[0]]; // 从1开始遍历(Excel单元格索引起始值) for(let ind = 1; ind < 390000; ind++){ const cell = worksheet[`A${ind}`]; // 先判断单元格是否存在 if(cell){ let urll = cell.v; console.log(urll); } else { // 单元格不存在时跳出循环,避免无效遍历 break; } }
方案二:使用xlsx工具函数转换为结构化数据(推荐)
利用xlsx内置的utils.sheet_to_json方法直接将工作表转换为数组,自动处理表格范围,无需手动指定循环上限:
const urlStatusCode = require("url-status-code"); const xls = require("xlsx"); const url = 'https://www.cricinfo.com' let workbook = xls.readFile("sitemap.xlsx"); let worksheet = workbook.Sheets[workbook.SheetNames[0]]; // 将工作表转换为二维数组(header: 1表示忽略表头,直接返回行数据) const data = xls.utils.sheet_to_json(worksheet, { header: 1 }); // 遍历A列数据(数组第一个元素对应每行的A列值) for(const row of data){ if(row[0]){ console.log(row[0]); } }
这个方案更可靠,因为它会自动识别表格的实际有效行数,避免不必要的循环和错误。
内容的提问来源于stack exchange,提问作者Wajih Haider
相关产品推荐
相关产品推荐

