DriveApp.makeCopy не генерирует истинное утверждение для isGoogleType () - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь написать сценарий для создания копии документа Google, который затем будет заполнен информацией из электронной таблицы.Однако у меня есть проблемы с .makeCopy, не генерирующим истинное значение для .isGoogleType ().По крайней мере, похоже, это проблема того, почему я не могу получить доступ к .getBody документа.

Я пробовал тестировать на Google Doc, который не был создан с помощью этого скрипта, и кажется, что все в порядке.

var templateID = [google doc template ID];
var folderID = [google drive folder ID];

var userDocTitle = "test" + data[i][0];

var copy = DriveApp.getFileById(templateID).makeCopy(userDocTitle,DriveApp.getFolderById(folderID));

var blob = copy.getBlob().isGoogleType();
var docid = copy.getId();
var doc = DocumentApp.openById(docid);
var body = doc.getBody();

Я ожидаю, что .makeCopy Google Doc создаст файл Google Doc, к которому я смогу получить доступ к телу.


2/15/2019: устранено путем удаления вставкиРисование с образа диска или его отсоединение.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

1.О сценарии OP:

Я думаю, что Google Document, скопированный с помощью makeCopy() с использованием сценария OP, можно использовать, а значения можно извлечь из скопированного документа.Если ошибка все еще возникает, можете ли вы подтвердить mimeType templateID, используя следующий скрипт?Я думаю, что это поможет пользователям подумать о вашей проблеме.

var mimeType = DriveApp.getFileById(templateID).getMimeType();
Logger.log(mimeType)

2.О isGoogleType():

Хотя я не уверен, что дата добавления isGoogleType() была добавлена, когда Документы Google были получены с помощью getBlob(), mimeType автоматически становится application/pdf.Это может быть подтверждено blob.getContentType().Я думаю, что это причина того, что blob.isGoogleType() всегда false.Но этот метод используется в Class Blob.

Исходя из этих ситуаций, я подумал, что isGoogleType() не может быть напрямую использован для подтверждения того, является ли файл Google Docs.Поэтому я использую обходной путь, который извлекает mimeType из идентификатора файла.(Я думаю, что есть несколько обходных путей для подтверждения, является ли файл Google Docs.) Пример сценария выглядит следующим образом.

var res = ~DriveApp.getFileById(fileId).getMimeType().indexOf("application/vnd.google-apps") ? true : false

Я использую этот сценарий вместо isGoogleType().Когда файл с идентификатором файла , файлы Google , true возвращаются.Если вы хотите вернуть true только тогда, когда файл представляет собой электронную таблицу, документ и слайды, вы можете использовать следующий сценарий.

String.prototype.isGoogleType2 = function() {
  switch(this.toString()) {
    case "application/vnd.google-apps.spreadsheet":
      return true;
    case "application/vnd.google-apps.document":
      return true;
    case "application/vnd.google-apps.presentation":
      return true;
    default:
      return false;
  }
}

var doc = DocumentApp.getActiveDocument();
var res = DriveApp.getFileById(doc.getId()).getMimeType().isGoogleType2();

Ссылки:

Если я неправильно понял ваш вопрос, прошу прощения.

0 голосов
/ 13 февраля 2019

Я провел некоторое тестирование и столкнулся с похожими проблемами с isGoogleType().Кажется, что он не вернет true, даже если blob определенно является документом (просто скопированным или нет).

Однако остальная часть скрипта должна нормально функционировать и возвращать Body.См. Мой пример ниже.

  var doc = DocumentApp.getActiveDocument();
  var docBlob = doc.getBlob();
  Logger.log(docBlob.isGoogleType()); //false

  var fileCopy = DriveApp.getFileById(doc.getId()).makeCopy("TMP: Delete Me");
  var fileBlob = fileCopy.getBlob();
  Logger.log(fileBlob.isGoogleType()); //false

  var docCopy = DocumentApp.openById(fileCopy.getId());
  Logger.log(docCopy.getBody().getText()); //still a valid Document with a body that return a value.

Если это не полностью отвечает на ваш вопрос, нам нужно будет увидеть ошибки, которые вы получаете при попытке получить тело вашей doc объектной переменной.

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