比较2个Google表格文档中的标题值,如果匹配则粘贴整个列

时间:2016-05-31 23:11:20

标签: google-apps-script google-sheets google-sheets-api

我似乎无法让这个脚本工作。我有一个模板,我用它来计费,我试图克隆该表,然后在每个月末更新新客户,合同等的信息。我不想要" 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 HeadermasterHeader放入Logger.log(data)时,我会得到以下内容:

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

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

1 个答案:

答案 0 :(得分:0)

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