Google Sheets脚本批量隐藏行

3

我目前正在使用这个脚本来隐藏K列中包含0的行。

function Hide() {

    var s = SpreadsheetApp.getActive()
         .getSheetByName('Sheet1');
        s.getRange('K:K')
        .getValues()
        .forEach(function (r, i) {
            if (r[0] !== '' && r[0].toString()
                .charAt(0) == 0) s.hideRows(i + 1)
        });   
}

这段代码运行良好,唯一的问题是当我运行脚本时,它逐行隐藏表格中的内容(现在有很多行,所以需要很长时间)。

是否有一种批量处理的方式?


2个回答

3
这是让魔法发生的脚本。
  function Hide() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Ventas");
  var currentRange = ss.getRangeByName("RangeCalculation");
  var rangeStart = currentRange.getRow();
  var values = currentRange.getValues();

  var index = 0, rows = 1;
  var show = !(values[0][12] == "" );

  for (var i = 1, length = values.length; i < length; i++) {
    if (values[i][0] == 1 ) {
      if (show) {
        sheet.showRows(rangeStart + index, rows);
        show = false;
        index = i;
        rows = 1;
      } else
        rows++;
    } else {
      if (show)
        rows++;
      else {
        sheet.hideRows(rangeStart + index, rows);
        show = true;
        index = i;
        rows = 1;
      }
    }
  }

  if (show)
    sheet.showRows(rangeStart + index, rows);
  else
    sheet.hideRows(rangeStart + index, rows);
}

很好,你分享了你的解决方案。如果你能在粘贴代码的同时包含一些简短的学习描述,那就更好了。顺便说一下,你采纳了我的建议,使用了hideRows(rowIndex, numRows)而不是hideRows(rowIndex) :) - Rubén
@Rubén,我尝试了你的方法,但它运行得和第一个示例一样慢... 你能否解释一下你的方法? - AlexShevyakov
@AlezShevyakov 你需要解释什么?(请在我的回答下发表评论回复) - Rubén

2

不要使用hideRows(rowIndex)方法,而应该使用hideRows(rowIndex, numRows)方法。

第一种方法只使用一个参数rowIndex,而第二种方法使用两个参数rowIndex和numbRows。

显然,使用建议的方法意味着需要重新审视脚本的逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接