首先,我需要VLOOKUP在 CSV 中兩次查找兩個團隊的名稱,然后加入這兩個名稱并在另一個 CSV 中執行另一個 VLOOKUP:
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 | C420 | D420 | E420 | F420 |
|---|---|---|---|---|
| 2 | 4.5 | 3.45 | 1.95 | 2.02 |
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想降低腳本的處理成本。
修改點:
- 當使用三元運算子而不是 if 陳述句時,可以減少一點處理成本。參考
- 正如我在評論中提到的,在您的腳本中,
var match_col = teams_csv.map(row => row[0]);結果var match_list = match_col.join("?").split("?");相同。 - 我認為當使用
UrlFetchApp.fetchAllinsted of時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);
}
筆記:
- 我不確定您的實際 CSV 資料。因此,當此修改沒有用時,我認為可能需要使用示例 CSV 資料測驗腳本。
參考:
- 基準測驗:使用 Google Apps 腳本的條件分支
- 基準測驗:Google Apps 腳本的 UrlFetch 服務中的 fetchAll 方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473300.html
