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

Google Apps Script PDF打印适配纯数字发票号问题

解决纯数字发票号与代码类型不匹配的打印问题

问题核心是类型不匹配:用户输入的发票号是字符串格式(比如"1"),而数据库中读取的纯数字是Number类型(比如1),两者用includes()对比时会判定为不相等,导致无法匹配到目标发票。

解决方案:统一数据类型

有两种可行的修改方向,任选其一即可:

方向1:将用户输入的字符串转为数字

修改promptUserToSelectInvoices函数中处理输入的部分,把分割后的字符串转为数字类型,同时过滤无效输入:

function promptUserToSelectInvoices(data) {
  var selectedInvoices = [];
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt('Select Invoices to Print', 'Enter the invoice numbers separated by commas:', ui.ButtonSet.OK_CANCEL);
  
  if (response.getSelectedButton() === ui.Button.OK) {
    var input = response.getResponseText().trim();
    Logger.log(input)
    selectedInvoices = input.split(',').map(function(value) {
      // 去除空格并转为数字,非数字输入转为null
      var num = Number(value.trim());
      return isNaN(num) ? null : num;
    }).filter(Boolean); // 过滤掉无效的非数字项

    if (selectedInvoices.length > 0) {
      PrintSelectedToPDF(selectedInvoices);
    } else {
      ui.alert('请输入有效的纯数字发票号,用逗号分隔');
    }
  }
}

方向2:将数据库读取的数字转为字符串

修改PrintSelectedToPDF函数中读取数据库值的部分,把数字转为字符串:

function PrintSelectedToPDF(invoicesToPrint) {
  var spreadsheet = SpreadsheetApp.getActive();
  var databaseSheet = spreadsheet.getSheetByName('Database');
  var invoiceSheet = spreadsheet.getSheetByName('Invoice');
  
  var dataRange = databaseSheet.getRange(3, 12, databaseSheet.getLastRow() -2, 1);
  var data = dataRange.getValues();
  
  for (var i = 0; i < data.length; i++) {
    // 将数据库中的数字转为字符串,和用户输入的格式统一
    var valueToPrint = String(data[i][0]);
    Logger.log(valueToPrint);
    
    // 现在类型一致,includes可以正确匹配
    if (invoicesToPrint.length === 0 || invoicesToPrint.includes(valueToPrint)) {
      invoiceSheet.getRange('Q7').setValue(valueToPrint);
      
      var url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';
      var params = {
        exportFormat: 'pdf',
        format: 'pdf',
        size: 'letter',
        portrait: 'true',
        fitw: 'true',
        sheetnames: 'false',
        printtitle: 'false',
        top_margin: 0,
        bottom_margin: 0,
        left_margin: 0,
        right_margin: 0,
        gid: invoiceSheet.getSheetId()
      };
      
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var range = ss.getRange("invoice!A1:V41");
      var rangeParam = '&range=' + range.getA1Notation();
      url += getUrlParams(params) + rangeParam;
      
      var backoffTime = 500;
      var maxBackoffTime = 5000;
      var attempts = 0;
      var response;
      // 剩余PDF导出逻辑继续...
    }
  }
}

额外提示

  • 如果选择方向1,建议保留输入验证逻辑,避免用户输入非数字内容导致后续出错。
  • 确保getUrlParams函数能正常处理参数拼接,这是PDF导出的关键步骤。

内容的提问来源于stack exchange,提问作者Luis Fernando Álvarez Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:55:13