You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:06:04