Google App Script - DriveApp - getParents () не работает должным образом - PullRequest
2 голосов
/ 14 июня 2019
MyDrive
|_ Client
|_ tpl
   |_ intake.doc

Я пытаюсь получить ссылку на папку MyDrive.

  var tpl_intakeDoc = DriveApp.getFileById(docIDs.tpl_intake);
  var parent = tpl_intakeDoc.getParents()[0];
  Logger.log(parent.getName());

Это дает мне следующую ошибку:

TypeError: Невозможно вызвать метод "getName" из неопределенного. (строка 50, файл "Код")

Аналогичным образом, при попытке перебрать родительские папки (Client и tpl) по какой-то причине показывается только tpl.

  var parents = tpl_intakeDoc.getParents();
  while (parents.hasNext()) {
    var parents = parents.next();
    Logger.log(folder.getName());
  }

Все, что зарегистрировано:

[19-06-14 04: 14: 11: 764 MDT] tpl

где я ожидал бы увидеть что-то вроде:

[19-06-14 04: 14: 11: 764 MDT] tpl

[19-06-14 04: 14: 11: 764 MDT] Клиент

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 14 июня 2019
  • MyDrive, Client и tpl являются папками.
  • intake.doc - это файл.
  • Вы хотите получить папки Client и tpl в MyDrive, используя родительскую папку intake.doc.
  • Вы хотите узнать причину, по которой при запуске второго сценария получается только tpl.

Если мое понимание верно, как насчет этого ответа? В этом ответе ваш второй сценарий был изменен.

Очки модификации:

  • В вашем втором скрипте в вашем вопросе, я думаю, что ошибка возникает при запуске скрипта. Поэтому, пожалуйста, измените следующим образом.

    var tpl_intakeDoc = DriveApp.getFileById(docIDs.tpl_intake); // Added
    var parents = tpl_intakeDoc.getParents();
    while (parents.hasNext()) {
      var parent = parents.next(); // Modified
      Logger.log(parent.getName()); // Modified
    }
    
  • В приведенном выше сценарии извлекается родительская папка intake.doc. Таким образом, возвращается только tpl.

  • Чтобы получить папки Client и tpl, требуется получить родительскую папку tpl. И получите папки в родительской папке tpl.

Порядок выполнения этого сценария следующий.

  1. Получить родительскую папку intake.doc.
    • tpl получено.
  2. Получить родительскую папку tpl.
    • MyDrive получено.
  3. Получить папки в MyDrive.
    • Client и tpl получены.

Модифицированный скрипт:

var tpl_intakeDoc = DriveApp.getFileById(docIDs.tpl_intake);
var parent = tpl_intakeDoc.getParents(); // tpl
if (parent.hasNext()) {
  var parentOnParent = parent.next().getParents(); // MyDrive
  if (parentOnParent.hasNext()) {
    var MyDrive = parentOnParent.next().getFolders();
    while (MyDrive.hasNext()) {
      var folder = MyDrive.next();
      Logger.log(folder.getName()) // tpl, Client
    }
  }
}

Примечание:

  • Если MyDrive является корневой папкой, и если вы хотите извлечь папки tpl и Client из корневой папки, я думаю, что ответ Альберто Молины полезен для этого.

Ссылки

Если я неправильно понял ваш вопрос, а это не то направление, которое вы хотите, я прошу прощения.

0 голосов
/ 14 июня 2019

Чтобы получить ссылку на папку «MyDrive», которая является корнем вашего диска, вы должны использовать функцию

var rootFolder = DriveApp.getRootFolder();

, которая будет возвращать объект папки, как если бы вы искалипапка по идентификатору.Ниже приведена дополнительная документация по классу DriveApp, которая поможет вам в любых других сомнениях.

URL-адрес документации: https://developers.google.com/apps-script/reference/drive/drive-app#getrootfolder

...