Node.js循环创建XLSX多工作表失败及名称过长问题求助
问题解决指南
1. 工作表名称过长报错处理
Excel强制要求工作表名称不能超过31个字符,你的product_list里存在名称超标的元素,直接触发了Sheet names cannot exceed 31 chars错误。
修复代码:
添加一个处理函数,把过长的名称截断到合法长度:
// 生成合法的工作表名称(最长31字符) const getValidSheetName = (name) => { return name.length > 31 ? `${name.slice(0, 28)}...` : name; };
2. 循环逻辑错误导致工作表内容重复
你当前的循环里,每次都把整个product数组写入每个工作表,所以所有工作表内容完全一致,根本没实现“每个产品对应一个工作表”的需求。
修正步骤:
首先得把product数据按产品分组(前提是你的product元素里包含对应产品的名称字段,比如爬取时补充ProductName):
// 按产品名称分组数据 const groupedProducts = product.reduce((group, item) => { const key = item.ProductName; // 替换成你实际的产品名称字段 group[key] = group[key] || []; group[key].push(item); return group; }, {});
然后修改生成Excel的函数:
const convertJsonToExcel = () => { const workBook = xlsx.utils.book_new(); product_list.forEach(productName => { // 获取当前产品对应的所有数据 const targetData = groupedProducts[productName] || []; // 生成对应工作表 const workSheet = xlsx.utils.json_to_sheet(targetData); // 用处理后的合法名称添加工作表 xlsx.utils.book_append_sheet(workBook, workSheet, getValidSheetName(productName)); }); xlsx.writeFile(workBook, 'ProductList.xlsx'); };
3. 注意:数据填充的索引风险
你填充product数组时,ProductPrice用了product_price[i+1],如果product_price的长度和product_seller等数组不一致,会导致数据错位或者数组越界,务必检查所有数据源数组的长度是否匹配。
内容的提问来源于stack exchange,提问作者Hannes Z
相关产品推荐
相关产品推荐

