Office Script遍历司机数组复制Excel行时重复复制问题
解决Office Script中司机数据重复复制的问题
问题原因
- 循环逻辑错误:原代码外层遍历16个司机,内层遍历所有行,每一行会被每个司机循环检查,只要匹配就复制一次,导致符合条件的行被复制16次(对应数组元素数量)。
- 条件判断错误:
if (value = ...)使用了赋值运算符=而非比较运算符==,这会将当前行的司机名赋值给value,导致条件始终为真,进一步加剧重复复制的问题。
修正后的代码
// 遍历数据工作表的每一行(假设第0行是表头,从第1行开始处理数据) for (let i = 1; i <= lastrow; i++) { // 获取当前行的司机全名,提取名字部分 const fullName = wsALL.getRangeByIndexes(i, 0, 1, 1).getValue().toString(); const driverName = fullName.substring(0, fullName.indexOf(" ")); // 检查目标工作表是否存在,避免因表不存在报错 const targetSheet = workbook.getWorksheet(driverName); if (targetSheet) { // 获取目标表已使用区域的最后一行行号 const lastTargetRow = targetSheet.getRange("A:K").getUsedRange(true).getLastRow().getRowIndex(); // 复制当前行的A-K列到目标表的下一行 targetSheet.getRangeByIndexes(lastTargetRow + 1, 0, 1, 11).copyFrom(wsALL.getRangeByIndexes(i, 0, 1, 11)); } }
修正说明
- 反转循环逻辑:改为遍历每一行数据,每一行仅处理一次,从根源避免重复复制。
- 修复条件判断:直接提取当前行的司机名,跳过错误的赋值操作,逻辑更清晰。
- 优化复制范围:仅复制A-K列(业务需要的列),避免复制整行带来的冗余数据。
- 增加容错检查:判断目标工作表是否存在,防止因司机名对应表缺失导致脚本报错。
内容的提问来源于stack exchange,提问作者Taylor
相关产品推荐
相关产品推荐

