2

我已經爲人們存儲有關寵物小精靈集合數據電子表格模板。人們按照字母和數字排序他們的寵物小精靈主要有兩種方法,我想迎合兩者,以便與其他人的電子表格進行比較。我也想讓人們很容易地隱藏目前沒有收藏的寵物小精靈。問題在於電子表格的大小和數量。更復雜的問題是總結清單頁面,該頁面涉及其數據的大部分其他頁面。更爲複雜的是,我想在數據排序時將數據分爲七個部分,但希望在按字母順序排序時隱藏標題行。我曾嘗試過:谷歌牀單 - 同時多頁的排序和篩選

1)使用腳本遍歷每個工作表並隱藏未在第2列中標記爲「FT」(For Trade)的所有條目(第1列是隱藏索引以便於參考頁的使用)。該表非常大,並且每次隱藏每行一個腳本需要很長的時間,腳本會在完成執行之前超時。如果我隱藏所有這些一次,並顯示在一個時間

2)使用過濾視圖,以便僅查看用戶可以在空閒時間打開和關閉切換他們我想要一個行會發生同樣的問題。這是不理想的,因爲用戶必須單獨切換每個頁面,但即使在檢查表頁面上使用過濾器工作導致它在其他頁面上引用單元格並由此必然在過濾器之外時會中斷,因此必須在過濾器之外

我還沒有嘗試過使用過濾器通過腳本,但我不知道如何做到這一點,而不會破壞清單和它必須引用的無數頁面之間的單元格到單元格的相關性。我曾經通過腳本使用過濾器VIEW進行了研究,但是,API現在還不支持。

下面是一個鏈接到電子表格的副本開放編輯權限。有很多解釋,以便觀察可能是必要的:

https://docs.google.com/spreadsheets/d/1NpsabimIJ4T_ZoeSxaq_dk6ZkIoHey2Dl6U3LGpVTc4/edit?usp=sharing

是否有隱藏沒有標明「金融時報」,不會超時或打破我的公式行的好辦法?以下是我已經嘗試過的腳本耗時太久。他們各自有自己的反轉效應的雙:

function browseMode() { 
    var spreadsheet = SpreadsheetApp.getActive(); 
    var sheets = spreadsheet.getSheets(); 

    var sheet = sheets[2]; 
    var range = sheet.getRange("B3:B392"); 
    var data = range.getValues(); 
    sheet.hideRow(range); 
    for (var i = 0; i < 390; i++) { 
    if (data[i][0] == "FT") sheet.showRows(i+3); 
    } 
    for (var i = 3; i <= 26; i++) { 
    sheet = sheets[i]; 
    range = sheet.getRange("B5:B76"); 
    data = range.getValues(); 
    sheet.hideRow(range); 
    for (var j = 0; j < 72; j++) { 
     if (data[j][0] == "FT") sheet.showRows(j+5); 
    } 
    range = sheet.getRange("B78:B128"); 
    data = range.getValues(); 
    sheet.hideRow(range); 
    for (var j = 0; j < 51; j++) { 
     if (data[j][0] == "FT") sheet.showRows(j+78); 
    } 
    range = sheet.getRange("B130:B192"); 
    data = range.getValues(); 
    sheet.hideRow(range); 
    for (var j = 0; j < 63; j++) { 
     if (data[j][0] == "FT") sheet.showRows(j+130); 
    } 
    range = sheet.getRange("B194:B226"); 
    data = range.getValues(); 
    sheet.hideRow(range); 
    for (var j = 0; j < 33; j++) { 
     if (data[j][0] == "FT") sheet.showRows(j+194); 
    } 
    range = sheet.getRange("B228:B300"); 
    data = range.getValues(); 
    sheet.hideRow(range); 
    for (var j = 0; j < 73; j++) { 
     if (data[j][0] == "FT") sheet.showRows(j+228); 
    } 
    range = sheet.getRange("B302:B339"); 
    data = range.getValues(); 
    sheet.hideRow(range); 
    for (var j = 0; j < 38; j++) { 
     if (data[j][0] == "FT") sheet.showRows(j+302); 
    } 
    range = sheet.getRange("B341:B380"); 
    data = range.getValues(); 
    sheet.hideRow(range); 
    for (var j = 0; j < 40; j++) { 
     if (data[j][0] == "FT") sheet.showRows(j+341); 
    } 
    } 
    sheet = sheets[27] 
    range = sheet.getRange("B3:B104"); 
    data = range.getValues(); 
    sheet.hideRow(range) 
    for (var i = 0; i < 102; i++) { 
    if (data[i][0] == "FT") sheet.showRows(i+3); 
    } 
} 

function sortAlphabetically() { 
    var spreadsheet = SpreadsheetApp.getActive(); 
    var sheets = spreadsheet.getSheets(); 

    var sheet = sheets[1]; 
    sheet.hideRows(4); 
    sheet.hideRows(77); 
    sheet.hideRows(129); 
    sheet.hideRows(193); 
    sheet.hideRows(227); 
    sheet.hideRows(301); 
    sheet.hideRows(340); 
    sheet.getRange("A4:AB380").sort(2); 

    sheets[2].getRange("A3:AG392").sort(3); 

    for (var i = 3; i <= 26; i++) { 
    sheet = sheets[i]; 
    sheet.hideRows(4); 
    sheet.hideRows(77); 
    sheet.hideRows(129); 
    sheet.hideRows(193); 
    sheet.hideRows(227); 
    sheet.hideRows(301); 
    sheet.hideRows(340); 
    sheet.getRange("A4:AB380").sort(3); 
    } 

    sheets[27].getRange("A4:AN104").sort(3); 
} 

感謝您在百忙之中閱讀並請原諒我,如果這是類似於另外一個問題的時候,我是新來的,雖然我搜索論壇類似的問題,並沒有找到任何,我不知道我知道要尋找什麼或如何看待。

回答

0

首先,創建一個地圖hideRows()。使用此地圖,運行hideRows()。由此,我認爲時間和腳本的成本變低。如果我誤解了你的問題,我很抱歉。如果發生錯誤,請告訴我。

你將如何使用約sortAlphabetically()

示例腳本:

function browseMode(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets(); 
    for (var s=3; s<sheets.length; s++) { 
    var sheet = ss.getSheets()[s]; 
    try { 
     var data = sheet.getRange(1, 2, sheet.getLastRow(), 1).getValues(); 
    } catch(e) {} // If there are no data in the sheet, do nothing. 
    var c1 = 0; 
    var hrow = []; 
    data.forEach(function(e, i){ // Here, create a map for hiding rows. 
     if (e[0]) { 
     hrow.push([(c1 + 1), (i - c1)]); 
     c1 = i + 1; 
     } 
    }); 
    [sheet.hideRows(i[0], i[1]) for each (i in hrow) if(i[1]>0)]; // Here, rows are hidden using the map. 
    } 
} 
+0

我花了一些時間來了解到底發生了什麼事情,但肯定的!這工作速度要快得多。我確實需要改變一次。它正在離開需要隱藏可見的最後一組行。循環後,我不得不添加hrow.push([(c1 + 1),(data.length - c1)]); –

+0

我一直擔心腳本是否有效。如果它對你有幫助,我很高興。 – Tanaike