繁体   English   中英

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

[英]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

  • 这意味着您需要先创建 function 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM