У меня есть скрипт, который просматривает всю книгу на предмет определенного имени и возвращает все данные с этим именем.Сценарий работает, но собирает данные только с 1 листа в рабочей книге.
Я искал некоторый код, чтобы помочь мне получить все названия листов.Итак, у меня есть код, который делает это, но по какой-то причине он все еще возвращается только с 1 листа.
Код ниже собирает все имена листов.Затем эта функция вызывается в функции запроса. Я подозреваю, что именно здесь возникает проблема
function sheetnames() {
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i < sheets.length ; i++) {
var name = sheets[i].getName();
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name);
var values = data.getRange(4, 1, data.getLastRow(),
data.getLastColumn()).getValues();
out.push(values);
}
return out;
}
Эта функция затем ищет запрошенные данные.
function query() {
var Sheet = SpreadsheetApp.getActiveSpreadsheet();
var searchSheet = Sheet.getSheetByName("Search");
var searchByName = searchSheet.getRange(4, 8).getValue();
var uses = sheetnames();
var output = new Array();
var i = 0;
var r = 0;
do{
var from = uses[i];
do{
var row = from[r];
if(row == null){
r++;
continue;
}
if(searchByName != null ){
var newName = row[7];
if(newName == searchByName){
output.push(row);
}
}
r ++;
}while(r < from.length);
i ++;
}while(i < uses.length);
return output;
}
Эта часть просто печатает данные в ячейки и прикрепляется к поисковому чертежу, который выполняет функцию на листе.
function search() {
var Sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Search");
var data = query();
var count1 = 0;
do{
var subData = data[count1];
var count2 = 0;
do{
var setTo = subData[count2];
Sheet.getRange((count1 + 5), (count2 + 1)).setValue(setTo);
count2 ++;
}while(count2 < subData.length);
count1 ++;
}while(count1 < data.length);
}
Лист называется «Лист ежедневных платежей».Как вы можете себе представить, есть много данных.Каждое имя листа указывается по месяцу и году, когда произошла оплата.Более последовательные клиенты, очевидно, будут делать покупки более чем за один месяц.
Таким образом, при поиске имени клиента я получаю только 1 месяц (данные 1 листа).У нас есть данные с мая 2018 года до даты, поэтому, опять же, скрипт не собирает данные со всех листов.