[英]Google Script to autohide empty cells, should refresh?
所以我想自动隐藏完全空的行。 有了代码,当我仍然希望显示带有N / A的列和行时,它可以自动隐藏所有带有空A列的内容,请参阅屏幕快照#1。 我还希望它更新onOpen或onChange并“取消隐藏”以前具有值的空行。 通过这个,我的意思是这个电子表格是基于另一个电子表格的查询和导入范围,而该电子表格仅提取某些列。 因此,另一个工作表是要编辑的工作表,并且此工作表使用importrange更新。 因此,如果将某些内容添加到先前为空的行中(出于此电子表格的目的,这是对个人的分配),我希望它取消隐藏现在也包含数据的行。
此外,这仅在我具有“编辑”功能的登录名时才起作用,而在仅查看且公众可访问的情况下则无法使用。
屏幕截图#1(显示所有行)
屏幕截图2(隐藏“空白”行)
屏幕快照3(仅查看模式不会使用脚本更新)
这是通过隐藏空行来清理格式。 通过寻找解决方案,我已经取得了进展,但步入僵局。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
function onOpen() {
var menuEntries = [];
menuEntries.push({name: "Show All Rows", functionName: "showAllRows"});
menuEntries.push(null);
menuEntries.push({name: "Hide Empty Rows", functionName: "hideEmptyRows"});
ss.addMenu("Row Visibility", menuEntries);
}{
//get the values to those rows
var values = range.getValues();
//go through every row
for (var i=0; i<values.length; i++){
//if row value is equal to empty
if(values[i][0] === ""){
//hide that row
sheet.hideRows(i+1);
}
}
}
function showAllRows(){
sheet.showRows(1,sheet.getLastRow());
}
function hideEmptyRows(){
//get the values to those rows
var values = range.getValues();
//go through every row
for (var i=0; i<values.length; i++){
//if row value is equal to empty
if(values[i][0] === ""){
//hide that row
sheet.hideRows(i+1);
}
}
}
我仍然希望显示N / A的列和行
您当前的代码
if(values[i][0] === ""){
//hide that row
sheet.hideRows(i+1);
}
如果第一列中的单元格为空,则隐藏整个行。 要仅在所有单元格为空时隐藏该行,您需要遍历所有单元格:
function hideEmptyRows(){
//go through every row
for (var i=0; i<values.length; i++){
var empty=true;
//go through every column
for (var j=0; j<values[0].length; j++) {
if(values[i][j] != ""){
empty=false;
break;
}
}
if(empty == true){
//hide that row
sheet.hideRows(i+1);
}
}
}
这仅在我具有“编辑”功能登录时才起作用,而在仅查看时不起作用
正如您可以验证查阅文档的“ 限制”部分一样,不幸的是,如果以只读(查看或评论)模式打开文件 ,则简单触发器和可安装触发器都不会运行。
我还希望它更新onOpen或onChange并“取消隐藏”以前具有值的空行。
不幸的是,无法以编程方式(通过查询)对工作表进行更改: 脚本执行和API请求不会导致触发器运行。
但是,您仍然可以先取消隐藏onOpen()
所有行,然后隐藏空行。 为此,您只需要将函数showAllRows()
和hideEmptyRows()
嵌入到onOpen()
:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
var values = range.getValues();
function onOpen() {
showAllRows();
hideEmptyRows();
var menuEntries = [];
menuEntries.push({name: "Show All Rows", functionName: "showAllRows"});
menuEntries.push(null);
menuEntries.push({name: "Hide Empty Rows", functionName: "hideEmptyRows"});
ss.addMenu("Row Visibility", menuEntries);
}
另外:
如果您要定期更新行,即使尚未关闭并重新打开工作表,则可以安装一个时间驱动的触发器 ,该触发器将定期更新隐藏的行。 为此,您需要将其绑定到已经存在的onOpen
函数,并选择一个时间间隔:
纯粹是为了提供替代方法(并证明在阳光下没有新事物)。 这是2014年@Mogsdad的拍摄。
/**
* Mogsdad's "whole row" checker.
//https://stackoverflow.com/a/27179633/1330560
*/
function getFirstEmptyRowWholeRow() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
var row = 0;
for (var row=0; row<values.length; row++) {
if (!values[row].join("")) break;
}
// return (row+1);
Logger.log("the row to hide is = "+(row+1));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.