如何在Google Apps Script中过滤并保留单个空行分隔目标分组
问题:Google Apps Script过滤指定姓名并保留单个分隔空行
- 现有一列姓名数据,相同姓名的分组间以空行分隔(如图1)
- 需通过Google Apps Script过滤指定姓名(例如Mike),要求过滤后目标姓名的分组间仅保留单个空行,避免出现多余空行(如图2的问题)
- 已知可通过公式实现该效果(如图3),但不清楚如何在
whenFormulaSatisfied方法中编写对应公式,当前代码示例如下:
var textToFilter = "Mike"; var FilterCriteria = SpreadsheetApp.newFilterCriteria().whenFormulaSatisfied("=AND(A1:A1000=" + "\"" + textToFilter + "\"" + ")"); filter.setColumnFilterCriteria(1, FilterCriteria);



解决方案
你需要修改whenFormulaSatisfied中的公式,既要筛选出目标姓名的行,还要只保留分组之间的必要空行。核心逻辑是:筛选内容为目标姓名的行,或者空行且上下行都是目标姓名的行。
修改后的代码如下:
var textToFilter = "Mike"; // 构造公式:筛选目标姓名行,或Mike分组之间的空行 var filterFormula = `=OR(A1="${textToFilter}", AND(A1="", OFFSET(A1,-1,0)="${textToFilter}", OFFSET(A1,1,0)="${textToFilter}"))`; var FilterCriteria = SpreadsheetApp.newFilterCriteria().whenFormulaSatisfied(filterFormula); filter.setColumnFilterCriteria(1, FilterCriteria);
公式逻辑说明
A1="${textToFilter}":直接筛选内容为目标姓名的行AND(A1="", OFFSET(A1,-1,0)="${textToFilter}", OFFSET(A1,1,0)="${textToFilter}"):筛选空行,且该行的上一行和下一行都是目标姓名,这样就只保留分组之间的单个空行,避免多余空行
内容的提问来源于stack exchange,提问作者alex che
相关产品推荐
相关产品推荐

