Элемент с указанным идентификатором не найден в makeCopy () в скрипте Google Apps - PullRequest
0 голосов
/ 07 марта 2019

У меня есть надстройка, которая позволяет пользователю загружать мои шаблоны со своего накопителя на свои, если надстройка установлена ​​в их листе или документе.

Функция, которая должна делать копию, выглядит следующим образом

function createFileCopy(id){
  var file = id.split('.');
  var docName = DriveApp.getFilesByName(file[0]);
  while (docName.hasNext()) {
    var file = docName.next();
    var fileId = file.getId();
    var fileName = file.getName();
  }

  Logger.log(fileId);
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(TEMPLATES_DATA);
  var data = sheet.getRange(1, 9, sheet.getLastRow()-1, 1).getValues();
  var pos = data.map(function (obj) { return obj[0]; }).indexOf(id);
  if(pos > -1){
//    var val = sheet.getRange("J" + (pos + 1)).getValue() + 1;
    var title = sheet.getRange("A" + (pos + 1)).getValue();
//    sheet.getRange("J" + (pos + 1)).setValue(val);
  }
  var newFile = DriveApp.getFileById(fileId).makeCopy('Copy of '+ title);
  return {
    title: newFile.getName(),
    url: newFile.getUrl()
  }

Проблема в том, что когда пользователь пытается сделать копию, он / она получает ошибку: «Не удается найти элемент с данным идентификатором или у вас нет разрешения на доступ к нему».

Я прокомментировал 2 строки, я думал, что проблема была в том, что я отправил инкремент загрузки в исходную электронную таблицу, но, как оказалось, это была не единственная проблема.

Отлично работает внутри исходного аккаунта.

Я попросил помощника по надстройке о помощи, но вместо этого меня переадресовали.

Пожалуйста, помогите

1 Ответ

1 голос
/ 07 марта 2019

Когда пользователь устанавливает надстройку, он запускается под учетной записью этого пользователя.Таким образом, они не могут получить доступ к вашим таблицам шаблонов, если им не предоставлено разрешение на это.

Если вам удобно обмениваться файлами с конечными пользователями, вы можете программно предоставить / отозвать разрешение для ваших шаблонов, используя * 1003.* Расширенный сервис .Эти расширенные службы являются просто оболочками для их соответствующих API, поэтому в этом случае вам необходимо использовать документацию Drive API V2, чтобы выяснить, как добавлять / удалять разрешения.Следующие руководства и справочные материалы должны помочь:

Если обмен файлами нежелателен, вы можете использовать служебную учетную запись.Сервисные учетные записи - это особая учетная запись, которую вы можете создать из консоли GCP API.Вы можете предоставить учетной записи службы доступ к вашим шаблонам, а затем использовать учетную запись службы для извлечения шаблона электронной таблицы в виде объекта ресурса электронной таблицы в формате JSON с использованием API электронной таблицы.Затем вы можете использовать этот объект ресурса для создания пользовательской копии электронной таблицы без явного совместного использования вашего шаблона. Вы можете найти больше информации об учетных записях служб, проверив другие потоки здесь на stackoverflow .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...