将 Google 文档转换为 PDF,然后移动到另一个文件夹

Converting a Google doc to PDF, then moving to another folder

我正在编写脚本,该脚本将使用电子表格中的单元格值填充 Google 文档模板。创建已编辑文档的副本并将其转换为 PDF。然后我希望将 doc 和 pdf 都移动到指定的文件夹。我一直坚持将 pdf 移动到文件夹中。我创建了一个移动文档的函数,它似乎可以很好地处理 Google 文档副本,但是当函数运行 pdf 时返回错误。该错误似乎来自 moveFile 函数。我也尝试将 moveFile pdf 调用移动到 fillLetter,但仍然遇到相同的错误。这是我第一次尝试使用 Google 脚本进行编码,因此非常感谢任何建议。谢谢!

function fillLetter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];//Form Responses tab
  var templateId = '1d-CKr_Xi27FrWsH6eWdUCWKyzrLjy3ivTjLkk_WyJ4s';//Test doc

  //get candidates row number from user input
  var ui = SpreadsheetApp.getUi();
  var rowNum = ui.prompt("Please enter candidate row number");

  //activates first column in selected row
  var col = sheet.getRange("A"+ rowNum.getResponseText());
  sheet.setActiveRange(col);
  var candName = sheet.getActiveCell().getValue();

  col = sheet.getRange("B"+ rowNum.getResponseText());
  sheet.setActiveRange(col);
  var location = sheet.getActiveCell().getValue();

  //creates copy of template doc and renames
  var lastName = candName.split(" ");
  var filename = candName.substring(0,1) + lastName[lastName.length - 1] + ' - Offer Letter';
  var newOffer = DriveApp.getFileById(templateId).makeCopy();
  var offerId = newOffer.getId();
  DriveApp.getFileById(offerId).setName(filename);

  //gets body of template doc and replaces text
  var doc = DocumentApp.openById(offerId);
  var body = doc.getBody();
  var todaysDate = Utilities.formatDate(new Date(), 'PST', 'MMMM dd, yyyy');
  body.replaceText('{{Todays date}}', todaysDate);
  body.replaceText('{{Candidate name}}', candName);
  body.replaceText('{{Location}}', location);
  

  doc.saveAndClose();

  //Creates folder and moves newly created files
  var folderName = DriveApp.createFolder(candName).getId();
  convertPDF(offerId, folderName); // Line 52
  moveFile(offerId, folderName);
  
}

function convertPDF(fileToCopy, folder) {
  var docFolder = DriveApp.getFolderById(folder);
  var copy = DriveApp.getFileById(fileToCopy);
  //Add the PDF extension 
  var docblob = copy.getAs('application/pdf');
  docblob.setName(copy.getName() + ".pdf");
  var pdfFile = DriveApp.createFile(docblob);
  var fileId = pdfFile.getId();
  Logger.log("Offer PDF id - " + fileId);//for debug
  moveFile(fileId, docFolder); // Line 66
}

function moveFile(fileId, folderId) {
  var file = DriveApp.getFileById(fileId);
  DriveApp.getFolderById(folderId).addFile(file); // Line 72: wh/ error is most likely occurring
}

以下是来自记录器的错误消息:

Error   
Exception: Unexpected error while getting the method or property getFolderById on object DriveApp.
moveFile    @ testCode.gs:72
convertPDF  @ testCode.gs:66
fillLetter  @ testCode.gs:52

在当前阶段,您可以使用moveTo方法移动Google驱动器上的文件。这个是2020年7月27日添加的。Ref在你的脚本中,修改moveFile后,变成如下

修改后的脚本:

function moveFile(fileId, folderId) {
  var file = DriveApp.getFileById(fileId);
  file.moveTo(DriveApp.getFolderById(folderId));
}

参考: