我试图根据列A3:A中的值隐藏或显示值。
本质上,循环浏览所有工作表,如果A列中的值为“ HIDE”,则隐藏该行。并且如果列A中的值为“ SHOW”,则显示该行。当前从设置页面上的at按钮运行。
我最初的尝试:
function fourthTry(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var rowsToCheck = 198;
var columnsToCheck = 1;
// ** Loop Through every sheet **
for (var i = 0; i < sheets.length; i++ ){
Logger.log("i: " + i)
var activeSheet = ss.getActiveSheet();
// ** Loop through every cell in Row A **
for (var j=0; j < rowsToCheck ; j++){
Logger.log("j: " + j);
var range = activeSheet.getRange(rowsToCheck,columnsToCheck);
var rangeValue = range.getValue();
Logger.log("rangeValue: " + rangeValue);
// IF cell contains HIDE, hiderow
if(rangeValue == "HIDE"){
Logger.log("Hidden value: " + rangeValue);
}
// IF cell contains SHOW, showrow
}
}
我也愿意采用一种完全不同的方法,只要它根据所有工作表的A行中的文本隐藏和显示列即可。
**基于答案的固定代码:
/**
* TITLE:
* Hide a row if row 1 contains the text "HIDE"
* Show a row if row 1 contains the text "SHOW"
*/
function UpdateCategories(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
// ** Loop Through every sheet **
for (var i = 0; i < sheets.length; i++ ){
var lastRow = sheets[i].getLastRow();
var activeSheet = sheets[i];
Logger.log("===== " + activeSheet.getSheetName() + " =====");
// ** Loop through every cell in Row A **
for (var j=1; j < lastRow ; j++){
var range = activeSheet.getRange(j,1);
var rangeValue = range.getValue();
//Logger.log(j + ". " + rangeValue);
// IF cell contains HIDE, hiderow
if(rangeValue == "HIDE"){
//Logger.log(j + ". " + rangeValue);
activeSheet.hideRows(j);
}
if(rangeValue == "SHOW"){
//Logger.log(j + ". " + rangeValue);
activeSheet.showRows(j);
}
// IF cell contains SHOW, showrow
}
}
}
您的问题在这里: var range = activeSheet.getRange(rowsToCheck,columnsToCheck);
总是这样,var range = activeSheet.getRange(lastrow,1);
但是需要遍历所有行。因此它必须是这样的:
var range = activeSheet.getRange(i+startrow,1);
无论您的起始行是用于数据。有一些更快的方法可以使用setValues()遍历数据,但我将留给您自己研究
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句