Javascript 如果前3列是隐藏的google工作表,则迭代隐藏下3列
从第9列开始,我想隐藏接下来的3列,我已经使用下面的脚本成功地完成了这3列,该脚本将隐藏第9、10和11列(I、J和K) 但是我想做的是隐藏接下来的3列,如果第9-11列已经被隐藏,如果第12、13、14列被隐藏,那么隐藏接下来的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
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特别感谢您和您在这里的其他问答帖子,我看到您为我们贡献了这么大的荣誉。很高兴我能够帮助您:)考虑一下帮助您找到解决方案的投票答案:)