Google Apps Script:如何合并追加行和自动补全新行信息的两个脚本
解决方案
提供两种可直接落地的实现方式,优先推荐合并脚本的方案:
方案1:合并为单个脚本(推荐)
该方案无需遍历全表,仅针对刚新增的行做补充处理,执行效率更高,也不会误修改历史数据,合并后代码如下:
function AddRecord(company, salutation, name, phone, email, appointment, room) { const url = 'SHEET_URL'; const ss = SpreadsheetApp.openByUrl(url); const webAppSheet = ss.getSheetByName("SHEET_NAME"); // 注意此处入参是工作表名称不是ID // 追加新行 webAppSheet.appendRow([company, salutation, name, phone, email, appointment, room]); // 获取刚新增的行号 const lastRow = webAppSheet.getLastRow(); // 原规则补充信息,可直接用传入的appointment参数判断,无需二次读表 let roomVal, organizerVal; if (appointment == "8:00 AM") { roomVal = "ROOM NUMBER ONE"; } else if (appointment == "10.00AM") { roomVal = "ROOM NUMBER TWO"; } // 如果符合上述时间条件则赋值 if (roomVal) { webAppSheet.getRange(lastRow, 9).setValue("NEW APPOINTMENT"); webAppSheet.getRange(lastRow, 10).setValue(roomVal); webAppSheet.getRange(lastRow, 11).setValue("NAME OF ORGANIZER"); } // 如果你第8列(索引7)的取值不是传入的appointment,可替换为以下逻辑读取单元格值判断: // const appointmentVal = webAppSheet.getRange(lastRow, 8).getValue(); // 再用appointmentVal做上述规则判断即可 }
方案2:保持两个脚本独立,自动按顺序调用
如果不需要调整原有两个函数的逻辑,只需要在AddRecord函数的末尾添加调用addMoreDetailsToRecord的代码即可,每次新增行后自动触发补充信息的逻辑,无需额外设置时间触发器,修改后的AddRecord代码如下:
function AddRecord(comapny, salutation, name, phone, email, appointment, room) { var url = 'SHEET_URL'; var ss = SpreadsheetApp.openByUrl(url); var webAppSheet = ss.getSheetByName("SHEE_ID"); webAppSheet.appendRow([comapny, salutation, name, phone, email, appointment, room]); // 新增调用语句,追加完成后自动执行补充信息逻辑 addMoreDetailsToRecord(); }
注意事项
- 原代码中参数
comapny为拼写错误,建议修正为company避免后续传参出错 getSheetByName方法的入参是工作表名称,不是工作表ID,注意不要填错参数- 方案2每次执行都会遍历全表数据,如果表内数据量较大,执行效率会低于方案1
内容的提问来源于stack exchange,提问作者Bob Hardball
相关产品推荐
相关产品推荐

