Google Apps Script实现W列含数值时跨表格追加指定列数据
代码调整方案
以下是修正后可实现需求的完整代码:
var sSheet = SpreadsheetApp.getActiveSpreadsheet(); var srcSheet = sSheet.getSheetByName('109 Directs'); // 目标表链接保留你原有配置即可 var target = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1eKLEK58-2oegSmFsGgvUz6g50HwKqNjwAEsSnxJDdyw/edit#gid=0").getSheetByName("Direct Data"); // 按你源表数据的实际行范围12-46循环 for (var i = 12; i <= 46; i++){ // 读取当前行W列的总工时值 var workHourVal = srcSheet.getRange("W" + i).getValue(); // 仅总工时不为空时执行复制 if (workHourVal !== ""){ // 这里假设源表NAME为A列、POSITION为B列,可根据你实际列号修改 var name = srcSheet.getRange("A" + i).getValue(); var position = srcSheet.getRange("B" + i).getValue(); // 定位到目标表的空白追加行 var targetLastRow = target.getLastRow() + 1; // NAME写入目标表F列,POSITION写入相邻G列 target.getRange("F" + targetLastRow).setValue(name); target.getRange("G" + targetLastRow).setValue(position); } }
如果你需要把姓名和职位合并写入同一F列,可把最后两行赋值逻辑替换为:
target.getRange("F" + targetLastRow).setValue(`${name} | ${position}`);
核心调整点说明
- 修正了循环逻辑:原代码循环起始值设为22完全错误,按你源表数据实际行范围12-46设置了循环区间
- 修正了单元格范围拼接错误:原代码
W12:W46 + i的拼接逻辑不符合语法规则,改为直接取当前行W列的单元格W+i - 去掉了无用的
activate()操作:不需要激活单元格即可读取值,可大幅提升脚本运行效率 - 调整了复制逻辑:不再复制整行内容,仅提取你需要的NAME、POSITION两列数据写入目标表对应位置
- 去掉了不必要的插入行操作:直接写入目标表最后一行的下一行即可,不需要单独调用插入行方法
内容的提问来源于stack exchange,提问作者Junior
相关产品推荐
相关产品推荐

