Как ссылаться на элемент в массиве в скриптах приложений Google - PullRequest
1 голос
/ 26 сентября 2019

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

Например, мне нужно получить идентификатор файла на основе имени файла.Обратите внимание, что это упрощенный пример, и я могу иметь более одного элемента в массиве.

function getFileID() {
  var fileNames = ["my_file"];
  var Ids = [];
  Ids.push(fileNames.getId());
  Logger.log(Ids)
}

Это вернет TypeError: Cannot find function getID in object ["my_file"].

Итак, он читает fileNames каквесь объект, а не только строковое значение, которое он содержит.

Я попробовал следующее, но они тоже не правы.

function getFileID() {
  var fileNames = ["my_file"];
  var Ids = [];
  Ids.push(fileNames[1].getId());
  Logger.log(Ids)
}
function getFileID() {
  var fileNames = ["my_file"];
  var Ids = [];
  var fileNames = (JSON.stringify(fileNames));
  Ids.push(fileNames.getId());
  Logger.log(Ids)
}

Ответы [ 2 ]

3 голосов
/ 26 сентября 2019

Причина, по которой этого нет в документации, заключается в ошибке JavaScript.Строки и массивы не имеют функции getId ().В документах Google есть функция getId (), но строка не является документом Google, а представляет собой фрагмент текста, который содержит название документа Google.

Вам необходимо использовать приложение диска для документа на основеэто имя, тогда вы можете получить идентификатор:

function getFileID() {
  var fileNames = ["my_file"];
  var filename = fileNames[0]; //arrays start at 0
  //this will get the id of the first file with that name
  var file = DriveApp.getFilesByName(filename).next()
  var id = file.getId();
  var Ids = [];
  Ids.push(id);
  Logger.log(Ids)
}

0 голосов
/ 26 сентября 2019

Попробуйте изменить это:

function getFileID() {
  var fileNames = ["my_file"];
  var Ids = [];
  Ids.push(fileNames.getId());
  Logger.log(Ids)
}

На что-то вроде этого:

function getFileID() {
  var folder=DriveApp.getFolderById("Folder Id");//might want to limit search to a folder
  var fnA=["Linked 1","Linked 2","Linked 3","Linked 4","Linked 5"];//filenames I picked some names that I had in a folder
  var ids=[];//array to collect names and ids
  for(var i=0;i<fnA.length;i++) {
    var files=folder.getFilesByName(fnA[i]);//often more than one file may have the same name
    while(files.hasNext()) {
      var file=files.next();
      ids.push({name:fnA[i],id:file.getId()});//storing name and file id in each array element.
    }
  }
  var html="";//building a dialog to view results
  for(var i=0;i<ids.length;i++) {
    html+=Utilities.formatString('<br />Filename: %s id: %s',ids[i].name,ids[i].id);
  }
  var userInterface=HtmlService.createHtmlOutput(html).setWidth(800);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "File names and ids");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...