从第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
发布于 2020-11-19 23:28:30
解决方案
start
cnt,然后将此计数用作变量cnt的一部分。Start是columnIndexSteps is numColumns函数Extern外(){ const ()= SpreadsheetApp.getActiveSpreadsheet();const sheet = ss.getSheets();const max = sheet.getMaxColumns();设cnt = 0;for (i = 1;i <= max;i++) { if (sheet.isColumnHiddenByUser(i)) { cnt += 1;} const步骤= 3;}
感谢这条线上的人,谢谢你的帮助
发布于 2020-11-19 19:06:23
这应该可以做到:
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;
}
}
}发布于 2020-11-19 19:08:43
解决方案:
我不确定你的逻辑是否合理。如果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)
}
}
}https://stackoverflow.com/questions/64917348
复制相似问题