Есть моя реализация
/* exported onOpen, userActionSelectByCondition, rowSelector_, userActionSelectByDateCondition */
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Advansed selector')
.addItem('Select between 40 and 1000', 'userActionSelectByCondition')
.addItem(
'Select between 01/02/2019 and 01/04/2019',
'userActionSelectByDateCondition'
)
.addToUi();
}
/**
* Select rows of the active sheet by condition
*/
function userActionSelectByCondition() {
var /** @type {condition} */ condition = function(row) {
return row[0] > 40 && row[0] < 1000;
};
var sheet = SpreadsheetApp.getActiveSheet();
rowSelector_(sheet, condition);
}
/**
* Select rows of the active sheet by condition
*/
function userActionSelectByDateCondition() {
var date1 = new Date(2019, 0, 2, 0, 0, 0, 0).getTime();
var date2 = new Date(2019, 0, 4, 0, 0, 0, 0).getTime();
var /** @type {condition} */ condition = function(row) {
return (
row[2] &&
row[2].getTime &&
row[2].getTime() > date1 &&
row[2].getTime() < date2
);
};
var sheet = SpreadsheetApp.getActiveSheet();
rowSelector_(sheet, condition);
}
/**
*
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet
* @param {condition} callback
* @returns {GoogleAppsScript.Spreadsheet.RangeList}
*/
function rowSelector_(sheet, callback) {
return sheet
.getRangeList(
sheet
.getDataRange()
.getValues()
.reduce(function(p, c, i) {
if (callback(c)) p.push(i + 1 + ':' + (i + 1));
return p;
}, [])
)
.activate();
}
/**
* Callback for condition
*
* @callback condition
* @param {Array<object>} row A row of the sheet
* @returns {boolean}
*/
Пример https://docs.google.com/spreadsheets/d/1i7h3CpWa6SEFK8uegNIcKJcpeg1n1-FdyjUwGWicm_M/edit?usp=sharing и видео https://www.facebook.com/oshliaer/videos/2196890940397483/
Если вам действительно нужно , чтобы выбрать строк, которые вы можете использоватьgetRangeList().activate()
.
В противном случае, если вам нужно получить данные по условию, вы можете использовать getDataRange().getValues().reduce()
для работы со значениями.