如何解决Google Sheets App Script:有条件地隐藏或显示列
我正在尝试根据 A3:A 列中的值隐藏或显示值。
本质上,循环遍历所有工作表,如果 A 列中的值为“HIDE”,则隐藏该行。如果 A 列中的值为“SHOW”,则显示该行。当前从设置页面上的按钮运行它。
- 遍历所有工作表
- 遍历工作表A行的单元格
- 如果单元格包含“HIDE”,则隐藏该行
- 如果单元格包含“SHOW”,则显示该行
- 遍历工作表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
}
}
我也对完全不同的方法持开放态度,只要它根据所有工作表的 A 行中的文本隐藏和显示列即可。
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() 迭代数据的更快方法,但我将把它留给你自己调查
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。