2016-08-20 4 views
0

私は既にトリガーセルで異なる値を選択すると、列と行を隠している単純なGoogleスプレッドシートスクリプトを持っています。クリックして基準で行を非表示

function hideColumns() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    sheet.hideColumns(2, 3); // B-D, three columns starting from 2nd 
    sheet.hideColumn(7);  // G, column 7 
} 

function showColumns() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    sheet.showColumns(2, 3); // B-D, three columns starting from 2nd  
    sheet.showColumn(7);  // G, column number 7 
} 

function onEdit(e) { 

    var sheet = e.source.getActiveSheet(); 
    if (e.range.getA1Notation() !== 'B2' || sheet.getName() !== 'sheet1') 
     return; 
    switch (e.value) { 
     case '01': 
      sheet.showColumns(1, sheet.getMaxColumns() - 1) 
      sheet.showRows(1, sheet.getMaxRows() - 1) 
      break; 
     case '02': 
      sheet.showColumns(1, sheet.getMaxColumns() - 1) 
      sheet.showRows(1, sheet.getMaxRows() - 1) 
      sheet.hideColumns(6, 4) 
      sheet.hideRows(12, 1) 
      break; 
     case '03': 
      sheet.showColumns(1, sheet.getMaxColumns() - 1) 
      sheet.showRows(1, sheet.getMaxRows() - 1) 
      sheet.hideColumns(4, 2) 
      sheet.hideColumns(8, 2) 
      sheet.hideRows(12, 1) 
      sheet.hideRows(7, 3) 
      break; 
     case '04': 
      sheet.showColumns(1, sheet.getMaxColumns() - 1) 
      sheet.showRows(1, sheet.getMaxRows() - 1) 
      sheet.hideColumns(4, 4) 
      sheet.hideRows(12, 1) 
      break; 
    } 
} 

今、私は、4つの異なる範囲の正確な行も行だけではないを非表示にする機能を追加したいと思います(のように20-40、30-35、50-60など)の基準に一致します。 "もしこの行の「C」セルは空白または0です。

私は検索を試みましたが、私が私が見つけたコードをどのように実装するか考えていませんでした。

助けてください。

+0

今のところ、特定の色で色を隠す必要があるすべての行があります。私は条件付き書式でそれを作った。だから基本的に今私はこの色ですべての行を隠すことができます。 –

+0

Rodion Zhabrevあなたはコミュニティのルールに従っていません。 – oshliaer

+0

https://plus.google.com/u/0/communities/103356854721490738172に投稿された投稿はありません – oshliaer

答えて

0

あなたのアプローチは包括的ではありません。おもう。

大丈夫だと真を返すフィルタ関数があるとしましょう。

/* 
* v is value of a cell 
* i is current row - 1 
* j is current column -1 
*/ 
function filter(v, i, j) { 
    return v !== '#ff0000' && j == 2; 
} 

また、我々は行hiderを持っています。このように

/* 
* blocks is 2D array. It contains pairs of rows indexes and counts rows for hiding. 
* [[1, 2],[5, 4]] This hides from first row two items, from fifth row four items. 
*/ 
function hiderRows(sheet, blocks) { 
    for (var i = 0; i < blocks.length; i++) { 
     sheet.hideRows(blocks[i][0], blocks[i][1]); 
    } 
    return sheet; 
} 

ブロックビルダーが必要です。やってみましょう!

function blockBilder(sheet, callback, colors) { 
    var cmd = colors ? 'getBackgrounds' : 'getValues'; 
    var values = sheet.getDataRange()[cmd](); 
    var blocks = []; 
    var delta = 0; 
    for (var i = 0; i < values.length; i++) { 
     for (var j = 0; j < values[i].length; j++) { 
      if (callback(values[i][j], i, j)) { 
       if (delta === i - 1) { 
        blocks[blocks.length - 1][1]++; 
       } else { 
        blocks.push([i + 1, 1]); 
       } 
       delta = i; 
      } 
     } 
    } 
    return blocks; 
} 

実行!

function test() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    sheet.showRows(1, sheet.getLastRow() - 1); 
    var blocks = blockBilder(sheet, filter, 'any value here'); 
    hiderRows(sheet, blocks); 
} 
関連する問題