Google Sheets脚本while循环帮助

时间:2018-06-26 16:15:31

标签: google-apps-script google-sheets

我正试图在Google表格JavaScript中编写一个包含发票数据库的脚本。我正在尝试创建一种付款方式,使某人可以选择一个供应商并进行批量付款,然后为每张发票分配正确的金额。

我使用了while循环,即使付款工作正常,循环也没有结束,我也不知道为什么。

function makePayment() {

  var dbsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('InvoiceDB');
  var dasheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Dashboard');
  var casheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Calc');
  var amount = dasheet.getRange('I9').getValue();

  while (amount > 0) {
    var range = dbsheet.getRange("B1:B");
    var values = range.getValues();
    var invoiceNo = casheet.getRange('C1').getValue();

    var i = [];
    for (var y = 0; y < values.length; y++) {
      if (values[y] == invoiceNo) {
        i.push(y);
      }
    }

    var Row = Number(i) + Number(range.getRow());

    var outstanding = dbsheet.getRange(Row, 9).getValue();
    var alreadyPaid = dbsheet.getRange(Row, 8).getValue();

    if (amount > outstanding) {
      dbsheet.getRange(Row, 8).setValue(alreadyPaid + outstanding);
      amount = amount - outstanding;
    } else {
      dbsheet.getRange(Row, 8).setValue(amount);
    }

    dasheet.getRange('C9').clearContent();
    dasheet.getRange('I9').clearContent();
  }
}

1 个答案:

答案 0 :(得分:0)

如果amount不大于outstanding,则不会修改amount。如果amount大于outstanding,则amount递减outstanding。由于此时outstanding始终小于amount,因此amount永远不会达到零,并且循环将无限运行,因为您从未在其他任何地方修改amount 。您可能需要修改条件,或者更可能的解决方案是在else子句中对amount进行一些修改,以使amount可以达到零以结束循环。