Javascript 如果前3列是隐藏的google工作表,则迭代隐藏下3列

Javascript 如果前3列是隐藏的google工作表,则迭代隐藏下3列,javascript,google-apps-script,google-sheets,google-sheets-api,Javascript,Google Apps Script,Google Sheets,Google Sheets Api,从第9列开始,我想隐藏接下来的3列,我已经使用下面的脚本成功地完成了这3列,该脚本将隐藏第9、10和11列(I、J和K) 但是我想做的是隐藏接下来的3列,如果第9-11列已经被隐藏,如果第12、13、14列被隐藏,那么隐藏接下来的3列,依此类推 function Event() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheets()[0]; const steps

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

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

  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;
    };
}
我发现可以使用
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;
    };
}
函数事件(){
const ss=SpreadsheetApp.getActiveSpreadsheet();
const sheet=ss.getSheets()[0];
常数步长=3;
让check=true;
让start=12;
设Ncols=start+3;
当(开始时,应执行以下操作:

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;
    }
  }
}
解决方案: 我不确定您的逻辑是否合理。如果
9-11
被隐藏,那么脚本将隐藏
12-14
。但是由于
12-14
现在被隐藏,脚本将隐藏
15-17
等。并且每隔一列都将作为domino隐藏。您可以做的只是检查
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)
     }    
   }
 }
函数hideEvent(){
const ss=SpreadsheetApp.getActiveSpreadsheet();
const sheet=ss.getSheets()[0];
const Ncols=sheet.getMaxColumns();
让check=true;
对于(设i=9;隔离
  • 计算隐藏列数
    cnt
    ,然后将此计数用作变量
    start

  • Start
    是列索引

  • 步骤
    是numColumns

  • 我将9添加到cnt,因为这是我的开始索引或我要隐藏的第一列

     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;
        }
     }
    
    函数额外(){
    const ss=SpreadsheetApp.getActiveSpreadsheet();
    const sheet=ss.getSheets()[0];
    const max=sheet.getMaxColumns();
    设cnt=0;
    
    对于(i=1;实际上我不确定您的逻辑是否合理。如果
    9-11
    被隐藏,那么脚本将隐藏
    12-14
    。但是由于
    12-14
    现在被隐藏,脚本将隐藏
    15-17
    等。并且每隔一列都将作为domino隐藏。@Marios我有一个按钮,我希望用户单击以隐藏t他将显示下3列,但如果有意义,则只显示下3列。当下一个用户出现时,他们将隐藏前一个用户的3列etc@Marios我刚刚更新了这个问题,以适应一个新的逻辑嘿,这看起来和我的想法差不多。但它似乎不起作用。你添加的一件事让我感到惊讶的是最后一篇专栏文章请记住,这张表的列一直到QD@remcoe33。你为什么决定使用上一列?它看起来是真/假。如果你隐藏4-9,在4上这是真的,那么隐藏下一个3将没有任何好处。对不起,我不太明白,我已经更新了问题以显示我的进度哇,与我的想法完全不同。但我猜它是有效的,唯一的我的问题是它反复运行。我希望它运行一次,并在每次单击按钮时隐藏下3个。您编辑/更新的更正似乎不起作用all@unstacked55当你说某个东西不起作用时,解释什么东西不起作用。你看到任何错误了吗?正如我在回答中所解释的,代码会隐藏错误所有三列9-11都隐藏时的其余列。如果要每次手动运行,则需要手动选择限制。忽略
    Ncols
    ,并使用硬拷贝编号。@unstacked55,就像我已经说过多次的那样。确保9-11列被隐藏。可以确认9-11列被隐藏,对不起,我应该告诉我提及that@Marios特别感谢您和您在这里的其他问答帖子,我看到您为我们贡献了这么大的荣誉。很高兴我能够帮助您:)考虑一下帮助您找到解决方案的投票答案:)