实现Google Sheets导出PDF:无文件则保存,有则更新
实现双Google Form提交后自动导出指定工作表为PDF(支持新建/更新替换)
我需要计算客户的用水量及账单金额,为此采用了两个Google Form:
- 第一个表单收集用水量数据,内置公式计算用水量及账单金额
- 第二个表单收集客户往期欠费数据
两个表单的提交数据都存储在同一个Google表格的不同工作表中,最终汇总到另一张工作表完成计算。因为找不到能实现任意表单提交后自动导出指定工作表为PDF的现成脚本,我自行编写了脚本,实现了以下功能:
- 无论哪个表单先提交,都会自动将指定工作表导出为PDF
- 目标文件夹中无对应PDF文件时,新建文件
- 目标文件夹中已有对应PDF文件时,直接更新替换原文件
感谢@tanaike的协助,以下是运行正常的脚本:
function printSpreadsheetAsPDF() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var fileid = sheet.getId(); var sheetKons = sheet.getSheetByName('DATA KONSUMEN'); var sheetCtkTagih = sheet.getSheetByName('CETAK TAGIHAN'); var fileCtkTagihid = sheetCtkTagih.getSheetId(); var nameFile = sheetCtkTagih.getRange('C4').getValue().toString() +".pdf"; var destinationFolder = DriveApp.getFolderById(sheetKons.getRange('E4').getValue()); var exportOptions ='https://docs.google.com/spreadsheets/d/'+fileid+ '/export?&format=pdf' + '&size=letter' + '&portrait=true' + '&fitw=true' + '&sheetnames=false&printtitle=false' + '&pagenumbers=false&gridlines=true' + '&fzr=true' + '&gid='+fileCtkTagihid; var request = { "method": "GET", "headers":{"Authorization": "Bearer "+ScriptApp.getOAuthToken()}, "muteHttpExceptions": true }; var pdf = UrlFetchApp.fetch(exportOptions, request); pdf = pdf.getBlob().getAs('application/pdf').setName(nameFile); var deleteexisting = destinationFolder.getFilesByName(nameFile); if (deleteexisting.hasNext() === false) { // if no file is found then create it destinationFolder.createFile(pdf); } else { while (deleteexisting.hasNext()) { var updatedPDF = deleteexisting.next(); Drive.Files.update({mimeType: 'application/pdf'}, updatedPDF.getId(), pdf); } } }
内容的提问来源于stack exchange,提问作者PSAB Plalangan
相关产品推荐
相关产品推荐

