Сначала мне нужно дважды VLOOKUP в CSV найти название двух команд, затем я соединяю два имени и делаю еще одну ВПР в другом CSV:
function duoble_vlookup() {
var s = SpreadsheetApp.getActive();
var search_values = s.getRange("Import_Data!K2:K3").getValues();
var teams_url = 'url csv 1';
var teams_csv = Utilities.parseCsv(UrlFetchApp.fetch(teams_url));
var match_col = teams_csv.map(row => row[0]);
var match_list = match_col.join("ღ").split("ღ");
var index = match_list.indexOf(search_values[0][0]);
if (index === -1) {
var team_home = 'off';
} else {
var row = index;
var found_value = teams_csv[row][1];
var team_home = found_value;
}
var index = match_list.indexOf(search_values[1][0]);
if (index === -1) {
var team_away = 'off';
} else {
var row = index;
var found_value = teams_csv[row][1];
var team_away = found_value;
}
var match_name = team_home + ' v ' + team_away;
var all_values_csv_url = 'url csv 2';
var all_values_csv = Utilities.parseCsv(UrlFetchApp.fetch(all_values_csv_url));
var match_col = all_values_csv.map(row => row[2]);
var match_list = match_col.join("ღ").split("ღ");
var index = match_list.indexOf(match_name);
if (index === -1) {
s.getRange("Gerais!B420:F420").setValues([['-','-','-','-','-']]);
} else {
var row = index;
var found_value = [[all_values_csv[row][5],all_values_csv[row][6],all_values_csv[row][7],all_values_csv[row][8],all_values_csv[row][9]]];
s.getRange("Gerais!B420:F420").setValues(found_value);
}
}
Эта работа занимает от 28 до 45 секунд, есть ли более гибкий метод для этого или это действительно реальность этого случая?
Например к тестам:
Import_Data!K2:K3:
/95/
/117/
Результат в Gerais!B420:F420:
| B420 | С420 | Д420 | Е420 | F420 |
|---|---|---|---|---|
| 2 | 4,5 | 3,45 | 1,95 | 2.02 |
Кстати, я думаю, что var match_col = teams_csv.map(row => row[0]); и var match_list = match_col.join("ღ").split("ღ"); это одно и то же. Могу я спросить вас об ожидаемом результате здесь?
Привет @Tanaike Да, я могу это сделать, я отредактирую контент, чтобы скрыть то, чем нельзя поделиться, и отправлю ссылки, чтобы помочь вам увидеть!
@Tanaike Идея на этом этапе кода состоит в том, чтобы просто создать единый список для поиска по индексу, я считаю, что оба действительно выполняют одну и ту же работу, я только что заметил, что вы комментируете!
Привет @Tanaike csv, включенный в вопрос, и образцы тестовых данных также включены, обратите внимание, что иногда, когда я запускаю этот скрипт более одного раза с одними и теми же значениями, он иногда запускается менее чем за 10 секунд, но это не нормально в моем триггере, который работает каждые 30 минут это занимает гораздо больше времени, чем когда вам нужно провести новое исследование.
Спасибо за ответ. Угадав вашу ситуацию, я предложил в качестве ответа модифицированный скрипт. Не могли бы вы подтвердить это? Если это было не полезно, прошу прощения. В то время я подумал, что может потребоваться протестировать скрипт на примере данных CSV.





Я считаю, что ваша цель заключается в следующем.
var match_col = teams_csv.map(row => row[0]); и var match_list = match_col.join("ღ").split("ღ"); — это один и тот же результат.UrlFetchApp.fetchAll вместо UrlFetchApp.fetch стоимость процесса может быть немного снижена. СсылкаКогда эти моменты отражаются на вашем сценарии, он становится следующим.
function duoble_vlookup() {
var s = SpreadsheetApp.getActive();
var search_values = s.getRange("Import_Data!K2:K3").getValues();
var teams_url = 'url csv 1';
var all_values_csv_url = 'url csv 2';
var [teams_csv, all_values_csv] = UrlFetchApp.fetchAll([teams_url, all_values_csv_url]).map(r => Utilities.parseCsv(r.getContentText()));
var match_col1 = teams_csv.map(row => row[0]);
var index1 = match_col1.indexOf(search_values[0][0]);
var index2 = match_col1.indexOf(search_values[1][0]);
var team_home = index1 === -1 ? 'off' : teams_csv[index1][1];
var team_away = index2 === -1 ? 'off' : teams_csv[index2][1];
var match_name = team_home + ' v ' + team_away;
var match_col2 = all_values_csv.map(row => row[2]);
var index = match_col2.indexOf(match_name);
var values = index === -1 ? [['-', '-', '-', '-', '-']] : [[all_values_csv[index][5], all_values_csv[index][6], all_values_csv[index][7], all_values_csv[index][8], all_values_csv[index][9]]];
s.getRange("Gerais!B420:F420").setValues(values);
}
Он генерирует ошибку, например: Exception: invalid argument (line 7) строка 7 — это var [teams_csv, all_values_csv] = ..., это метод fetchAll?
@Brondby, ЕСЛИ Спасибо за ответ. Я должен извиниться. Я неправильно скопировал сценарий. Это var [teams_csv, all_values_csv] = UrlFetchApp.fetchAll([teams_url, all_values_csv_url]).map(r => Utilities.parseCsv(r.getContentText()));. Пожалуйста, проверьте это снова.
Я позволю ему работать в моем триггере, но я уже заметил огромную разницу в ответе → 2013 секунд общего пробега, 2 секунды против 45 секунд, огромная разница!
@Brondby IF Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И тебе спасибо.
Можете ли вы предоставить образец входных данных CSV и образец ожидаемой ситуации вывода?