无法打开电子表格加载项中的文档。 openByUrl( ) 没有权限

could not open Documents in a Spreadsheet add-on. openByUrl( ) no permission

我有一个电子表格扩展程序,可以保存许多文档元数据。

它使用附加菜单激活合并文件功能,该功能使用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);
    }
  }  
}  

我不知道(我不使用电子表格自定义函数)为什么我会遇到同样的问题? 如何授予我的脚本打开文档的权限?

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_IDhttps://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);
}