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

当商品销量非零时自动生成新发票行的Google Sheets实现问询

Google Sheets自动生成售货机发票行脚本方案

完全可以通过Google Apps Script实现需求,以下是适配你场景的具体实现方案:

核心脚本代码

function generateInvoice() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const productsSheet = ss.getSheetByName('Products');
  const invoiceSheet = ss.getSheetByName('Invoice');
  
  // 清空Invoice中已有的商品数据(假设发票表头占前3行,数据从第4行开始)
  const invoiceDataStartRow = 4;
  const totalInvoiceRows = invoiceSheet.getLastRow() - invoiceDataStartRow + 1;
  if (totalInvoiceRows > 0) {
    invoiceSheet.getRange(invoiceDataStartRow, 1, totalInvoiceRows, invoiceSheet.getLastColumn()).clearContent();
  }
  
  // 读取Products工作表的商品数据(假设数据从第2行开始,列对应:A=商品名,B=单价,C=售出数量)
  const productsRange = productsSheet.getRange(2, 1, productsSheet.getLastRow() - 1, 3);
  const productsData = productsRange.getValues();
  
  // 筛选出售出数量非零的商品
  const validProducts = productsData.filter(row => row[2] > 0);
  
  // 整理发票行数据,自动计算金额
  const invoiceRows = validProducts.map(row => {
    const totalAmount = row[1] * row[2];
    return [row[0], row[1], row[2], totalAmount];
  });
  
  // 将筛选后的商品写入Invoice工作表
  if (invoiceRows.length > 0) {
    invoiceSheet.getRange(invoiceDataStartRow, 1, invoiceRows.length, invoiceRows[0].length).setValues(invoiceRows);
    // 格式化金额列为货币格式
    invoiceSheet.getRange(invoiceDataStartRow, 4, invoiceRows.length, 1).setNumberFormat('$#,##0.00');
  }
}

使用步骤

  • 打开你的Google表格,点击顶部菜单栏「扩展程序」→「Apps脚本」
  • 将上述代码粘贴到脚本编辑器中,点击保存并命名项目(例如「售货机发票生成」)
  • 返回表格,点击「插入」→「绘图」,绘制一个按钮(比如“生成发票”),点击按钮右上角的三个点,选择「分配脚本」,输入generateInvoice
  • 当你在Products工作表的Units Sold列输入非零数值后,点击这个按钮,系统会自动将符合条件的商品导入到Invoice工作表中

自定义调整说明

  • 如果你的Products工作表中,售出数量(Units Sold)不在第C列,修改代码中row[2]的索引(列从0开始计数,A=0,B=1,以此类推)
  • 如果Invoice的表头行数不是3行,调整invoiceDataStartRow的值为数据起始行号
  • 可以根据Invoice的样式需求,添加更多格式设置代码(比如字体、边框对齐等)

内容的提问来源于stack exchange,提问作者Kevin D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:01:54