使用Drive.Files.copy复制的结果是PDF,而不是Google doc

时间:2018-09-09 03:50:17

标签: google-apps-script google-drive-api google-drive-team-drive

我需要使用Drive.Files.copy函数在Team Drives中复制文件。该功能是将模板Google文档复制到新文件和文件夹。

下面的函数似乎可以复制文件,但是生成的文件是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);
}

如何在Team Drives中创建重复的Google文档并将其移至其他文件夹?

2 个答案:

答案 0 :(得分:0)

感谢@Tanaike的帮助和解答。有关此工作解决方案的更多详细信息,请参见:

Drive.Files.Copy and "parents" not working

答案 1 :(得分:0)

出现“找不到文件”错误的原因是,您试图访问位于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操作推断)来尝试做什么,还是不确定为什么尝试设置{{ 1}}参数,通常是对API响应内容的只读描述。

进行此更改后,您将可选参数作为对客户端库方法的最后一次调用:

kind

成为

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

相关阅读: