根据多个复选框值隐藏行
Hide rows based on multiple checkbox values
我正在做的项目是计算手机游戏中剩余套数的成本。它有一个包含所有集合列表的电子表格,以及所有 5 件的复选框,列 B:F。我想包括隐藏所有已完成集的选项,因此所有复选框都被选中。这是通过另一个复选框 H16 完成的。
我已将复选框值修改为使用是和否。
我以前从未使用过 Google Apps 脚本,总体上对编码非常陌生。我认为我需要的是使用 onEdit,然后每次编辑一个单元格时,检查 H16 是否为 TRUE,然后扫描每一行以检查 B:F 值。如果全部为真,则隐藏该行。不过,我不知道最好的输入方式。
奖励积分,我还想包括一个重置复选框,所以选中后,将 B:F 中的所有值设置为 false,并显示行。
Here is a link to the spreadsheet
编辑:我当前的 GAS 代码,这并不多,因为我不知道我在做什么:
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var maxSheet = 100;
if(H16 == true)
{
for(i, i<=maxSheet, i = i + 1) {
}
} else {
sheet.showRows(1, maxSheet);
}
}
当所有五列都为真时隐藏行
这可能不是您想要的,但我认为它很接近。我没有使用 yes 和 no 值,因为我更容易将其保留为 true false,但您可以更改它。我正在使用 Sheet0,您也可以更改它。我使用的行数较少,因此您也可以更改它。但基本思想是,当单击 H16 时,它会隐藏已选中所有五列的行。
代码:
function onEdit(e) {
e.source.toast('entry');//debug
const sh = e.range.getSheet();
const sr = 2;//data start row
const lr = 15;//last row of data
sh.getRange('K1').setValue(JSON.stringify(e));//debug
if(sh.getName() == "Sheet0" && e.range.columnStart == 8 && e.range.rowStart == 16 & e.value == "TRUE" ) {
e.source.toast('past if');//debug
e.range.setValue("FALSE");
let vs = sh.getRange(sr,2,lr - sr + 1, 5).getValues();
vs.forEach((r,i) => {
if(r[0] && r[1] && r[2] && r[3] && r[4]) {
e.source.toast(`Row: ${sr + i}`);//debug
sh.hideRows(sr + i);
}
});
}
}
工作表 0 的图像:
我在调试脚本时使用 K1 为我提供事件对象。我还在几个位置使用 e.source.toast 来了解发生了什么。
动画:
an incomplete description of the event object
您可以使用我示例中显示的 JSON.stringify 代码更好地理解事件对象。
大多数新手都想 运行 来自脚本编辑器的代码,所以我会提前告诉您,除非您提供事件对象来填充 e,否则它将无法工作。只需复制并粘贴它,即可获得独特的设置,例如 sheet 名称和数据 space,然后继续编辑页面并弄清楚它是如何工作的。
我正在做的项目是计算手机游戏中剩余套数的成本。它有一个包含所有集合列表的电子表格,以及所有 5 件的复选框,列 B:F。我想包括隐藏所有已完成集的选项,因此所有复选框都被选中。这是通过另一个复选框 H16 完成的。
我已将复选框值修改为使用是和否。
我以前从未使用过 Google Apps 脚本,总体上对编码非常陌生。我认为我需要的是使用 onEdit,然后每次编辑一个单元格时,检查 H16 是否为 TRUE,然后扫描每一行以检查 B:F 值。如果全部为真,则隐藏该行。不过,我不知道最好的输入方式。
奖励积分,我还想包括一个重置复选框,所以选中后,将 B:F 中的所有值设置为 false,并显示行。 Here is a link to the spreadsheet
编辑:我当前的 GAS 代码,这并不多,因为我不知道我在做什么:
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var maxSheet = 100;
if(H16 == true)
{
for(i, i<=maxSheet, i = i + 1) {
}
} else {
sheet.showRows(1, maxSheet);
}
}
当所有五列都为真时隐藏行
这可能不是您想要的,但我认为它很接近。我没有使用 yes 和 no 值,因为我更容易将其保留为 true false,但您可以更改它。我正在使用 Sheet0,您也可以更改它。我使用的行数较少,因此您也可以更改它。但基本思想是,当单击 H16 时,它会隐藏已选中所有五列的行。
代码:
function onEdit(e) {
e.source.toast('entry');//debug
const sh = e.range.getSheet();
const sr = 2;//data start row
const lr = 15;//last row of data
sh.getRange('K1').setValue(JSON.stringify(e));//debug
if(sh.getName() == "Sheet0" && e.range.columnStart == 8 && e.range.rowStart == 16 & e.value == "TRUE" ) {
e.source.toast('past if');//debug
e.range.setValue("FALSE");
let vs = sh.getRange(sr,2,lr - sr + 1, 5).getValues();
vs.forEach((r,i) => {
if(r[0] && r[1] && r[2] && r[3] && r[4]) {
e.source.toast(`Row: ${sr + i}`);//debug
sh.hideRows(sr + i);
}
});
}
}
工作表 0 的图像:
我在调试脚本时使用 K1 为我提供事件对象。我还在几个位置使用 e.source.toast 来了解发生了什么。
动画:
an incomplete description of the event object
您可以使用我示例中显示的 JSON.stringify 代码更好地理解事件对象。
大多数新手都想 运行 来自脚本编辑器的代码,所以我会提前告诉您,除非您提供事件对象来填充 e,否则它将无法工作。只需复制并粘贴它,即可获得独特的设置,例如 sheet 名称和数据 space,然后继续编辑页面并弄清楚它是如何工作的。