如果前 3 列是隐藏的 Google 表格,则迭代隐藏接下来的 3 列

从第 9 列开始,我想隐藏接下来的 3 列,我已使用以下脚本成功完成了这些列,该脚本将隐藏第 9,10 和 11 列(I、J 和 K)


   function hideEvent() {

      var ss = SpreadsheetApp.getActiveSpreadsheet();

    var sheet = ss.getSheets()[0];

    sheet.hideColumns(9, 3);

    }

但我想做的是隐藏接下来的 3 列,如果第 9-11 列已经隐藏,如果第 12、13、14 列被隐藏,则隐藏接下来的 3 列,依此类推。


我发现您可以使用获取列的隐藏状态,isColumnHiddenByUser(columnPosition)但我不确定如何使用该输出来循环和迭代。


欢迎任何想法。


提前致谢


更新


所以这就是我要感谢@Marios 的地方。我似乎无法理解的一个小问题是我如何start每次重新分配为+3,这样当这个函数含义start将引用第15、18、21、24列等时。


  function Event() {

    const ss = SpreadsheetApp.getActiveSpreadsheet();

    const sheet = ss.getSheets()[0];

    const steps = 3;

    let check = true;

    let start = 12;

    let Ncols = start + 3 ;

  

    while (start<Ncols){

      for(let i=start - steps ; i<start ; i++){

        if (!sheet.isColumnHiddenByUser(i)){

          check = false;

        };

      };

      if(check){  

      sheet.hideColumns(start, steps);

      start = start + 3;

      };

      Logger.log(start); //Produces 15 

      return start;

    };

}

我的另一个解决方案是计算隐藏列的数量,我认为这可能更可靠。因为隐藏列 + 8 将是start


冉冉说
浏览 122回答 3
3回答

拉风的咖菲猫

解决方案计算隐藏列的数量cnt,然后将该计数用作变量的一部分startStart是列索引Steps是 numColumns我向 cnt 添加 9,因为这是我的起始索引或我想要隐藏的第一列function Extra() {&nbsp;const ss = SpreadsheetApp.getActiveSpreadsheet();&nbsp;const sheet = ss.getSheets()[0];&nbsp;const max = sheet.getMaxColumns();&nbsp;let cnt = 0;&nbsp;for (i = 1; i <= max; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (sheet.isColumnHiddenByUser(i)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cnt += 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp;}&nbsp;const steps = 3;&nbsp;let start = cnt + 9; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sheet.hideColumns(start, steps);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;&nbsp; &nbsp; }&nbsp;}感谢此线程中的各位提供的帮助

摇曳的蔷薇

这应该做:function hideEvent() {&nbsp; var ss = SpreadsheetApp.getActiveSpreadsheet();&nbsp; var sheet = ss.getSheets()[0];&nbsp; var lastCol = sheet.getLastColumn();&nbsp;&nbsp;&nbsp; for (var i = lastCol; i > 0;i--){&nbsp; &nbsp; if (sheet.isColumnHiddenByUser(i) == true){&nbsp; &nbsp; &nbsp; sheet.hideColumns(i+1, 3);&nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }&nbsp; }}

青春有我

解决方案:我不确定你的逻辑是否有道理。如果9-11隐藏,则脚本将隐藏12-14。但由于12-14现在被隐藏,脚本将隐藏15-17等等......并且所有其他列将被隐藏为多米诺骨牌。您可以做的就是简单地检查列是否9-11被隐藏。如果它们被隐藏,则隐藏工作表中的其余列:&nbsp;function hideEvent() {&nbsp; &nbsp; const ss = SpreadsheetApp.getActiveSpreadsheet();&nbsp; &nbsp; const sheet = ss.getSheets()[0];&nbsp; &nbsp; const Ncols = sheet.getMaxColumns();&nbsp; &nbsp; let check = true;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (let i=9; i<12; i++){&nbsp; &nbsp;if (!sheet.isColumnHiddenByUser(i)){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; check = false;&nbsp; &nbsp; &nbsp; };&nbsp; &nbsp;if(check){&nbsp; &nbsp; &nbsp;sheet.hideColumns(12,Ncols-12)&nbsp; &nbsp; &nbsp;}&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript