当您在电子表格中手动输入导入范围功能时,会收到弹出窗口并且必须“允许访问”。
但是,我正在尝试通过脚本找到一种方法,因为我正在创建许多电子表格,每个电子表格都有一个查询 - 导入范围功能(我自己的'电子表格中有要导入的数据)。我通过弹出手动“允许访问”并更新函数以包含查询功能对我来说太多了。
因此,我正在寻找应用程序脚本中的函数调用,它可以执行与弹出窗口相同的操作。下面的代码段示例。
有没有人知道可以“允许访问”的功能? 斯蒂芬
// 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.
...
答案 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
函数可以正常工作,而无需重新授权从模板创建的每个新工作表中的访问。我希望它对我组织中的其他人有用。