2016-05-04 6 views
1

*文法配列のスクリプトの機能を減らすにはどうすればいいですか?

私は必要な機能を達成することができましたが、それは私が望むよりもマニュアルです - 私はいくつかの異なる機能を実行して、完全な配列。さらに、これを汎用スクリプトにしたいのであれば、getActive()ではなくgetID( "ENTER ID")を使用するだけですか?

誰でも、下のスクリプトをトリミングするのに役立ちますか(約20枚続きます)?

function CopyDispatchWithHeaders(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var source = ss.getSheets()[1]; 
    var range = source.getRange("B3:AB400"); 

    range.copyValuesToRange(0, 1, 27, 1, 500); 
} 

function CopyDispatchReport1() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet1 = ss.getSheets()[2]; 
    var sheet2 = ss.getSheets()[0]; 

    sheet1.getRange("B4:AB500").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,500,27), {contentsOnly:true}); 

}

function CopyDispatchReport2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet1 = ss.getSheets()[3]; 
    var sheet2 = ss.getSheets()[0]; 

    sheet1.getRange("B4:AB500").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,500,27), {contentsOnly:true}); 
} 

答えて

1

あなたはすべてのあなたのCopyDispatchReport1()CopyDispatchReport2()となどを置き換えることができます...これを持つ関数:

var 
    map = [{sheet1: 2, sheet2: 0},{sheet1: 3, sheet2: 0}], 
    i, 
    runner; 

for (i in map) { 

    (function(obj) { 

    var 
     ss, 
     sheet1, 
     sheet2; 

    ss = SpreadsheetApp.getActiveSpreadsheet(); 
    sheet1 = ss.getSheets()[obj.sheet1]; 
    sheet2 = ss.getSheets()[obj.sheet1]; 

    sheet1.getRange("B4:AB500").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,500,27), {contentsOnly:true}); 

    })(map[i]); 
} 

まず、あなたは、オブジェクトのマップ(配列を作成する必要があります私たちの場合)、あなたのシートに必要なIDを保存します。次に、マップを反復して、sheet1sheet2のプロパティを持つオブジェクトを受け取る無名関数を呼び出すことができます。

このマップには任意のパラメータを追加できます。たとえば:B4:AB500

は、私たちのマップを変更できます:

map = [{sheet1: 2, sheet2: 0, range: 'B4:AB500'},{sheet1: 3, sheet2: 0, range: 'B6:AB500'}] 

sheet1.getRange(obj.range).copyTo... 
+0

こんにちはアリ、申し訳ありませんが、私はまだ、アレイの作成について少しは不明です。私はforループを作成する必要があることを理解していますが、それを行う方法は不明です。助けてもらえますか? –

関連する問題