Копирование с использованием Drive.Files.copy приводит к формату PDF, а не документа Google. - PullRequest
0 голосов
/ 09 сентября 2018

Мне нужно использовать функцию Drive.Files.copy для копирования файла в Team Drives. Функциональность заключается в копировании шаблона Google Doc в новый файл и папку.

Кажется, что нижеприведенная функция копирует файл, но полученный файл представляет собой PDF (исходный файл - Google Doc). Это, наверное, что-то простое, чего я не вижу.

teacherFolder это пункт назначения. learnerDoc это оригинальный файл. newDocc - новый файл.

function test() {
  var newFile = {
    title: "Learner Guide - test",
    description: "New student learner guide",
    mimetype: 'application/vnd.google-apps.file',
    supportsTeamDrives: true,
    kind: "drive#user",
    includeTeamDriveItems: true
  };
  // find Teacher's Learner Guides folder
  var teacherFolder = DriveApp.getFolderById('1qQJhDMlHZixBO9KZkkoSNYdMuqg0vBPU');

  // create duplicate Learner Guide Template document
  var learnerDoc = DriveApp.getFileById('1g6cjUn1BWVqRAIhrOyXXsTwTmPZ4QW6qGhUAeTHJSUs');

  //var newDocc = Drive.Files.copy(newFile, learnerDoc.getId());
  var newDocc = Drive.Files.insert(newFile, learnerDoc.getBlob(), newFile);
  var DriveAppFile = DriveApp.getFileById(newDocc.id);
  teacherFolder.addFile(DriveAppFile);
  Logger.log('file = ' + newDocc.fileExtension);
}

Как создать дубликат Google Doc в Team Drives и переместить его в другую папку?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Причина ошибки «Файл не найден» заключается в том, что вы пытаетесь получить доступ к файлу, расположенному на Team Drive, но не указываете в дополнительных параметрах, что ваш код знает, как обрабатывать различия между Google Drive и Team диски.

Вы установили этот параметр, но задаете его в метаданных, связанных с файлом, который вы вставляете / копируете, а не в качестве необязательного параметра для Drive API.

Таким образом, для устранения ошибки «Файл не найден» необходимо изменить определение метаданных:

var newFile = {
  title: "Learner Guide - test",
  description: "New student learner guide",
  mimetype: 'application/vnd.google-apps.file',
  supportsTeamDrives: true,
  kind: "drive#user",
  includeTeamDriveItems: true
};

к метаданным и параметрам:

const newFile = {
  title: "Learner Guide - test",
  description: "New student learner guide",
};
const options = {
  supportsTeamDrives: true,
  includeTeamDriveItems: true
};

Я не уверен, что вы пытались сделать, предоставив mimetype в качестве универсального файла (вы должны позволить Drive API выводить это для операции Copy), или почему вы пытаетесь установить параметр kind , который обычно является только для чтения описанием содержимого ответа API.

С этим изменением вы передаете необязательные параметры в качестве последнего вызова метода клиентской библиотеки:

var newDocc = Drive.Files.copy(newFile, learnerDoc.getId());

становится

var newDocc = Drive.Files.copy(newFile, learnerDoc.getId(), options);

Связанные чтения:

0 голосов
/ 09 сентября 2018

Спасибо @Tanaike за помощь и ответы. Более подробную информацию о рабочем решении для этого можно найти по адресу:

Drive.Files.Copy и «родители» не работают

...