我有一个speadsheet扩展名,可保存许多文档元数据。
它使用附加菜单激活合并文件功能,该功能使用DocumentApp.openBy..()
我的问题有点像this。
我将清单(appsscript.json)修改为具有以下权限:
它仍然不起作用。
这是我的代码。
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);
}
}
}
我不知道(我不使用电子表格自定义功能),为什么会有同样的问题? 如何授予脚本打开文档的权限?
答案 0 :(得分:0)
DocumentApp.openByUrl()
未获得来自doc.getUrl()
的链接
它似乎没有在官方网站上记录。这是一个例子。
// 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);
}