google-apps-script - 如何根据特定的单元格值显示/隐藏行?
问题描述
我正在尝试根据数据验证列表的响应将一些显示/隐藏行逻辑放入谷歌工作表中。
如果用户从单元格 C42 中的数据验证列表中选择值“General Account Call”,我想显示第 43 行到第 53 行和第 78 行到第 101 行。此外,如果用户勾选单元格 C40 中的复选框,我想显示 C41 行。
我不知道我是否可以使用 onEdit 函数“监视”多个单元格。
我发现了几个类似的(ish)脚本,它们根据同一行中单元格中的值隐藏一行,并尝试修改它们无济于事。然后我尝试回到基础并放置一些东西来监视一个单元格并隐藏不同的行,再次无济于事
function onEdit(e) {
var ss = SpreadsheetApp.getActive()
var sheet = SpreadsheetApp.getActiveSheet()
var cell = sheet.getRange('D39')
var cellContent = cell.getValue()
if(cellContent === Y) {
Sheet.hideRow(40)
}
}
解决方案
您的代码应该是:
function onEdit() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var cell = sheet.getRange('D39');
var cellContent = cell.getValue();
if(cellContent == 'Y') {
sheet.hideRows(11);
}
}
有几件事是错误的:
- 即使
ss
andsheet
声明有效,您是从 SpreadsheetApp 而不是从 获取工作表ss
,因此ss
没有被使用。 cellContent == 'Y'
是将单元格与字符串进行比较的正确方法,如果删除引号,它会将其解释为不存在的变量 Y。此外,===
它不是必需的,因为它检查类型和值,我们只想要值。实际上,即使值相同但类型不同,它也会返回 false- 你写
Sheet.hideRow
而不是sheet.hiderow
. Javascript 是区分大小写的,所以要小心! - 该方法
hideRow
隐藏给定 Range中的行,因此我们必须使用hideRows
, 如果您可以使用整数(在本例中为 11)隐藏整行。 - 你没有放任何分号
;
您没有收到任何这些错误,因为我想您正在测试更改 D39 值的代码。如果您手动执行代码,所有这些都会显示出来。
因此,为了根据几个单元格隐藏几行,您必须获取事件信息(e)
,并获取正在编辑的单元格。
像这样做一个 if:
var cell = e.range.getA1Notation(); //Gets the Cell you edited
var cell_value = e.range.getValue(); //Gets the value of the cell
if(cell == 'C42' && cell_value == 'General Account Call'){
sheet.showRows(43, 10);
sheet.showRows(78, 23);
}
if (cell == 'C40' && cell_value){ //The checkbox value returns true or false
sheet.showRows(41);
}
中的第二个数字showRows
是将显示的行数。
推荐阅读
- python - 创建随机图案渐变图?
- ios - Objective C - 我希望 UIAlertController 在单击按钮时不会被删除
- python - TKinter (filedialog.askdirectory) 冻结 Spyder 控制台
- mongodb - 用于查找日程冲突的人数的 MongoDB 查询
- reactjs - Redux 将元素分配给处于状态中的嵌套对象,并给出其键
- php - Phinx 和 PHPUnit
- android - 如何将此原始查询与android中的变量正确连接?
- python - 为子文件夹和文件提取 git time recursivley
- ios - Cosmic Mind - 实现 TabsController 时如何调整视图大小
- java - 可以打印4列吗?