为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

冉冉说 2023-08-18 10:05:54
从第 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
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

解决方案

  • 计算隐藏列的数量cnt,然后将该计数用作变量的一部分start

  • Start是列索引

  • Steps是 numColumns

  • 我向 cnt 添加 9,因为这是我的起始索引或我想要隐藏的第一列

function Extra() {

 const ss = SpreadsheetApp.getActiveSpreadsheet();

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

 const max = sheet.getMaxColumns();

 let cnt = 0;

 for (i = 1; i <= max; i++) {

         if (sheet.isColumnHiddenByUser(i)) {

                 cnt += 1;

         }

 }

 const steps = 3;

 let start = cnt + 9; {

         sheet.hideColumns(start, steps);

         return;

    }

 }

感谢此线程中的各位提供的帮助


查看完整回答
反对 回复 2023-08-18
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

这应该做:


function hideEvent() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

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

  var lastCol = sheet.getLastColumn();

  

  for (var i = lastCol; i > 0;i--){

    if (sheet.isColumnHiddenByUser(i) == true){

      sheet.hideColumns(i+1, 3);

      break;

    }

  }

}


查看完整回答
反对 回复 2023-08-18
?
青春有我

TA贡献1784条经验 获得超8个赞

解决方案:

我不确定你的逻辑是否有道理。如果9-11隐藏,则脚本将隐藏12-14。但由于12-14现在被隐藏,脚本将隐藏15-17等等......并且所有其他列将被隐藏为多米诺骨牌。您可以做的就是简单地检查列是否9-11被隐藏。如果它们被隐藏,则隐藏工作表中的其余列:


 function hideEvent() {

    const ss = SpreadsheetApp.getActiveSpreadsheet();

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

    const Ncols = sheet.getMaxColumns();

    let check = true;

    

   for (let i=9; i<12; i++){

   if (!sheet.isColumnHiddenByUser(i)){

          check = false;

      };

   if(check){

     sheet.hideColumns(12,Ncols-12)

     }    

   }

 }


查看完整回答
反对 回复 2023-08-18
  • 3 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信