我有一个脚本(粗略,我知道)可写入电子表格。它根据来自另一张纸的输入数据动态地添加和删除行。我喜欢这样做,因为用户必须将格式化后的结果数据复制并粘贴到表格中,然后粘贴到电子邮件中(现在,我们跳过直接从此脚本直接创建电子邮件的步骤,这是第二部分)。
我认为让脚本知道粘贴新数据的最简单方法是始终在电子表格的最后一行之前插入一行,然后粘贴所述数据。
我一直在使用getMaxRows(),getLastRow()和insertRowBefore(),但是这些函数的所有组合都返回“这些行超出范围”错误! 我真的不明白发生了什么。我使用日志,并在将模板表复制到工作表后“插入”行后,看到变量getLastRow()和getMaxRows都得到更新。由于某些原因,即使在重新调用getMaxRows()和getLastRow()函数之后,它们也无法识别新行。该脚本仍可以操纵这些新行。
这使我相信getMaxRows()和getLastRow()仅在首次运行脚本时或仅在首次激活工作表时才能获取有关工作表中行数的信息?有人遇到过这个问题吗?有人知道这两个功能的工作原理吗? GAS“工作表”课程页面无济于事。
spread = SpreadsheetApp.getActiveSpreadsheet();
emailsSheet = spread.getSheetByName("emails");
emailsMaxRows = emailsSheet.getMaxRows(); //# of rows regardless of content.
emailsSheet.deleteRows(2,emailsMaxRows-1); //I want to start from scratch each time I run the script, having just 1 row from which I append 'template' boxes where I can put data for the user to copy and paste into emails.
emailsMaxRows = emailsSheet.getMaxRows(); //now that I've deleted, Logger.log() shows that getMaxRows() correctly updates with just 1 row.
emailsSheet.insertRowsBefore(emailsMaxRows, 2);//insert two more, so there are 3 rows in the sheet.
emailsMaxRows = emailsSheet.getMaxRows(); //logger correctly shows 3
templateEmail = spread.getRangeByName("templateEmail"); //email template, A1:E5
templateEmail.copyTo(emailsSheet.getRange(emailsMaxRows,1)); //paste a table of 5 rows to row 3, so there are 7 total.
emailsMaxRows = emailsSheet.getMaxRows(); //should be 7, no?
//NO. Logger shows MaxRow is still 3, how come????? I can visibly see in the sheet there are 7 rows, with formatting and text. I simply don't understand how getMaxRows() doesn't update to return 7.
每次删除或插入行时,我都需要getMaxRows()或getLastRow()来正确更新,为什么他们不能为我这样做?
答案 0 :(得分:1)
SpreadsheetApp.flush()解决了该问题。