将 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));
}
参考:
- moveTo(destination)
- addFile、addFolder、removeFile 和 removeFolder 方法已被弃用。 Ref
我正在编写脚本,该脚本将使用电子表格中的单元格值填充 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));
}
参考:
- moveTo(destination)
- addFile、addFolder、removeFile 和 removeFolder 方法已被弃用。 Ref