google-apps-script - 使用 Google App Script 插入包含自定义公式的新过滤器视图
问题描述
请参阅下面的示例图片。
我想使用 Google Sheets 脚本编辑器在单元格上添加一个过滤器视图B3
,该过滤器对自定义公式进行过滤=(B4=$B$1)
。
计划是添加一个onEdit
函数来检查单元格中的值是否B1
已更改,如果是,则重置单元格中的过滤器视图B3
。
这让我的大脑崩溃了!一旦我的值发生变化,我似乎无法找到自动更新/刷新过滤器的方法B1
。
我的代码目前看起来像这样,但这不会重新添加自定义公式。它只是不断地向我展示所有非空行。
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheetname = "Lactation";
var sheet = ss.getSheetByName(sheetname);
var erow = e.range.getRow();
//Logger.log("DEBUG: row = "+erow);
var ecolumn = e.range.getColumn();
//Logger.log("DEBUG: column = "+ecolumn);
if (erow == 1 & ecolumn == 2 ){
// there is a match so the cell is B2
//Logger.log("DEBUG: the cell is B2");
updatefilter();
}
else
{
// there is no match so the cell is NOT I3
//Logger.log("DEBUG: the cell is not I3");
}
}
function updatefilter() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('B3').activate();
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(['', 'No'])
.build();
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(2, criteria);
};
解决方案
- 您想在
Lactation
编辑工作表上的单元格“B1”时修改单元格“B3:B”的基本过滤器。- 在这种情况下,您要使用 OnEdit 事件触发器。
- 您想使用
=(B4=$B$1)
自定义公式作为过滤条件。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
修改点:
- 您可以
e
从onEdit(e)
. - 为了使用基本过滤器的自定义功能,您可以使用
whenFormulaSatisfied
.
修改后的脚本:
为了运行脚本,请编辑B1
工作表上的单元格Lactation
。
function onEdit(e){
var sheetName = "Lactation";
var editCell = "B1";
var range = e.range;
var sheet = range.getSheet();
if (range.getA1Notation() == editCell && sheet.getSheetName() == sheetName) {
updatefilter(sheet);
} else {
// do something
}
}
function updatefilter(sheet) {
sheet.getRange('B3').activate();
var criteria = SpreadsheetApp.newFilterCriteria().whenFormulaSatisfied("=(B4=$B$1)").build();
var filter = sheet.getFilter();
if (!filter) {
filter = sheet.getRange("B3:B").createFilter();
}
filter.setColumnFilterCriteria(2, criteria);
};
- 在此脚本中,当编辑工作表上的单元格“B1”时
Lactation
,该函数updatefilter
由 OnEdit 事件触发器运行。当基本过滤器存在时,它会被更新。当不存在过滤器时,将过滤器设置为新过滤器。过滤器的范围是“B3:B”。的自定义函数=(B4=$B$1)
用作标准。
笔记:
- 在上面的脚本中,可以使用简单的触发器。但是如果你使用要求授权的方法,当出现错误时,请尝试使用Installable Triggers。
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
推荐阅读
- grafana - Grafana 6.6+ 为 keycloak 用户分配管理员角色
- r - 如何基于组向 geom_split_violin() 添加单个值(形状)?
- php - 在php中单击时添加+1
- javascript - 按顺序处理事件发射器消息
- sql - 红移光标
- javascript - 为什么我的正则表达式允许未指定的字符?JavaScript
- mongodb - docker-compose mongo healthcheck failing
- ios - Tableview 未正确重新加载数据,未在重新加载时呈现单元格
- react-native - React Native - 在 IOS 上单击时关闭模式
- python - 迭代两个数组以创建一系列列表