如果 A 列为空,隐藏 google 电子表格中的行?
Hide rows in google spreadsheet if Column A is empty?
如果 A 列为空,我将尝试隐藏行。我想将其应用于特定工作表(第 1 周、第 2 周、第 3 周、第 4 周和第 5 周)。这是我目前为止第 1 周的代码。
function ConditionalHideRow() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Week1");
var condition = sheet.getRange("A:A").getValue();
if (condition = "EMPTY") {
sheet.hideRows(1,125)
}
编辑:奖金问题,当 A 列已填满时,有没有办法让它取消隐藏?我正在使用 =query 公式来填充我的电子表格,随着添加更多数据,长度将需要更改。
我假设 'EMPTY' 并不是要在 A 列中找到的字符串,您确实想检查 A 列是否真的为空?如果是这样,请尝试:
function hideRows() {
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(s)
sheet.getRange('A:A')
.getValues()
.forEach(function (r, i) {
if (!r[0]) sheet.hideRows(i + 1)
});
});
}
或者,更 'classical' 的方法:
function hideRows2() {
var sheets = ["Week1", "Week2", "Week3", "Week4", "Week5"];
for (var i = 0, sLen = sheets.length; i < sLen; i++) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(sheets[i])
var val = sheet.getRange('A:A')
.getValues();
for (var j = 0, vLen = val.length; j < vLen; j++) {
if (!val[j][0]) sheet.hideRows(j + 1)
}
}
}
确保您没有太多空白行(在包含数据的最后一行之后),因为这可能会导致脚本执行超时。
对编辑的回答:在这一点上对我有意义的取消隐藏占用行的唯一方法是在隐藏空白行之前取消隐藏 sheet 的所有行。
在下面写着 // Add this 的地方添加行
function hideRows() {
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(s)
sheet.unhide(sheet.getRange('A:A')) // Add this
sheet.getRange('A:A')
.getValues()
.forEach(function (r, i) {
if (!r[0]) sheet.hideRows(i + 1)
});
});
}
或单独取消隐藏:
function unhideRows() {
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(s)
sheet.unhide(sheet.getRange('A:A'))
});
}
为了将来参考,当您可以将连续的行作为一个块而不是一次一个地处理时,有更有效的处理方法。尽管这行得通,但我相信如果 JPV 理解布局,他可能会做得有点不同。
你不需要公式,你可以使用过滤器...
- 突出显示有问题的列
- Select *数据 > 过滤器
- 现在 header 行中应该有一个下拉按钮。点击它,select/un-select 你的条件
更新: 这也适用于您的奖励问题。填充该列后,如果取消选中“(空白)”,它将不再满足过滤条件。
如果 A 列为空,我将尝试隐藏行。我想将其应用于特定工作表(第 1 周、第 2 周、第 3 周、第 4 周和第 5 周)。这是我目前为止第 1 周的代码。
function ConditionalHideRow() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Week1");
var condition = sheet.getRange("A:A").getValue();
if (condition = "EMPTY") {
sheet.hideRows(1,125)
}
编辑:奖金问题,当 A 列已填满时,有没有办法让它取消隐藏?我正在使用 =query 公式来填充我的电子表格,随着添加更多数据,长度将需要更改。
我假设 'EMPTY' 并不是要在 A 列中找到的字符串,您确实想检查 A 列是否真的为空?如果是这样,请尝试:
function hideRows() {
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(s)
sheet.getRange('A:A')
.getValues()
.forEach(function (r, i) {
if (!r[0]) sheet.hideRows(i + 1)
});
});
}
或者,更 'classical' 的方法:
function hideRows2() {
var sheets = ["Week1", "Week2", "Week3", "Week4", "Week5"];
for (var i = 0, sLen = sheets.length; i < sLen; i++) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(sheets[i])
var val = sheet.getRange('A:A')
.getValues();
for (var j = 0, vLen = val.length; j < vLen; j++) {
if (!val[j][0]) sheet.hideRows(j + 1)
}
}
}
确保您没有太多空白行(在包含数据的最后一行之后),因为这可能会导致脚本执行超时。
对编辑的回答:在这一点上对我有意义的取消隐藏占用行的唯一方法是在隐藏空白行之前取消隐藏 sheet 的所有行。
在下面写着 // Add this 的地方添加行
function hideRows() {
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(s)
sheet.unhide(sheet.getRange('A:A')) // Add this
sheet.getRange('A:A')
.getValues()
.forEach(function (r, i) {
if (!r[0]) sheet.hideRows(i + 1)
});
});
}
或单独取消隐藏:
function unhideRows() {
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) {
var sheet = SpreadsheetApp.getActive()
.getSheetByName(s)
sheet.unhide(sheet.getRange('A:A'))
});
}
为了将来参考,当您可以将连续的行作为一个块而不是一次一个地处理时,有更有效的处理方法。尽管这行得通,但我相信如果 JPV 理解布局,他可能会做得有点不同。
你不需要公式,你可以使用过滤器...
- 突出显示有问题的列
- Select *数据 > 过滤器
- 现在 header 行中应该有一个下拉按钮。点击它,select/un-select 你的条件
更新: 这也适用于您的奖励问题。填充该列后,如果取消选中“(空白)”,它将不再满足过滤条件。