не удалось открыть документы в надстройке электронных таблиц.openByUrl () нет разрешения - PullRequest
0 голосов
/ 22 января 2019

У меня есть расширение таблицы, которое сохраняет метаданные многих документов.

Для активации функции объединения файлов используется дополнительное меню, которое использует DocumentApp.openBy..()

Мой вопрос немного похож на это .

Я изменил манифест (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 голосов
/ 25 января 2019

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(), который в виде 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...