2016-04-16 198 views
1

我在Google Apps腳本中編寫腳本。方法「moveActiveSheet」在Google Apps腳本(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); 
    } 

我把板材,應在第一位置的最後一個位置,那麼下一個在最後的位置,依此類推,直到在列表中的姓氏。最後,第一個實際上是第一個。 (我希望這是可以理解的;-)

相關問題