我从@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()
方法只接受我理解的范围,所以我收到以下错误:
如何修改此脚本以使其隐藏行而不是删除它?
答案 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);
}
}
}
像往常一样,自动完成功能可以让工作更轻松......
要取消隐藏行,我们没有一个带行索引的简单方法,所以我们需要定义范围...代码就像这样(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);
}
}
}