Google apps script 创建文档应用程序脚本的PDF副本
我正在尝试根据电子表格中的条目创建一个PDF,基本流程如下Google apps script 创建文档应用程序脚本的PDF副本,google-apps-script,Google Apps Script,我正在尝试根据电子表格中的条目创建一个PDF,基本流程如下 填写电子表格 从菜单按钮触发提交(弹出询问工作编号) 模板化文档获取副本,并将单元格内容附加到副本文档中的表中 复制文档将保存为特定文件夹中的PDF格式 文档副本被删除 我只是想获得在指定文件夹中创建PDF的过程。它在我创建文档副本之前就已经工作了,只是使用了模板,所以我不知道为什么它现在不能工作。任何输入以及如何将表格中的单元格数据附加到文档副本中的任何信息都将不胜感激。当然是新手,所以任何帮助都将不胜感激。附加代码 function
function createDoc () {
var job = Browser.inputBox('Enter Job Number', 'Job Number', Browser.Buttons.OK);
var dtStr = Utilities.formatDate(new Date(), "GMT", "MMddyy")
// create temp file before edited with spreadsheet data
var tmpName = "tmpname"
var folder = DriveApp.getFolderById('1C_k3MvoT33WhSXVNMmFQNFhqaW8')
var tmpl = DriveApp.getFileById('225xZAECq0rkdJnsr4k9VjL91B7vgJh8Y- t9YrsbCEgc').makeCopy(tmpName).getID();
// get document and make PDF in folder
var doc = DriveApp.getFileByID(tmpl).getAs("application/pdf");
var pdf = doc.setName(job +"-"+dtStr+".pdf");
folder.createFile(pdf)
}
我只在一些函数名中看到一些拼写错误,请记住Google Apps Script是一种基于JavaScript的脚本语言,因此: JavaScript是一种区分大小写的语言。这意味着语言 关键字、变量、函数名和任何其他标识符必须 始终使用大写字母输入 在这一行:
var tmpl = DriveApp.getFileById('').makeCopy(tmpName).getID();
doc = DriveApp.getFileByID(tmpl).getAs("application/pdf");
.getID()
的D
必须是小写,只需将其更改为.getID()
在这一行:
var tmpl = DriveApp.getFileById('').makeCopy(tmpName).getID();
doc = DriveApp.getFileByID(tmpl).getAs("application/pdf");
.getFileByID()
的D
也必须是小写,只需将其更改为.getFileByID()
要删除临时文档,可以使用,但首先需要获取文件,而不仅仅是id,因此我建议在获取副本id之前,先获取文件,然后获取文件id,如下所示:
var blob = DriveApp.getFileById('yourId').makeCopy(tmpName)
var tmpl = blob.getId();
创建pdf后,您可以使用以下命令删除:
folder.removeFile(blob);
要创建自定义菜单,有一些很好的示例
编辑:
这是一个将表格附加到Google文档的示例,可以让您开始使用,单元格
变量您可以将其更改为电子表格的数据范围:
function appendTable(){
var document = DocumentApp.openById('docId');
var body = document.getBody();
var cells = [
['Row 1, Cell 1', 'Row 1, Cell 2'],
['Row 2, Cell 1', 'Row 2, Cell 2']
];
body.appendTable(cells);
document.saveAndClose();
}
我已经包含了用于相同目的的简单代码。这包括一个指示合并代码在流程中的位置的检查器。这在一次处理多行时很有用。它还提供所创建文件的url。我使用Google Forms的方式是,将数据发送到“Form Responses”,然后发送到“Merge data”,以便使用
=QUERY()
继续执行函数
这段代码为您留下了Google文档和final.pdf文件。如果只想使用.pdf格式,只需在Google Doc变量上重复.setTrashed()
方法即可
我确实意识到代码中存在一些冗余,因为更复杂的版本包含更多的if/else语句、条件检查、数据处理等。您可以根据需要缩减代码
在我的谷歌表单中,前两列是提交的时间戳和提交人的姓名。这些用于文件的命名
function mergeApplication() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Merge Data");
var range = sheet.getActiveRange();
var formSheet = ss.getSheetByName("Form Responses");
var lastRow = formSheet.getLastRow();
var lastColumn = sheet.getMaxColumns();
function checkAndComplete() {
var urlColumn = lastColumn;
var checkColumn = (urlColumn - 1);
var checkRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1);
var check = checkRange.getBackgrounds();
var red = "#ff0404";
var yellow = "#ffec0a";
var green = "#3bec3b";
for (var i = 0; i < check.length; i++) {
if (check[i] == green) {
continue;
} else {
var statusCell = sheet.getRange((i+2), checkColumn, 1, 1);
var urlCell = sheet.getRange((i+2), urlColumn, 1, 1);
var dataRow = sheet.getRange((i+2), 1, 1, (lastColumn - 2));
function mergeTasks() {
function docCreator() {
var docTemplate = DriveApp.getFileById("docid");
var docToUse = docTemplate;
var folderDestination = DriveApp.getFolderById("folderid");
var name = sheet.getRange((i+2), 2, 1, 1).getValue();
var rawSubmitDate = sheet.getRange((i+2), 1, 1, 1).getValue();
var submitDate = Utilities.formatDate(rawSubmitDate, "PST", "MM/dd/yy");
var docName = "File Name - " + name + " - " + submitDate;
var docCopy = docToUse.makeCopy(docName, folderDestination);
var docId = docCopy.getId();
var docURL = DriveApp.getFileById(docId).getUrl();
var docToSend = DriveApp.getFileById(docId);
var docInUse = DocumentApp.openById(docId);
var docBody = docInUse.getBody();
var docText = docBody.getText();
function tagReplace() {
var taggedArray = docText.match(/\<{2}[\w\d\S]+\>{2}/g);
var headerArray = sheet.getRange(1, 1, 1, (lastColumn - 2)).getValues();
var dataArray = dataRow.getValues();
var strippedArray = [];
function tagStrip() {
for (var t = 0; t < taggedArray.length; t++) {
strippedArray.push(taggedArray[t].toString().slice(2, -2));
}
}
function dataMatch() {
for (var s = 0; s < strippedArray.length; s++) {
for (var h = 0; h < headerArray[0].length; h++) {
if (strippedArray[s] == headerArray[0][h]) {
docBody.replaceText(taggedArray[s], dataArray[0][h]);
}
}
}
docInUse.saveAndClose();
}
tagStrip();
dataMatch();
}
tagReplace();
statusCell.setBackground(yellow);
var pdfDocBlob = docToSend.getAs(MimeType.PDF);
var pdfDocInitial = DriveApp.createFile(pdfDocBlob).setName(docName);
var pdfDoc = pdfDocInitial.makeCopy(folderDestination);
pdfDocInitial.setTrashed(true);
urlCell.setValue(docURL);
}
statusCell.setBackground(red);
docCreator();
statusCell.setBackground(green);
}
mergeTasks();
}
}
}
checkAndComplete();
}
函数合并应用程序(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“合并数据”);
var range=sheet.getActiveRange();
var formSheet=ss.getSheetByName(“表单响应”);
var lastRow=formSheet.getLastRow();
var lastColumn=sheet.getMaxColumns();
函数checkAndComplete(){
var urlColumn=lastColumn;
var checkColumn=(urlColumn-1);
var checkRange=sheet.getRange(2,checkColumn,(lastRow-1),1);
var check=checkRange.getBackgrounds();
var red=“#ff0404”;
var yellow=“#ffec0a”;
var green=“#3bec3b”;
对于(变量i=0;i