我正在尝试根据电子表格中的条目创建PDF,其中包含以下基本流程。
我只想尝试获取在指定文件夹中创建的PDF的过程。它在我创建Doc的副本之前工作,只是使用模板,所以我不确定为什么它现在不起作用。任何输入都将受到赞赏,以及有关如何将工作表中的单元格数据附加到doc副本中的任何信息。纽比,以确保任何帮助将不胜感激。附加代码
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)
}
答案 0 :(得分:0)
我只在某些功能名称中看到一些拼写错误,请记住Google Apps脚本是一种基于JavaScript的脚本语言,所以:
JavaScript是一种区分大小写的语言。这意味着语言 关键字,变量,函数名称和任何其他标识符必须 总是输入一致的大写字母。
在这一行:
var tmpl = DriveApp.getFileById('').makeCopy(tmpName).getID();
.getID()
D
必须为小写,只需将其更改为.getId()
在这一行:
doc = DriveApp.getFileByID(tmpl).getAs("application/pdf");
.getFileByID()
D
也必须为小写,只需将其更改为.getFileById()
要删除临时文档,您可以使用removeFile()但首先需要获取文件,而不仅仅是id,所以我建议在获取副本的ID之前,获取文件然后获取文件的ID,如下所示:
var blob = DriveApp.getFileById('yourId').makeCopy(tmpName)
var tmpl = blob.getId();
然后在创建pdf之后,你可以删除:
folder.removeFile(blob);
要创建自定义菜单,official documentation有一些很好的例子。
修改强>
这是一个将表格附加到可以帮助您入门的Google文档的示例,cell
变量可以将其更改为电子表格的数据范围:
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();
}
答案 1 :(得分:0)
我已经包含了我用于同一目的的简单代码。这包括一个检查器,表示合并代码在过程中的位置。这在一次处理多行时很有用。它还提供了创建文件的URL。我使用此方式的方法是使用Google表单将数据发送到“表单响应”,然后使用=QUERY()
将其发送到“合并数据”以继续执行功能。
此代码为您提供了Google Doc 和最终的.pdf文件。如果您只想使用.pdf,只需在Google Doc变量上重复.setTrashed()
方法即可。
我确实认识到代码中存在一些冗余,因为更复杂的版本包含更多if / else语句,条件检查器,数据处理等。您可以根据需要削减代码。
在我的Google表格中,前两列是提交的时间戳和提交人的姓名。这些用于命名文件。
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();
}
此过程将系统地运行,每行大约需要5秒,并且将在驱动器的根目录下创建每个文件,但会快速从根目录中删除它。可能有一种更简单的方法可以节省垃圾中的空间,但我没有研究更有效的方法。