0

このスクリプトを機能させることができないようです。請求目的で使用するテンプレートがあり、そのシートを複製して、毎月末に新しい顧客、契約などの情報を更新しようとしています。「bsf」スプレッドシートのすべての情報が必要ではなく、請求テンプレートで使用された列のみが必要です。私はそれをテストしましたが、すべてが for ループまでは動作しますが、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

マスターからのヘッダーを請求と比較しているように見えますが、マスターからのヘッダーは請求を介してコピーされることはないため、for ループ内では if ステートメントが true に解決されることはありません。最初に行 1 ヘッダーをコピーしてみてください。これにより、if ステートメントのナイス ファイアが許可されるはずです。

于 2016-06-01T00:00:52.437 に答える