无法打开电子表格加载项中的文档。 openByUrl( ) 没有权限
could not open Documents in a Spreadsheet add-on. openByUrl( ) no permission
我有一个电子表格扩展程序,可以保存许多文档元数据。
它使用附加菜单激活合并文件功能,该功能使用DocumentApp.openBy..()
我的问题有点像this。
我修改了清单 (appsscript.json) 以获得以下权限:
- https://www.googleapis.com/auth/documents
- https://www.googleapis.com/auth/drive
- https://www.googleapis.com/auth/spreadsheets
还是不行。
这是我的代码。
makeMerge
由附加菜单按钮触发。
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
ui.createAddonMenu().
addItem("merge", 'uiTrigger').
addToUi();
}
function uiTrigger() {
makeMerge(SpreadsheetApp.getActiveSheet(), DriveApp.getRootFolder());
}
function makeMerge(sheet, folder) {
if (folder === null || folder === undefined) {
folder = DriveApp.getRootFolder();
}
var dataRows = sheet.getDataRange().getValues().length - 1;
var names = sheet.getRange(2, 1, dataRows, 1).getValues();
var docsRef = sheet.getRange(2, 8, dataRows, 1).getValues();
var toDownload = sheet.getRange(2, 11, dataRows, 1).getValues();
for (var i in toDownload) {
var name = names[i][0];
var docRef = docsRef[i][0];
Logger.log(docRef);
try {
var doc = DocumentApp.openByUrl(docRef);
} catch(error) {
Logger.log(error);
}
}
}
我不知道(我不使用电子表格自定义函数)为什么我会遇到同样的问题?
如何授予我的脚本打开文档的权限?
DocumentApp.openByUrl()
没有从 doc.getUrl()
中获取 link
它似乎没有记录在官方网站上。这是一个例子。
// with a container-bound script, in this example
function notWork() {
var doc = DocumentApp.getActiveDocument();
var docUrl = doc.getUrl();
Logger.log(docUrl);
var newDoc = DocumentApp.openByUrl(docUrl);
}
因此,DocumentApp.openById()
仍然有效。
function Worked() {
var doc = DocumentApp.getActiveDocument();
var docId = doc.getId();
Logger.log(docId);
var newDoc = DocumentApp.openById(docId);
}
所以,我们可以从doc.getUrl()
中提取id,形式为
https://docs.google.com/open?id=YOUR_DOCUMENT_ID 或
https://docs.google.com/a/YOUR_DOMAIN/open?id=YOUR_DOCUMENT_ID
function modifyFromNotwork(){
var doc = DocumentApp.getActiveDocument();
var docUrl = doc.getUrl();
var docId = docUrl.slice(docUrl.indexOf("=")+1);
Logger.log(docId);
var newDoc = DocumentApp.openById(docId);
}
我有一个电子表格扩展程序,可以保存许多文档元数据。
它使用附加菜单激活合并文件功能,该功能使用DocumentApp.openBy..()
我的问题有点像this。
我修改了清单 (appsscript.json) 以获得以下权限:
- https://www.googleapis.com/auth/documents
- https://www.googleapis.com/auth/drive
- https://www.googleapis.com/auth/spreadsheets
还是不行。
这是我的代码。
makeMerge
由附加菜单按钮触发。
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
ui.createAddonMenu().
addItem("merge", 'uiTrigger').
addToUi();
}
function uiTrigger() {
makeMerge(SpreadsheetApp.getActiveSheet(), DriveApp.getRootFolder());
}
function makeMerge(sheet, folder) {
if (folder === null || folder === undefined) {
folder = DriveApp.getRootFolder();
}
var dataRows = sheet.getDataRange().getValues().length - 1;
var names = sheet.getRange(2, 1, dataRows, 1).getValues();
var docsRef = sheet.getRange(2, 8, dataRows, 1).getValues();
var toDownload = sheet.getRange(2, 11, dataRows, 1).getValues();
for (var i in toDownload) {
var name = names[i][0];
var docRef = docsRef[i][0];
Logger.log(docRef);
try {
var doc = DocumentApp.openByUrl(docRef);
} catch(error) {
Logger.log(error);
}
}
}
我不知道(我不使用电子表格自定义函数)为什么我会遇到同样的问题? 如何授予我的脚本打开文档的权限?
DocumentApp.openByUrl()
没有从 doc.getUrl()
中获取 link
它似乎没有记录在官方网站上。这是一个例子。
// with a container-bound script, in this example
function notWork() {
var doc = DocumentApp.getActiveDocument();
var docUrl = doc.getUrl();
Logger.log(docUrl);
var newDoc = DocumentApp.openByUrl(docUrl);
}
因此,DocumentApp.openById()
仍然有效。
function Worked() {
var doc = DocumentApp.getActiveDocument();
var docId = doc.getId();
Logger.log(docId);
var newDoc = DocumentApp.openById(docId);
}
所以,我们可以从doc.getUrl()
中提取id,形式为
https://docs.google.com/open?id=YOUR_DOCUMENT_ID 或
https://docs.google.com/a/YOUR_DOMAIN/open?id=YOUR_DOCUMENT_ID
function modifyFromNotwork(){
var doc = DocumentApp.getActiveDocument();
var docUrl = doc.getUrl();
var docId = docUrl.slice(docUrl.indexOf("=")+1);
Logger.log(docId);
var newDoc = DocumentApp.openById(docId);
}