Ste*_*ler 6 javascript google-sheets google-apps-script importrange
当您在电子表格中手动输入importrange函数时,您会收到一个弹出窗口,并且必须“允许访问”。
但是,我试图找到一种通过脚本执行此操作的方法,因为我正在创建许多电子表格,每个电子表格都带有query-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.
...
Run Code Online (Sandbox Code Playgroud)
kis*_*kin 16
@Franzi 建议使用未记录的方法,该方法有效且不需要公开捐赠者/源电子表格。以下是您可以通过 Google App 脚本执行此操作的方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
通常不需要,但在极少数情况下,您可能需要在appscript.json清单中添加所需的 oauthScopes:
...,
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/script.external_request"
],
...
Run Code Online (Sandbox Code Playgroud)
Fra*_*nzi 10
我通过调用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}
)
Run Code Online (Sandbox Code Playgroud)
我知道这不是通过应用程序脚本,但它可以为您提供一些有关如何在那里执行此操作的提示。
注意:我没有找到任何关于此的文档,所以我认为这可以帮助任何尝试在任何平台(应用程序脚本、Python 等)中执行相同操作的人。
小智 6
我遇到了与此类似的问题,发现答案是更改您要从中导入数据(示例中的“ filekey””的spreadhseet文件的权限)。
这是使我无法使用“允许访问”的Google应用程序脚本:
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)
Run Code Online (Sandbox Code Playgroud)