当商品销量非零时自动生成新发票行的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
相关产品推荐
相关产品推荐

