如何通过apps脚本允许访问importrange函数?

时间:2015-01-20 06:07:20

标签: javascript google-apps-script google-sheets

当您在电子表格中手动输入导入范围功能时,会收到弹出窗口并且必须“允许访问”。Pop up to allow access for importrange

但是,我正在尝试通过脚本找到一种方法,因为我正在创建许多电子表格,每个电子表格都有一个查询 - 导入范围功能(我自己的'电子表格中有要导入的数据)。我通过弹出手动“允许访问”并更新函数以包含查询功能对我来说太多了。

因此,我正在寻找应用程序脚本中的函数调用,它可以执行与弹出窗口相同的操作。下面的代码段示例。

有没有人知道可以“允许访问”的功能? 斯蒂芬

// create new spreadsheet file
...
var ss = createSpreadsheet(fileName);
var spreadsheet = SpreadsheetApp.open(ss);
var sheet = spreadsheet.getSheetByName("Sheet1");

// Add student as Viewer
spreadsheet.addViewer(studentEmail);

// Add ImportRange function 
var sheet = spreadsheet.getSheets()[0];
var cell = sheet.getRange("A1");
var filter = "select * where Col3='" + studentEmail + "'";
var qry = '=QUERY(importRange("' + fileKey + '","14-15S2!A1:AE");"' + filter + '";1)';
cell.setValue(qry);
// I need a function to 'allow access' here, so the function can be allowed access. Otherwise, it throws an error.
...

4 个答案:

答案 0 :(得分:5)

我遇到了与此类似的问题,并且发现答案是更改您要导入数据的spreadhseet文件的权限("文件密钥"在您的示例中#34;)。

这是google应用程序脚本,它允许访问"允许访问"离开我吧:

file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)

答案 1 :(得分:2)

@Franzi 建议使用有效且不需要公开捐赠者/来源电子表格的未记录方法。以下是通过 Google App Script 执行此操作的方法:

function addImportrangePermission() {
  // id of the spreadsheet to add permission to import
  const ssId = SpreadsheetApp.getActiveSpreadsheet().getId();

  // donor or source spreadsheet id, you should get it somewhere
  const donorId = '1GrELZHlEKu_QbBVqv...';

  // adding permission by fetching this url
  const url = `https://docs.google.com/spreadsheets/d/${ssId}/externaldata/addimportrangepermissions?donorDocId=${donorId}`;

  const token = ScriptApp.getOAuthToken();

  const params = {
    method: 'post',
    headers: {
      Authorization: 'Bearer ' + token,
    },
    muteHttpExceptions: true
  };
  
  UrlFetchApp.fetch(url, params);
}

通常不需要,但在极少数情况下,您可能希望在 appscript.json 清单中添加所需的 oauthScope:

  ...,
  "oauthScopes": [
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/script.external_request"
  ],
  ...

答案 2 :(得分:1)

我通过调用 addimportrangepermissions 端点使用 gspread python 库自动执行此操作。

    sheet.client.request(
        'post',
        f'https://docs.google.com/spreadsheets/d/{sheet.spreadsheet.id}/externaldata/addimportrangepermissions',
        params={'donorDocId': external_sheet.spreadsheet.id}
    )

我知道这不是通过应用程序脚本,但它可以为您提供一些有关如何在那里执行的提示。

注意:我没有找到任何关于此的文档,所以我认为这可以帮助任何尝试在任何平台(应用程序脚本、python 等)中执行相同操作的人。

答案 3 :(得分:-1)

我所做的就是与组织中使用gsheet模板的人员共享“源”表-ImportRange从中获取数据的表。我通过单击授权访问按钮编辑模板,此后我一直使用该模板制作所有工作表。

ImportRange函数可以正常工作,而无需重新授权从模板创建的每个新工作表中的访问。我希望它对我组织中的其他人有用。