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

时间:2019-01-22 08:04:12

标签: google-apps-script google-sheets google-apps-script-addon

我有一个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);
    }
  }  
}  

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

1 个答案:

答案 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_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);
}