101 подписчик
Простой скрипт поиска на двух листах
Друзья, недавно встала задача искать данные на двух листах. Конечно, в Таблицах есть встроенный инструмент "найти и заменить" и в нём можно искать на всех листах, но его не стали использовать из-за того, что сотрудники могут промахнуться и нажать "заменить всё" и после найденное заменится на пустоту :)
Поэтому мы написали простой скрипт и делимся им с вами. В начале – вызываем inputBox, чтобы пользователь ввёл то, что мы ищем, далее обращаемся к двум листам и далее проходимся по каждой ячейке каждого листа в цикле и ищем в ней с помощью регулярного выражения наше значение.
Если находим, то добавляем к сообщению, которое будем выводить в конце (сообщение на скриншоте): название листа, то, что мы нашли и номер строки. Номер строки тут условный, он будет правильным только если данные на наших листах начинаются с первой строки. Но для нашей задачи этого вполне хватило.
И сам скрипт:
function search() {
const search = Browser.inputBox('Search');
if (search) {
const ss = SpreadsheetApp.getActive();
const sh0 = ss.getSheetByName('LOADS');
const sh1 = ss.getSheetByName('CANCELED');
const d0 = sh0.getDataRange().getValues();
const d1 = sh1.getDataRange().getValues();
var msg = '';
d0.forEach((row, y) => {
row.map((cell, x) => msg = new RegExp(search, 'i').test(cell) ? msg + '\\n' + 'LOADS' + ', ROW: ' + y + 1 + ' ' + cell : msg);
});
d1.forEach((row, y) => {
row.map((cell, x) => msg = new RegExp(search, 'i').test(cell) ? msg + '\\n' + 'CANCELED' + ', ROW: ' + y + 1 + ' ' + cell : msg);
});
Browser.msgBox(msg)
};
};
1 минута
19 октября 2023