2016-11-21 93 views
-1

我需要是/ B2中隱藏在Budget_01表中的所有行沒有字段0的地方是在B列中發現例如在表Budget_01觸發腳本onEdit隱藏零時[B2] = 「否」 的所有行取消隱藏隱藏行於谷歌表

Budget_01 
Hide Zero|No 
Expense | Amount | Frequency 
Car loan 500.00 1 
Gas  0  0 
Music  0  1 
Supplies 50  20 
.... 
Books  0  0 

BUDGET_01表隱藏ZERO [B2] = 「是」,其中列B = $ 0位隱身

Budget_01 
Hide Zero|Yes 
Expense | Amount | Frequency 
Car loan 500.00 1 
Supplies 50  20 

所有行。這是我的嘗試那不起作用:

function toggleRows() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Budget 01"); 
    var cellValue = sheet.getRange("B2").getValue(); 
    var sheets = ss.getSheets(); 

     if(cellValue == 'No'){ 
      for(var i = 0, iLen = sheets.length; i < iLen; i++) { 
      // get sheet 
      var sh = sheets[i]; 

      // unhide rows 
      var rRows = sh.getRange("A1:A"); 
      sh.unhideRow(rRows); 
      } 

     } 

     if(cellValue == 'Yes'){ 
      ss.showRows(1, ss.getMaxRows()); 
      ss.getRange('B1:B') 
       .getValues() 
      .forEach(function (r, i) { 
       if (r[0] !== '' && r[0].toString() 
        .charAt(0) == 0) ss.hideRows(i + 1) 
      }); 
     } 
    } 
+0

您需要在腳本編輯器中設置表單觸發器。資源>觸發器>添加新的。將其設置爲開啓編輯。 – Brian

+0

謝謝,我設置了觸發器,但我沒有得到隱藏B列顯示$ 0的行的效果。 –

+0

關閉蝙蝠,你有'var i'設置在循環中,但是隨後調用'iLen'而不需要在任何地方定義它,停止循環。 – Brian

回答

1

而不是使用是/否下拉推出我插在兩個圖形按鈕標記腳本(插入>繪圖方形按鈕)與肯定和否定。我公司推出這兩個函數從每個按鈕:

function hide01Rows() { 
    // set up spreadsheet and sheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(), sheets = ss.getSheets(); 

    for(var i = 0, iLen = sheets.length; i < iLen; i++) { 
    // get sheet 
    var sh = sheets[i]; 

    sh.showRows(1, sh.getMaxRows()); 
    sh.getRange('B:B') 
     .getValues() 
    .forEach(function (r, i) { 
     if (r[0] !== '' && r[0].toString() 
      .charAt(0) == 0) sh.hideRows(i + 1) 
    }); 
    } 
} 

function unhide0Rows() { 
    // set up spreadsheet and sheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(), sheets = ss.getSheets(); 

    for(var i = 0, iLen = sheets.length; i < iLen; i++) { 
    // get sheet 
    var sh = sheets[i]; 

    // unhide rows 
    var rRows = sh.getRange("A:A"); 
    sh.unhideRow(rRows); 
    } 
} 

這還不是最優雅的解決方案,但它確實是我所需要的。

0

請將toggleRows()的函數名更改爲onEdit(),並將B1的「否」更改爲「是」。由此,當編輯電子表格時,Budget_01 - 非隱藏變爲Budget_01 - 隱藏。如果我的解釋錯了,請告訴我。

+0

謝謝。我不是很清楚。抱歉。我編輯了我上面的解釋。任何幫助,將不勝感激。 –

0

我沒有使用forEach,而是使用else if語句來遍歷Yes條件。

function onEdit() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Sheet1");   // Change for your sheet 

    // Check the condition 
    var cellValue = sheet.getRange("B1").getValue(); 

    // To hide/unhide, you need a range, not the value. Split into to variables. 
    var range = sheet.getDataRange(); 
    var values = range.getValues(); 

    // Check the data being returned 
    Logger.log(cellValue); 
    Logger.log(values); 

    // If "No," unhide the entire range. 
    if(cellValue == "No" || "no") { 
    for(var i = 0; i < values.length; i++) { 
     Logger.log("Unhide all rows."); 
     sheet.unhideRow(range); 
    } 

    // If "Yes," loop through the data looking for 0's and hide the range. 
    } else if (cellValue == "Yes" || "yes") { 
    for(var i=0; i<values.length;i++) { 
     if(values[i][1] == 0) { 
     Logger.log("Found 0 at row " + i); 
     sheet.hideRow(sheet.getRange(i+1,1)); 
     } 
    } 
    } 
}