如何将Google Sheet主表指定行范围数据同步至另一表格指定行范围?
修正Google Apps Script实现Sheet数据一一对应同步
需求说明
从指定Google Sheet主表的O列提取数据,写入到另一Sheet目标表的R列,要求:
- 主表:ID
1EzemDPlSwWo5SJsJkePbPUlrOh-BoCa9svu9i85uZfQ,工作表名CLASS I FORMATIVE(A.N),提取行号为**4、9、14…(从第4行开始每5行)**的O列数据 - 目标表:ID
1hdbT-g2gDdLVng6jMieOULgjWlPlRckl8sUS_UGJroQ,工作表名REPORT CARD FOR ALL CLASS 2023,写入行号为**7、12、17…(从第7行开始每5行)**的R列,需实现源数据与目标行一一对应
原代码问题
原代码使用嵌套循环,外层每获取一个源数据,内层就遍历所有目标行赋值,导致所有目标行最终被最后一个源数据覆盖,无法实现一一对应。原代码如下:
function myFunction() { var An = SpreadsheetApp.openById("1EzemDPlSwWo5SJsJkePbPUlrOh-BoCa9svu9i85uZfQ"); var GetSa1 =An.getSheetByName("CLASS I FORMATIVE(A.N)"); var Fs = SpreadsheetApp.openById("1hdbT-g2gDdLVng6jMieOULgjWlPlRckl8sUS_UGJroQ"); var GetFh1 =Fs.getSheetByName("REPORT CARD FOR ALL CLASS 2023"); var Ps1 =[]; for(var i = 4;i<=44;i=i+5){ Ps1=(GetSa1.getRange("O"+[i]).getValue()); Logger.log( Ps1); for(var j=7;j<=44;j=j+5){ GetFh1.getRange("R"+[j]).setValue(Ps1); } } }
修正后的代码
通过同步递增源行和目标行的方式,确保每一组数据一一对应写入:
function myFunction() { // 打开源表和目标表 var sourceSpreadsheet = SpreadsheetApp.openById("1EzemDPlSwWo5SJsJkePbPUlrOh-BoCa9svu9i85uZfQ"); var sourceSheet = sourceSpreadsheet.getSheetByName("CLASS I FORMATIVE(A.N)"); var targetSpreadsheet = SpreadsheetApp.openById("1hdbT-g2gDdLVng6jMieOULgjWlPlRckl8sUS_UGJroQ"); var targetSheet = targetSpreadsheet.getSheetByName("REPORT CARD FOR ALL CLASS 2023"); // 初始化起始行号 let sourceRow = 4; let targetRow = 7; // 循环处理对应行,直到任一表的行号超过44 while (sourceRow <= 44 && targetRow <= 44) { // 获取源表O列数据 const cellValue = sourceSheet.getRange(`O${sourceRow}`).getValue(); // 写入目标表R列对应行 targetSheet.getRange(`R${targetRow}`).setValue(cellValue); // 行号同步递增5,处理下一组对应行 sourceRow += 5; targetRow += 5; } }
关键改动说明
- 移除嵌套循环,改用同步递增行号的方式,保证每一个源数据仅写入对应的目标行
- 变量名重命名为更具语义的名称,提升代码可读性
- 增加边界判断,避免行号超出指定范围(≤44)
内容的提问来源于stack exchange,提问作者ARAN
相关产品推荐
相关产品推荐

