![](/img/trans.png)
[英]Google Apps Script: how to use data in a spreadsheet to query a external database?
[英]How to access data from an external spreadsheet with Google Apps Script
我有一个电子表格,其中包含一些我想在其他电子表格脚本中使用的数据表。 如何通过 ID 调用此电子表格并访问数据?\
从文档中,我知道不允许自定义函数访问其他电子表格,解决方案是将这个 function 放在菜单中并运行它,因为它会要求用户授权。 但这不是一个选项,因为我正在使用带有内置方法onEdit()
的数据。\
此外,我尝试通过onOpen()
访问电子表格,因为它不是自定义 function 但仍然没有成功。 还有其他解决方案吗?
我的代码:
function onOpen(){
ss = SpreadsheetApp.getActiveSpreadsheet();
src = SpreadsheetApp.openById("spreadsheetID");
错误信息:
Exception: You do not have permission to call SpreadsheetApp.openById. Required permissions: https://www.googleapis.com/auth/spreadsheets
和appscript.json
{
"timeZone": "Europe/Paris",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets"
]
}
最后,我还尝试使用以下代码创建可安装触发器:
function createSpreadsheetOpenTrigger() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(ss)
.onOpen()
.create();
}
但是在打开工作表时似乎没有调用触发器。
SpreadsheetApp.openById("spreadsheetID");
是这些请求之一
您使用可安装的触发器走在正确的轨道上 - 它们可以触发需要授权的请求的执行
我认为您的问题是可安装触发器的正确实现
function createSpreadsheetOpenTrigger
创建一个可安装的onOpen
触发器,在工作表打开时调用 function myFunction
myFunction
function createSpreadsheetOpenTrigger()
- 安装触发器示例完整代码:
function createSpreadsheetOpenTrigger() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(ss)
.onOpen()
.create();
}
function myFunction(){
ss = SpreadsheetApp.getActiveSpreadsheet();
src = SpreadsheetApp.openById("spreadsheetID");
Logger.log(src.getActiveSheet().getName());
}
笔记:
而不是实现 function createSpreadsheetOpenTrigger()
,您可以通过继续Edit->My project's triggers
手动安装触发器并将所需类型的触发器绑定到所需的 function,另请参阅手动管理触发器
首先,在 src = SpreadsheetApp.openById("spreadsheetID"); 您是否将 id 替换为实际的电子表格 ID? 那是 url 末尾的数字。 我假设你做到了,但它并没有表明你在你的例子中做到了。
其次,只是为了测试,尝试在常规 function(不是触发器)中执行此操作以使事情正常工作。 你这样做了吗? 然后,您可以专注于电子表格访问,而不必担心触发器是否会导致问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.