google-apps-script - 触发函数和 IMPORTRANGE

标签 google-apps-script google-sheets triggers importrange

我有一个 Google Apps 脚本,可以将在 Google 表单中提交的信息与使用 IMPORTRANGE 函数带入 Google 电子表格的信息进行比较。如果我手动运行该脚本,它可以完美运行,但如果它从表单提交触发器运行,它会报告它没有从使用 IMPORTRANGE 的单元格获取正确的信息。

有没有办法解决这个问题,比如有没有我可以添加的强制导入范围更新的快速功能?

我已经尝试添加最多 10 分钟的等待时间,但结果没有改变。

最佳答案

问题在于 importRange 之类的函数是如何工作的。实际上,它们需要与使用它们登录的用户帐户相同的访问/权限,以避免安全漏洞(想象一下您拥有的电子表格编辑器访问您尚未与他们共享的其他电子表格)。

正因为如此(好吧,至少我是这么认为的),只有在打开电子表格时才会评估这些公式。当您关闭它并让脚本在触发器上运行时,它不会在预期的单元格上找到任何结果。

一个简单的解决方法是使用脚本本身获取数据并使用 importRange 退出。这很容易做到,例如

var values = SpreadsheetApp.openById('external-spreadsheet-key').
  getSheetByName('Sheet1').getRange('A1:D100').getValues();
SpreadsheetApp.getActive().getSheetByName('DestSheet').
  getRange(1,1,values.length,values[0].length).setValues(values);

显然,电子表格键、工作表的名称和范围只是这里的一个例子。

关于google-apps-script - 触发函数和 IMPORTRANGE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11855960/

相关文章:

mysql - 触发器采用 current_timestamp,如果早于 15 分钟,则插入到其他表中

javascript - 谷歌脚本超时

javascript - Google Apps 脚本 - 使用 for 循环根据条件从范围中提取数据

c# - 中继器内的多个更新面板触发器

sql - 插入分区表返回违反检查约束但不应该

google-apps-script - 使用 MailApp.sendEmail 谷歌表格防止文本换行?谷歌脚本

google-apps-script - 在 doPost() 中访问请求 header

javascript - 使用 Google Apps 脚本从 Google Drive 中的多个上传元素上传本地文件

google-apps-script - LockService - 单元格仍在被覆盖

javascript - 使用从 HTML 到电子表格的相关值时出现问题?