使用 Google 应用脚本插入包含自定义公式的新过滤器视图
Use Google App Script to insert new Filter View containing Custom Formula
请参阅下面的示例图片。
我想使用 Google 表格脚本编辑器在单元格 B3
上添加 过滤视图 ,过滤自定义公式 =(B4=$B)
.
计划添加一个 onEdit
函数,检查单元格 B1
中的值是否已更改,如果更改,则重置单元格 B3
.[=19 中的过滤器视图=]
这让我的大脑崩溃了!一旦 B1
中的值发生变化,我似乎找不到自动 update/refresh 过滤器的方法。
我的代码目前看起来像这样,但这并没有重新添加自定义公式。它只是不断向我显示所有非空行。
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);
};
- 您想在编辑 sheet
Lactation
上的单元格 "B1" 时修改单元格 "B3:B" 的基本过滤器。
- 在这种情况下,您想使用 OnEdit 事件触发器。
- 您想使用自定义公式
=(B4=$B)
作为过滤条件
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 您可以利用事件对象作为
onEdit(e)
的 e
。
- 为了使用基本过滤器的自定义功能,您可以使用
whenFormulaSatisfied
。
修改后的脚本:
为了 运行 脚本,请编辑 sheet Lactation
上的单元格 B1
。
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)").build();
var filter = sheet.getFilter();
if (!filter) {
filter = sheet.getRange("B3:B").createFilter();
}
filter.setColumnFilterCriteria(2, criteria);
};
- 在此脚本中,当
Lactation
的 sheet 上的单元格 "B1" 被编辑时,函数 updatefilter
被 OnEdit 事件 运行扳机。当基本过滤器存在时,它会被更新。当不存在过滤器时,过滤器被设置为新过滤器。过滤器的范围是"B3:B"。 =(B4=$B)
的自定义函数作为判断条件
注:
- 在上面的脚本中,可以使用简单的触发器。但如果使用要求授权的方法,出现错误时,请尝试使用Installable Triggers。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
请参阅下面的示例图片。
我想使用 Google 表格脚本编辑器在单元格 B3
上添加 过滤视图 ,过滤自定义公式 =(B4=$B)
.
计划添加一个 onEdit
函数,检查单元格 B1
中的值是否已更改,如果更改,则重置单元格 B3
.[=19 中的过滤器视图=]
这让我的大脑崩溃了!一旦 B1
中的值发生变化,我似乎找不到自动 update/refresh 过滤器的方法。
我的代码目前看起来像这样,但这并没有重新添加自定义公式。它只是不断向我显示所有非空行。
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);
};
- 您想在编辑 sheet
Lactation
上的单元格 "B1" 时修改单元格 "B3:B" 的基本过滤器。- 在这种情况下,您想使用 OnEdit 事件触发器。
- 您想使用自定义公式
=(B4=$B)
作为过滤条件
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 您可以利用事件对象作为
onEdit(e)
的e
。 - 为了使用基本过滤器的自定义功能,您可以使用
whenFormulaSatisfied
。
修改后的脚本:
为了 运行 脚本,请编辑 sheet Lactation
上的单元格 B1
。
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)").build();
var filter = sheet.getFilter();
if (!filter) {
filter = sheet.getRange("B3:B").createFilter();
}
filter.setColumnFilterCriteria(2, criteria);
};
- 在此脚本中,当
Lactation
的 sheet 上的单元格 "B1" 被编辑时,函数updatefilter
被 OnEdit 事件 运行扳机。当基本过滤器存在时,它会被更新。当不存在过滤器时,过滤器被设置为新过滤器。过滤器的范围是"B3:B"。=(B4=$B)
的自定义函数作为判断条件
注:
- 在上面的脚本中,可以使用简单的触发器。但如果使用要求授权的方法,出现错误时,请尝试使用Installable Triggers。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。