このスクリプトを動作させることはできません。私は請求のために使用するテンプレートを持っており、そのシートを複製してから、毎月末に新しい顧客、契約書などの情報を更新しようとしています。 「bsf」スプレッドシートのすべての情報は必要ではなく、請求テンプレートに使用された列のみが必要です。私はそれをテストし、全てがforループを含むがそれを含まない。そこに何かが結ばれています。2つのGoogleスプレッドシートのヘッダー値を比較し、一致する場合は列全体を貼り付けます。
forループでは、各列を繰り返して把握し、テンプレート文書のヘッダーとBSFドキュメントを比較し、一致する場合は列全体を新しい請求書類に貼り付けます。そうでない場合は、次の列に移動して同じことをしたいと思います。私は、次の取得Logger.log(data)
にbilling Header
とmasterHeader
を置くとき
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]]
私は、配列か何かを宣言する必要があると思いますが、私は本当に知りません。私は配列を追加しようとしましたが、私が扱っているオブジェクトでうまく動作していないようです。
'.getValues()'の両方のインスタンスを '.getValue()'に変更します。また、(おそらくあなたが尋ねなかった質問に対する)答えは、 '.getDataRange()。getValues()'といっしょにすべてのデータを最初に取得し、結果の2D配列を反復処理する方がはるかに優れています。 – AdamL
私はこれを試しただけでなく、forループの前にbillingHeaderを書いていますが(Bobby Sの示唆したように)、動作しません。 masterHeaderとbillingHeaderの変数宣言の後に2つの 'getValues()'があるだけですか? 私は更新されたコードで最初の質問を更新します。あなたのコメントを残しておきます: 'getDataRange()。getValues()'を覚えておいてください!これは実際に私のコーディングの最初の試みです。 – Grandin