google-apps-script - 根据 Google 工作表上的复选框隐藏/取消隐藏行
问题描述
我有一个谷歌电子表格,它在 P 列中有复选框,当勾选复选框时,相应的行会自动隐藏。
我希望在 G1 中添加一个额外的复选框,如果选中,它将显示所有隐藏的行,如果可能,在 E1 中添加一个复选框,然后再次隐藏在 P 列中勾选了复选框的所有行。
基本上,当我勾选 P 列中的复选框时,我想自动隐藏行然后我可能需要通过单击 G1 中的复选框来查看隐藏的行。当我完成查看上面隐藏的行时,单击 E1 中的复选框,在 P 列中选中的所有行将再次隐藏。
function onEdit(e){
if (e.range.columnStart != 16 || e.value != "TRUE") return;
SpreadsheetApp.getActiveSheet().hideRows(e.range.rowStart);
}
解决方案
解决方案:
- 检查编辑的单元格是否
G1
通过getA1Notation()。在这种情况下,检查 value 是否为TRUE
,如果是,则显示所有行。显示所有行的一个简单选项是使用unhideRow(row),设置A:A
为您的范围(因为这包括工作表中的所有行)。 - 检查编辑的单元格是否为
E1
. 如果值为,则通过getValues()从列TRUE
中检索所有值,遍历它们,如果值为,则使用hideRows(rowIndex)隐藏相应的行。P
true
- 检查已编辑的单元格是否在 column
P
中,hideRows
如果是这样,请在已编辑的行上使用,就像您已经在做的那样。
代码片段:
function onEdit(e){
const sheet = SpreadsheetApp.getActiveSheet();
const range = e.range;
const editedValue = e.value;
if (range.getA1Notation() === "G1" && editedValue === "TRUE") {
sheet.unhideRow(sheet.getRange("A:A"));
} else if (range.getA1Notation() === "E1" && editedValue === "TRUE") {
const firstRow = 2;
const lastRow = sheet.getLastRow();
const pValues = sheet.getRange("P" + firstRow + ":P" + lastRow).getValues().flat();
pValues.forEach((pValue,i) => {
if (pValue === true) {
sheet.hideRows(i + firstRow);
}
});
} else if (e.range.columnStart === 16 && editedValue === "TRUE") {
sheet.hideRows(range.rowStart);
}
}
推荐阅读
- r - 如果列值为x,有没有办法总结?
- filepond - Filepond 返回条目对象以用于 PATCH 请求
- excel - 在 excel VBA 中,如何让我的屏幕跟随图像,无论它去哪里?
- r - 在数据框中选择一组列以用于 R 中的 for 循环
- sql - SQL BigQuery 资源超出了对大表(1 亿行)进行 LEFT JOIN 的操作,我应该怎么做才能获得良好的性能/优化?
- javascript - Access to Array of objects elements :I am trying to print the submitter with highest number of metric :which is redness or plumpness
- python - Failed installation of python package
- java - Android Studio 同时拖放多个对象
- ios - Open keyboard with a textField on top of it on press of a button
- mysql - 如何选择具有一个到另一个和另一个表关系的表