簡體   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