如何将数字传递给.hideRow()?

时间:2018-03-22 11:27:39

标签: google-apps-script google-sheets

我从@Mike Grace's website获得了以下脚本:

// Deletes rows in the active spreadsheet that contain 'Yes' in column A
function readRows() { 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var rows = sheet.getDataRange(); 
  var numRows = rows.getNumRows(); 
  var values = rows.getValues(); 

  var rowsDeleted = 0; 
  for (var i = 0; i <= numRows - 1; i++) { 
    var row = values[i];
    if (row[0] == 'Yes') { 
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++; 
    } 
  } 
}

该脚本效果很好,但我想对其进行更改,而不是调用.deleteRow()我想改用.hideRow()

因为.hideRow()方法只接受我理解的范围,所以我收到以下错误:

error message

如何修改此脚本以使其隐藏行而不是删除它?

1 个答案:

答案 0 :(得分:1)

有不同的hideRow / s()方法,one of them takes a row number as argument

您的代码可以像这样简化:

function hideRowsWithYes() { 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var values = sheet.getDataRange().getValues(); 

  for (var i = 0; i < values.length; i++) { 
    if (values[i][0] == 'Yes') { 
      sheet.hideRows(1+i);
    } 
  } 
}

像往常一样,自动完成功能可以让工作更轻松......

enter image description here

编辑以下评论:

要取消隐藏行,我们没有一个带行索引的简单方法,所以我们需要定义范围...代码就像这样(i+1因为值是一个数组从0开始,而sheets从1)索引

function unHideRows() { 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var values = sheet.getDataRange().getValues(); 
  var row;
  var maxCol = sheet.getMaxColumns();
  for (var i = 0; i < values.length; i++) { 
    if (values[i][0] == 'Yes') { 
      row = sheet.getRange(1+i, 1, 1, maxCol);
      sheet.unhideRow(row);
    } 
  } 
}