[英]Google Apps Scripts / Google Sheet - Disable all the active filters, Show a specific cell and filter again based on criteria
我正在尝试在我的电子表格中创建一个自定义菜单,其中包含 2 个项目:
第一项:
第 2 项:使用 B 列和 C 列的过滤器过滤数据,并仅保留最近 60 天的数据(如果代码是动态的,那就太好了)。
我已经开始研究第一个项目,但我被困在第二部分。 这是我的 GAS 电子表格示例,可帮助您了解我想要实现的目标。
https://docs.google.com/spreadsheets/d/11ptkjp5UySKc0iwZTu3QUrJVKds6t4W5eMD39XVUbME/edit#gid=0
对此的任何帮助将不胜感激。
我相信你的目标如下。
> Add Content here <
的值放入“B”列的第一个空行。当我看到您的示例脚本时,我发现了以下示例脚本。
// first item - working
function prepareForContentAddition() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Dashboard');
var filter = sheet.getFilter();
if (filter !== null) {
var range = filter.getRange();
var firstColumn = range.getColumn();
var lastColumn = range.getLastColumn();
for (var i = firstColumn; i < lastColumn; i++) {
filter.removeColumnFilterCriteria(i);
}
}
// Show the last empty row / blank cell in Column B and add "> Add Content here <" in it
var lastRow = sheet.getRange('Dashboard!B3:B').getLastRow();
sheet.getRange(lastRow, +1,1).activate();
}
// Apply 2 months filtering starting from today
function backToFiltering() {
}
当这个脚本被修改了,下面的修改呢?
function prepareForContentAddition() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Dashboard');
var filter = sheet.getFilter();
if (filter !== null) {
var range = filter.getRange();
var firstColumn = range.getColumn();
var lastColumn = range.getLastColumn();
for (var i = firstColumn; i < lastColumn; i++) {
filter.removeColumnFilterCriteria(i);
}
}
// I added below script.
Object.prototype.get1stNonEmptyRowFromBottom = function (columnNumber, offsetRow = 1) { // Ref: https://stackoverflow.com/a/44563639
const search = this.getRange(offsetRow, columnNumber, this.getMaxRows()).createTextFinder(".").useRegularExpression(true).findPrevious();
return search ? search.getRow() : offsetRow;
};
var row = sheet.get1stNonEmptyRowFromBottom(2);
sheet.getRange(row + 1, 2).setValue("> Add Content here <");
}
和
function backToFiltering() {
const date = new Date();
date.setDate(date.getDate() - 60);
const year = date.getFullYear();
const month = date.getMonth() + 1;
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Dashboard');
var filter = sheet.getFilter();
if (filter !== null) {
filter.setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThanOrEqualTo(year).build()).setColumnFilterCriteria(3, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThan(month).build());
}
}
在这个修改中,我认为可以得到你预期的情况。 显示2022, 8
和2022, 9
。 但是,当您要显示2022, 7
, 2022, 8
和2022, 9
时,请进行如下修改。
从
filter.setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThanOrEqualTo(year).build()).setColumnFilterCriteria(3, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThan(month).build());
至
filter.setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThanOrEqualTo(year).build()).setColumnFilterCriteria(3, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThanOrEqualTo(month).build());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.