我有一个谷歌应用程序脚本,用于将使用google表单提交的信息与使用importrange函数带入谷歌电子表格的信息进行比较。如果我手动运行该脚本,但如果它从表单提交触发器运行,它会报告它没有使用importrange从单元格中获取正确的信息。有没有办法绕过这个,就像我可以添加一个快速功能强制导入范围更新?我已经尝试添加最多10分钟的等待时间,但没有改变结果。
由于
答案 0 :(得分:9)
问题在于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);
显然,电子表格密钥,工作表的名称和范围只是一个例子。