因此,我希望自动隐藏完全空的行。有了代码,当我仍然希望显示带有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);
}
}
}
答案 0 :(得分: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);
}
}
}
这似乎仅在我具有“编辑”功能的登录名时有效 当仅查看时不显示
正如您可以查阅documentation的限制部分所述,很遗憾,如果以只读(查看或评论)模式打开文件,则简单触发器和可安装触发器都不会运行。
我还希望它更新onOpen或onChange并“取消隐藏” 以前为空的行,现在具有值。
不幸的是,不会以编程方式(通过查询)对工作表进行更改:Script executions and API requests do not cause triggers to run.
但是,您仍然可以先取消隐藏所有行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);
}
此外:
如果您要定期更新行,即使尚未关闭并重新打开工作表,则可以安装time-driven trigger来定期更新隐藏的行。为此,您需要将其绑定到已经存在的onOpen
函数并选择您选择的时间间隔:
答案 1 :(得分:0)
纯粹是为了提供替代方法(并证明在阳光下没有新事物)。这是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));
}