Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Google Apps脚本从外部电子表格访问数据_Javascript_Google Apps Script_Google Apps - Fatal编程技术网

Javascript 如何使用Google Apps脚本从外部电子表格访问数据

Javascript 如何使用Google Apps脚本从外部电子表格访问数据,javascript,google-apps-script,google-apps,Javascript,Google Apps Script,Google Apps,我有一个电子表格和一些数据表,我想在其他电子表格脚本中使用。我如何通过ID调用此电子表格并访问数据\ 从中,我知道自定义函数不允许访问其他电子表格,解决方案是将此函数放在菜单中并运行它,因为它需要用户的授权。但这不是一个选项,因为我使用的是内置方法onEdit()的数据\ 此外,我还尝试通过onOpen()访问电子表格,因为它不是自定义函数,但仍然没有成功。还有其他解决办法吗 我的代码: 函数onOpen(){ ss=电子表格应用程序。getActiveSpreadsheet(); src=Sp

我有一个电子表格和一些数据表,我想在其他电子表格脚本中使用。我如何通过ID调用此电子表格并访问数据\

从中,我知道自定义函数不允许访问其他电子表格,解决方案是将此函数放在菜单中并运行它,因为它需要用户的授权。但这不是一个选项,因为我使用的是内置方法
onEdit()
的数据\

此外,我还尝试通过
onOpen()
访问电子表格,因为它不是自定义函数,但仍然没有成功。还有其他解决办法吗

我的代码:

函数onOpen(){ ss=电子表格应用程序。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

{
“时区”:“欧洲/巴黎”,
“依赖项”:{
},
“例外记录”:“STACKDRIVER”,
“runtimeVersion”:“V8”,
“oauthScopes”:[
"https://www.googleapis.com/auth/spreadsheets"
]
}
最后,我还尝试使用以下代码创建一个:

函数createSpreadsheetOpenTrigger(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('myFunction')
.前页(ss)
.onOpen()
.create();
}

但是,在打开工作表时似乎不会调用触发器。

首先,在src=SpreadsheetApp.openById行(“spreadsheetID”);您是否用实际的电子表格id替换了该id? 这是url末尾的数字。我假设您这样做了,但在您的示例中没有显示您这样做

第二,为了进行测试,尝试在常规函数(而不是触发器)中执行此操作以使事情正常运行。您完成了吗?然后您可以专注于电子表格访问,而不必担心触发器是否会导致问题。

正如您已经意识到的,自定义函数和简单触发器无法执行需要授权的请求
  • SpreadsheetApp.openById(“spreadsheetID”);
    就是这些请求之一

  • 您使用可安装触发器的方法是正确的-它们可以触发需要授权的请求的执行

  • 我认为您的问题在于可安装触发器的正确实现

  • function createSpreadsheetOpenTrigger
    创建一个可安装的
    onOpen
    触发器,在工作表打开时调用函数
    myFunction

  • 这意味着您需要首先创建函数
    myFunction
  • 此外,您还需要手动运行一次
    函数createSpreadsheetOpenTrigger()
    ,以安装触发器
完整代码示例:

函数createSpreadsheetOpenTrigger(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('myFunction')
.前页(ss)
.onOpen()
.create();
}
函数myFunction(){
ss=电子表格应用程序。getActiveSpreadsheet();
src=SpreadsheetApp.openById(“spreadsheetID”);
Logger.log(src.getActiveSheet().getName());
}
注意:


与实现函数
createSpreadsheetOpenTrigger()
不同,您可以通过执行
Edit->My project's triggers
手动安装触发器,并将所需类型的触发器绑定到所需函数,另请参见是否可以将问题限制为1个问题:最好仅从“最后,我还试着。。。".你怎么会认为触发器不起作用?@TheMaster这毕竟是一个问题。我只是介绍了我的尝试。我不知道为什么它不起作用。我试图使用
myFunction
从仪表板的触发器页面手动创建触发器,但似乎问题已经解决了?是的,我确实替换了ID,只是在我试过一个没有触发器的函数,但是自定义函数不能访问openByIdmethod当它们说“自定义函数”时,我想它们是指在工作表单元格中的公式中调用的东西,而不是触发器或你自己编写的东西。我不认为我所说的“自定义函数”是指这就是你的意思。我一直使用触发器打开/引用其他电子表格。你希望电子表格实际打开吗?如果是,那就不同了。要做到这一点,你需要打开一个浏览器窗口。这是javascript和html来创建弹出窗口。“openbyid”允许你访问电子表格,但它不会用它打开一个新的浏览器窗口工作表。不,我知道它不会用UI打开电子表格。我只需要读取它并获取数据,以便在运行脚本的当前电子表格中使用。但是自定义函数无法访问
openbyId
。请参阅我链接的参考。为什么不将其导入到隐藏的工作表中?您知道如何做吗?最后一点是什么我错过了。我没有意识到我一开始必须手动运行函数才能真正实现触发器。另外,建议直接在项目的触发器中实现它,这样我就不必手动运行函数了!谢谢你的回答!