在Apps Script中通过API调用下载文件:调用invoice-generator生成发票异常
代码运行异常核心原因
- API请求地址不完整:当前填写的
invoice-generator.com缺少HTTPS协议前缀,接口识别异常后返回官网首页HTML,而非生成的发票PDF文件。 - 文件夹获取逻辑疏漏:
getInvoiceFolderID函数中,当指定文件夹不存在时,创建文件夹后未将生成的ID赋值给返回变量,会触发undefined报错。 - 无文件格式配置:返回的Blob对象未指定格式与文件名,存入Drive时会出现格式识别错误、文件名乱码问题。
- 调试入口错误:
debug函数调用的run()方法不存在,直接运行调试会触发未定义函数报错。
修正后完整可运行代码
function debug(){ generateInvoice(invoice); } const folderName = 'Invoices Test' function generateInvoice(invoice) { var postData = JSON.stringify(invoice); var options = { 'method' : "post", 'contentType': "application/json", 'payload': postData }; // 补全完整HTTPS接口地址 var response = UrlFetchApp.fetch('https://invoice-generator.com', options); var fileBlob = response.getBlob(); // 配置文件名称与PDF格式 fileBlob.setName(`发票_${invoice.number}.pdf`).setContentType('application/pdf'); var folderID = getInvoiceFolderID(); var folder = DriveApp.getFolderById(folderID); var result = folder.createFile(fileBlob); } /** * @return String */ function getInvoiceFolderID(){ var id; var folders = DriveApp.getFoldersByName(folderName); if(!folders.hasNext()){ // 补全ID赋值逻辑 id = DriveApp.createFolder(folderName).getId(); } else{ id = folders.next().getId() } return id; } var invoice = { logo: "http://invoiced.com/img/logo-invoice.png", from: "Invoiced\n701 Brazos St\nAustin, TX 78748", to: "Johnny Appleseed", currency: "usd", number: "INV-0001", payment_terms: "Auto-Billed - Do Not Pay", items: [ { name: "Subscription to Starter", quantity: 1, unit_cost: 50 } ], fields: { tax: "%" }, tax: 5, notes: "Thanks for being an awesome customer!", terms: "No need to submit payment. You will be auto-billed for this invoice." }
使用说明
- 直接运行
debug函数即可触发发票生成,首次运行需要按提示授权Drive、UrlFetch相关权限。 - 生成的PDF发票会自动存入Google Drive根目录下的
Invoices Test文件夹,文件夹不存在时会自动创建。 - 若需要对接电子表格数据,只需修改
invoice对象的属性赋值逻辑,从表格读取对应字段填充即可。 - 自定义logo可替换
invoice对象中logo字段的地址,注意图片资源需要设置公开可访问权限。
内容的提问来源于stack exchange,提问作者nikko.guy
相关产品推荐
相关产品推荐

