0

我似乎无法让这个脚本工作。我有一个用于计费目的的模板,我正在尝试克隆该表,然后在每个月底更新新客户、合同等的信息。我不想要“bsf”电子表格中的所有信息,而只想要我的计费模板中使用的列。我对其进行了测试,一切正常,但不包括 for 循环。里面的东西出了问题。

使用 for 循环,我试图循环浏览每一列,抓取它,将我的模板文档中的标题与 BSF 文档进行比较,如果它们匹配,则将整个列粘贴到我的新帐单文档中。如果不是,我希望它移至下一列并执行完全相同的操作。

function newBillingDoc() {
  var billingTemplate = SpreadsheetApp.getActiveSpreadsheet();
  var destFolder = DriveApp.getFolderById("0B1U5evaRId6xYi1rNGhZbUtBV0U");
  var newId = DriveApp.getFileById(billingTemplate.getId()).makeCopy("billing doc template", destFolder).getId();
  var billingMaster = SpreadsheetApp.openById(newId).getSheetByName('2016 Master');
  billingMaster.clearContents();

  var bsf = SpreadsheetApp.openById('1qKaZXpCk7Vw3uvRNft8Cl4vuCC_6PMRR9xyc2tNE7Cc').getSheetByName('Copy of 2016 Master');
  var lastRow = bsf.getLastRow();
  var lastColumn = bsf.getLastColumn();
  var billingHeader = billingTemplate.getSheetByName('2016 Master').getRange('A1:J1').getValue();
  billingMaster.getRange('A1:J1').setValue(billingHeader);

for(var j = 1; j < lastColumn; j++); {
    var billingBody = billingMaster.getRange(1, j, lastRow, 1);
    billingHeader = billingTemplate.getSheetByName('2016 Master').getRange(1, j, 1, 1).getValue();
    var masterHeader  = bsf.getRange(1, j, 1, 1).getValue();
    if (billingHeader == masterHeader) {
      var billingBodyChunk = bsf.getRange(1, j, lastRow, 1).getValues();
      billingBody.setValues(billingBodyChunk);
    }
  }
}

当我投入时,billing Header我得到以下信息:masterHeaderLogger.log(data)

[16-05-31 16:01:15:403 PDT] [[]]
[16-05-31 16:01:15:403 PDT] [[Percentage]]

我认为我需要声明一个数组或其他东西,但我真的不知道。我尝试添加数组,但它似乎不适用于我正在使用的对象。

4

1 回答 1

0

看起来您正在比较 master 和 billing 的标头,但是 master 的标头永远不会被复制到 billing 中,因此在您的 for 循环中,if 语句永远不会解析为 true。尝试先复制第 1 行标题。那应该允许 if 语句很好地触发。

于 2016-06-01T00:00:52.437 回答