我在电子表格中有一个脚本,可以接收来自表单的回复。使用这些回复和模板Google文档,我从模板创建一个新文档,然后用适当的数据替换占位符(例如' ## CLIENT ##')。效果很好。然后我尝试在同一文件夹中创建PDF副本。问题是PDF是原始模板而没有替换占位符...
我尝试添加一个中断来让文档更新:Utilities.sleep(15000);
这没有用。我想我不明白文件是如何在我的功能之间传递的?
全局变量
var SOURCE_TEMPLATE = "{Document ID Here}";
var TARGET_FOLDER = "{Folder ID Here}";
代码:
//Get headers from spreadsheet and create a sorted array
var s = SpreadsheetApp.getActiveSheet();
var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];
// The variable e holds all the form values in an array.
// Assign values for each submission
if (e && e.namedValues){
var array_fields =[];
var project_manager = e.namedValues[headers[1]].toString();
var client = e.namedValues[headers[2]].toString();
var client_number = e.namedValues[headers[3]].toString();
var project_title = e.namedValues[headers[4]].toString();
var project_number = e.namedValues[headers[5]].toString();
var project_engineer = e.namedValues[headers[6]].toString();
var job_type = e.namedValues[headers[7]].toString();
var completion_date = e.namedValues[headers[14]].toString();
var project_cost = e.namedValues[headers[15]].toString();
var time = get_time();
array_fields.push(project_manager,client,client_number,project_title,pad(project_number),project_engineer,job_type,completion_date,'$'+ add_commas(project_cost),time);
var key_array = ['##PROJECTMANAGER##','##CLIENT##','##CLIENTNUMBER##','##PROJECTTITLE##','##PROJECTNUMBER##','##PROJECTENGINEER##','##JOBTYPE##','##COMPLETIONDATE##','##PROJECTCOST##','##DATE##'];
var target = createDuplicateDocument(SOURCE_TEMPLATE, client_number + "-" + pad(project_number) + " " + project_title + " Order Entry");
Logger.log("Created new document:" + target.getId());
for(var i=0; i<array_fields.length; i++) {
var key = key_array[i]
var value = array_fields[i]
replaceParagraph(target, key, value);
}
Utilities.sleep(15000);
savePDF(target);
}
}
savePDf函数
function savePDF(doc) {
var docblob = doc.getAs('application/pdf');
var folder = DocsList.getFolderById(TARGET_FOLDER);
docblob.setName(doc.getName())
folder.createFile(docblob);
}
因此savePDF函数应该创建已填充文档的PDF副本,而是在填充之前为我提供模板文档的PDF或新文档。
日志显示来自target.getID()
的正确文档ID所以我不确定为什么target
未正确传递给savePDF
。我觉得这是一个小错误,但我无法确定问题所在。
答案 0 :(得分:1)
在转换文档之前,您需要使用saveAndClose()来更新文档。
在您的代码中:
function savePDF(doc) {
doc.saveAndClose();
var docblob = doc.getAs('application/pdf');
var folder = DocsList.getFolderById(TARGET_FOLDER);
docblob.setName(doc.getName())
folder.createFile(docblob);
}
你不需要睡眠延迟,你可以删除它,除非你想等待15秒; - )