Google 表格应用脚本:有条件地隐藏或显示列
Google Sheets App Script: Conditional hide or show columns
我正在尝试根据列 A3:A 中的值隐藏或显示值。
本质上,循环遍历所有sheet,如果A列的值为“HIDE”,则隐藏该行。如果 A 列中的值为“SHOW”,则显示该行。目前 运行 它来自设置页面上的按钮。
- 遍历所有 sheets
- 遍历 sheet 的 A 行单元格
- 如果单元格包含“HIDE”,隐藏该行
- 如果单元格包含“SHOW”,则显示该行
我原来的尝试:
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
}
}
我也愿意接受一种完全不同的方法,只要它根据所有 sheet 行 A 中的文本隐藏和显示列即可。
The Setup Page
Structure of the page where I want to hide columns based on value
**基于答案的固定代码:
/**
* 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() 可以更快地遍历数据,但我会把它留给您自己调查
我正在尝试根据列 A3:A 中的值隐藏或显示值。
本质上,循环遍历所有sheet,如果A列的值为“HIDE”,则隐藏该行。如果 A 列中的值为“SHOW”,则显示该行。目前 运行 它来自设置页面上的按钮。
- 遍历所有 sheets
- 遍历 sheet 的 A 行单元格
- 如果单元格包含“HIDE”,隐藏该行
- 如果单元格包含“SHOW”,则显示该行
- 遍历 sheet 的 A 行单元格
我原来的尝试:
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
}
}
我也愿意接受一种完全不同的方法,只要它根据所有 sheet 行 A 中的文本隐藏和显示列即可。
The Setup Page
Structure of the page where I want to hide columns based on value
**基于答案的固定代码:
/**
* 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() 可以更快地遍历数据,但我会把它留给您自己调查