2016-04-16 19 views
1

Google Apps Scriptにスクリプトを作成しています。メソッド「moveActiveSheet」がGoogle Apps Script(JavaScript)で期待どおりに動作しません

目標:Googleスプレッドシートのシート/タブを、各シートの名前の日付で並べ替えることができます。

function sorter() { 
    var sp = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = sp.getSheets(); 
    var sheet_metadata = get_and_sort_sheet_metadata(sheets) 
    for(var j = 0; j < sheet_metadata.length; j++) { 
    sp.setActiveSheet(sp.getSheetByName(sheet_metadata[j].name)); 
    sp.moveActiveSheet(j + 1);  
    } 
} 

これはsheet_metadataのコンテンツの例である:

[{date=false, name=A, index=1}, {date=false, name=B, index=2}, {date=1.391058E12, name=ARCHIVE: xname0 name: 1/30/2014 ID:145952, index=8}, {date=1.42173E12, name=ARCHIVE: zname1 name: 1/20/2015 ID:1459527232, index=7}, {date=1.4543892E12, name=ARCHIVE: wname3 name: 2/2/2016 ID:145952723299, index=6}, {date=1.4544756E12, name=ARCHIVE: dname4 name: 2/3/2016 ID:145952723266, index=5}, {date=1.454562E12, name=ARCHIVE: qname5 name: 2/4/2016 ID:1459500, index=4}, {date=1.4546484E12, name=ARCHIVE: qname6 name: 2/5/2016 ID:1459500, index=3}] 

日付値).getTime(の結果です。名前はシートの名前です。インデックスはシートの元のインデックスです。この配列内のオブジェクトの順序は、シートが配置される順序です。

sheet_metadataのオブジェクトの順序は常に正しいです。しかし、forループ(上記を参照)はシートを正しい順序で配置することができません。

つまり、シートの最終的な順序は、sheet_metadataのシートデータの順序と一致しません。

なぜこれは機能しませんか?

答えて

1

私は数日前に同じ問題があったと私はそれが、このコードでの作業を取得する方法を発見:私が望むようにソートされたこの例のprofSheetsで

は、シート名の配列です。

var pos = ss.getNumSheets(); 
    for(var s=0 ; s < profSheets.length ; s++){ 
    var sh = ss.setActiveSheet(ss.getSheetByName(profSheets[s])); 
    SpreadsheetApp.flush(); 
    Utilities.sleep(200); 
    ss.moveActiveSheet(pos); 
    SpreadsheetApp.flush(); 
    Utilities.sleep(200); 
    } 

は私が最後の位置、最後の位置で、次の1というように、リスト内の最後の名前までに最初の位置にあるべきシートを配置します。最後に、最初のものが実際に最初の場所にあります。 (私はこれが理解できることを望みます;-)

関連する問題