0

このスクリプトを動作させることはできません。私は請求のために使用するテンプレートを持っており、そのシートを複製してから、毎月末に新しい顧客、契約書などの情報を更新しようとしています。 「bsf」スプレッドシートのすべての情報は必要ではなく、請求テンプレートに使用された列のみが必要です。私はそれをテストし、全てがforループを含むがそれを含まない。そこに何かが結ばれています。2つのGoogleスプレッドシートのヘッダー値を比較し、一致する場合は列全体を貼り付けます。

forループでは、各列を繰り返して把握し、テンプレート文書のヘッダーとBSFドキュメントを比較し、一致する場合は列全体を新しい請求書類に貼り付けます。そうでない場合は、次の列に移動して同じことをしたいと思います。私は、次の取得Logger.log(data)billing HeadermasterHeaderを置くとき

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); 
    } 
    } 
} 

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

私は、配列か何かを宣言する必要があると思いますが、私は本当に知りません。私は配列を追加しようとしましたが、私が扱っているオブジェクトでうまく動作していないようです。

+0

'.getValues()'の両方のインスタンスを '.getValue()'に変更します。また、(おそらくあなたが尋ねなかった質問に対する)答えは、 '.getDataRange()。getValues()'といっしょにすべてのデータを最初に取得し、結果の2D配列を反復処理する方がはるかに優れています。 – AdamL

+0

私はこれを試しただけでなく、forループの前にbillingHeaderを書いていますが(Bobby Sの示唆したように)、動作しません。 masterHeaderとbillingHeaderの変数宣言の後に2つの 'getValues()'があるだけですか? 私は更新されたコードで最初の質問を更新します。あなたのコメントを残しておきます: 'getDataRange()。getValues()'を覚えておいてください!これは実際に私のコーディングの最初の試みです。 – Grandin

答えて

0

マスターから請求までのヘッダーを比較しているようですが、マスターからのヘッダーは請求の対象に決してコピーされないため、forループ内でifステートメントは真に解決されません。行1のヘッダーを先にコピーしてみてください。それはifステートメントが素敵な火を可能にするはずです。

+0

私はこれを試してもまだ動作していません。一番上の列は成功裏に持ち越されていますが、それ以外は何も記入されていません。 – Grandin

関連する問題