如何将仅处理单行的Google Apps Script适配为处理工作表所有行?
修改Google Apps Script以处理所有行数据
修改思路
- 获取"0_Test-LISTE PROJETS"工作表中从第4行开始的所有有效数据行
- 遍历每一行原始数据,为每行生成对应的5条项目阶段明细记录
- 将所有生成的记录汇总后一次性写入"GO"工作表,减少API调用次数提升效率
修改后的代码
function GENERAL() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var Cop = ss.getSheetByName("GO"); var LP = ss.getSheetByName("0_Test-LISTE PROJETS"); // 获取从第4行开始到最后一行的所有数据(A列到V列) var lastRow = LP.getLastRow(); if (lastRow < 4) return; // 无数据行时直接退出 var valueRange = LP.getRange(4, 1, lastRow - 3, 22).getValues(); // 存储所有要写入的输出数据 var outputData = []; // 遍历每一行原始数据生成阶段记录 valueRange.forEach(function(row) { outputData.push( [row[5], row[7], row[9], row[16], row[20], 'duréé projet' /**color red*/],//项目总时长 [row[5], row[7], row[9], row[16], row[17], 'phase de conception'/**color BLUE*/],//设计阶段 [row[5], row[7], row[9], row[17], row[17] + ' 7days', 'attente retour BAT'/**color white*/],//等待客户反馈 [row[5], row[7], row[9], row[17] + ' 7days', row[19], 'phase de fabrication'/**color green*/],//生产阶段 [row[5], row[7], row[9], row[19], row[20], 'phase installation'/**color purple*/]//现场安装阶段 ); }); // 清空目标表原有数据(可根据需求选择保留或移除) Cop.clearContents(); // 批量写入所有数据到目标表 if (outputData.length > 0) { Cop.getRange(1, 1, outputData.length, 6).setValues(outputData); } }
关键修改说明
- 动态数据范围:用
getRange(4, 1, lastRow - 3, 22)替代固定行范围,自动适配所有有数据的行 - 循环遍历处理:通过
forEach遍历每一行原始数据,为每行生成对应阶段记录 - 批量写入优化:将所有记录收集到数组后一次性调用
setValues,相比逐行写入大幅提升执行效率 - 边界防护:增加
if (lastRow < 4) return避免无数据时触发错误
内容的提问来源于stack exchange,提问作者antho2B
相关产品推荐
相关产品推荐

