如何通过Google Apps Script满足条件时复制单元格值到同行指定列
实现思路
- 优先在内存中操作读取到的表格二维数组,避免逐行调用工作表接口,大幅提升执行效率。
getValues()返回的二维数组和工作表区域一一对应,直接修改数组指定位置的值即可。 - 匹配到符合条件的行时,直接修改当前行索引为11的单元格值(即你代码中
verifier对应的列)为patNumb。 - 所有行遍历完成后,调用
setValues()方法将修改后的整表数组批量写回源工作表,一次请求完成所有更新。 - 如果需要保留原有追加行+删除原行的逻辑,注意要将正序遍历改为倒序遍历,避免删除行后后续行索引偏移导致的匹配错误。
可用代码示例
let spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 注意确保delta变量已提前定义,为对应源工作表的名称 let sourceSheet = spreadSheet.getSheetByName(delta); let sourceRange = sourceSheet.getDataRange(); let sourceValues = sourceRange.getValues(); // 如果需要保留删除行逻辑,改用倒序for循环 for (let index = sourceValues.length - 1; index >= 0; index--) { let row = sourceValues[index]; let aptNumber = row[10]; let verifier = row[11]; let status = row[12]; let patNumb = row[4]; // 如果有表头,可加判断跳过第一行:if(index === 0) continue; if (verifier !== '' && status === '' && aptNumber === '') { // 将patNumb写入当前行的verifier列 row[11] = patNumb; console.log(`已修改第${index+1}行的verifier值为${patNumb}`); // 原有逻辑可按需保留,倒序遍历不会出现索引错乱 // pendingTarget.appendRow(row) // removeDeltaPendingDuplicates() // 注意工作表行号=数组索引+1 // sourceSheet.deleteRow(index + 1) } } // 批量将修改后的数据写回源表 sourceRange.setValues(sourceValues);
内容的提问来源于stack exchange,提问作者chewie
相关产品推荐
相关产品推荐

