JavaScript中如何循环给Excel同列不同单元格重复赋值
批量给Excel指定列赋值实现方法
你当前逐单元格硬编码的写法可复用性差,通过循环批量赋值可以参考以下两种方案:
方案1:固定行范围赋值
适合提前知道需要赋值的行区间的场景:
// 读取Excel文件 const workbook = XLSX.readFile("test.xlsx"); const targetSheet = workbook.Sheets.Sheet1; // 自定义配置项 const targetColumn = "B"; // 目标列 const startRow = 2; // 起始行 const endRow = 4; // 结束行 const assignValues = [2000, 3000, 4000]; // 对应单元格要赋的值 // 循环批量赋值 for (let i = 0; i < assignValues.length; i++) { const cellPosition = `${targetColumn}${startRow + i}`; // 兼容单元格不存在的场景,提前初始化 if (!targetSheet[cellPosition]) targetSheet[cellPosition] = { t: "n" }; targetSheet[cellPosition].v = assignValues[i]; } // 保存修改后的文件 XLSX.writeFile(workbook, "test_output.xlsx");
方案2:动态范围赋值
如果需要给目标列所有有效行批量赋值,可先获取工作表的有效数据范围再循环:
const workbook = XLSX.readFile("test.xlsx"); const targetSheet = workbook.Sheets.Sheet1; // 解析工作表有效数据范围 const sheetRange = XLSX.utils.decode_range(targetSheet["!ref"]); const targetColumn = "B"; // 列名转列索引 const colIndex = XLSX.utils.decode_col(targetColumn); // 从第二行(表头行是第一行)开始遍历所有有效行 for (let rowIndex = 1; rowIndex <= sheetRange.e.r; rowIndex++) { // 行列索引转单元格地址 const cellPosition = XLSX.utils.encode_cell({ r: rowIndex, c: colIndex }); if (!targetSheet[cellPosition]) targetSheet[cellPosition] = { t: "n" }; // 示例赋值规则:值为(行号)*1000,可按需修改 targetSheet[cellPosition].v = (rowIndex + 1) * 1000; } XLSX.writeFile(workbook, "test_output.xlsx");
注意:如果要赋值的是字符串类型的值,需要把初始化单元格时的
t: "n"改为t: "s",避免导出格式异常。
内容的提问来源于stack exchange,提问作者한명훈
相关产品推荐
相关产品推荐

