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

Google Sheets Apps Script批量生成PDF发票时模板空白求助

批量生成发票PDF时模板空白的问题

我已实现两个函数:一个基于发票数据在模板中生成报表,另一个自动将报表下载为PDF。但循环调用这两个函数批量处理多张发票时出现异常,执行后模板数据变为空白。

循环函数代码

function downloadNota() {
  var ws = SpreadsheetApp.getActiveSpreadsheet();
  var xs = ws.getSheetByName('Print Nota');
  var lr = xs.getLastRow();
  var nota = xs.getRange('B2:B' + lr).getValues();
  var number = nota.map(function (r) { return r.toString().replace('\[ | \]', '') });
  number.forEach(function (invoice) {
    printInvoice(+invoice)
  });
  downloadPdf(noInvoice)
}

执行后模板空白情况:
模板空白截图

填充模板数据的printInvoice函数代码

function printInvoice(noInvoice) {
  var ws = SpreadsheetApp.getActiveSpreadsheet();
  var ss = ws.getSheetByName('NOTA INVOICE2');
  var dd = ws.getSheetByName('GABUNGAN');
  ss.getRange('B10').setValue(noInvoice);
  ss.getRange('A14:G120').activate();
  ss.getActiveRangeList().clear({ contentsOnly: true, skipFilteredRows: true })
    .setBackground(null)
    .setBorder(false, false, false, false, false, false)
    .setFontWeight(null)
    .setFontColor(null)
    .breakApart();
  var allData = dd.getRange('A5:S').getValues();
  var dataString = allData.filter(String);
  var listData = dataString.map(function (r) { return r; });
  var neededData = listData.filter(listData => listData[2] === noInvoice);
  var nData = neededData.length;
  var data = [];
  if (!neededData) return;
  for (var i = 0; i < nData; i++) {
    newData = [neededData[i][5], neededData[i][6], neededData[i][8], neededData[i][9], neededData[i][7], (neededData[i][8] - neededData[i][9]) * neededData[i][7]];
    data.push(newData);
  }
  ss.getRange(14, 6, nData, 2).mergeAcross();
  ss.getRange(14, 1, nData, 7).activate();
  ss.getActiveRangeList()
    .setBorder(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID)
  ss.getRange(14, 1, nData + 8, 7).activate();
  ss.getActiveRangeList()
    .setHorizontalAlignment("right");
  ss.getRange(14, 1, nData, 2).activate();
  ss.getActiveRangeList()
    .setHorizontalAlignment("center");
  ss.getRange(14, 5, nData, 1).activate();
  ss.getActiveRangeList()
    .setHorizontalAlignment("center");
  ss.getRange(14 + nData + 1, 2, 4, 1).activate();
  ss.getActiveRangeList()
    .setHorizontalAlignment("left");
  ss.getRange(14 + nData + 5, 1, 1, 7).activate();
  ss.getActiveRangeList().setBorder(true, false, false, false, false, false, '#000000', SpreadsheetApp.BorderStyle.SOLID);
  ss.getRange(14, 1, nData, 6).setValues(data);
  ss.getRange(14 + nData + 2, 1).setValue('Status Pengiriman:');
  ss.getRange(14 + nData + 2, 2).setValue('SUDAH DIKIRIM');
  ss.getRange(14 + nData + 3, 1).setValue('Status Pembayaran:');
  ss.getRange(14 + nData + 3, 2).setValue('PAID');
  ss.getRange(14 + nData + 1, 6).setValue('SUBTOTAL :');
  ss.getRange(14 + nData + 1, 7).setFormulaR1C1("=SUM(R[-2]C[-1]:R[-" + (nData + 1) + "]C[-1])");
  ss.getRange(14 + nData + 2, 6).setValue('DPP :');
  ss.getRange(14 + nData + 2, 7).setFormula('=VLOOKUP(B10,{GABUNGAN!C5:C,GABUNGAN!Q5:Q},2,false)');
  ss.getRange(14 + nData + 3, 6).setValue('PPN (11%) :');
  ss.getRange(14 + nData + 3, 7).setFormula('=VLOOKUP(B10,{GABUNGAN!C5:C,GABUNGAN!R5:R},2,false)');
  ss.getRange(14 + nData + 4, 6).setValue('BIAYA PENGIRIMAN :');
  ss.getRange(14 + nData + 4, 7).setFormula('=VLOOKUP(B10,{GABUNGAN!C5:C,GABUNGAN!N5:N},2,false)');
  ss.getRange(14 + nData + 5, 6).setValue('GRAND TOTAL :');
  ss.getRange(14 + nData + 5, 7).setFormulaR1C1("=SUM(R[-2]C[0]:R[-4]C[0])");
  ss.getRange('B10').activate();
}

期望生成的PDF效果:
期望PDF效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:55:16