#javascript #if-statement #google-apps-script #google-sheets
Вопрос:
Тестовый лист 1
Лист Test2
Я хочу сравнить News01 из столбца Test1 A со столбцом Test2 A, и мне нужно получить соответствующее значение столбца Test2 B
Таким образом, результат должен быть указан в столбце «Финансы» листа 1 В
Но если я использую else, даже если утверждение истинно, это будет утверждение else. Если я удаляю оператор else, то оператор if работает.
Я не знаю, почему, когда утверждение if истинно, по умолчанию оно переходит в утверждение else
function test() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = sheet.getSheetByName("Test1");
var target_sheet = sheet.getSheetByName("Test2");
var lastRow = source_sheet.getLastRow();
var inputs = source_sheet.getRange('A' lastRow).getValues().flat();
var days = target_sheet.getRange('A1:A').getValues().flat();
var codes = target_sheet.getRange('B1:B').getValues().flat();
inputs.forEach(function(input, count){
for(var i = 0; i < days.length; i ){
if(days[i].trim() == input.trim()){
source_sheet.getRange('B' (count source_sheet.getLastRow())).setValue(codes[i]);
Logger.log(codes[i]);
break;
}
else{
Logger.log("News not found")
}
}
});
}
Комментарии:
1. Я должен извиниться за свое плохое знание английского языка. К сожалению, я не могу понять
But If I use else, even when if statement is true it's going to else statement.
. Могу я спросить вас об этом в деталях?2. Если утверждение верно в сценарии, который я вложил в вопрос. Таким образом, мой вывод должен быть финансовым , но когда я запускаю сценарий, я получаю новости, не найденные в заявлении else. Итак, я не знаю, когда утверждение «если» истинно, оно должно входить в утверждение «если». Но это будет другое заявление. Если я удалю оператор else, то оператор If будет работать так, как ожидалось.
3. Спасибо, что ответили. Исходя из ваших примеров ситуаций ввода, я думаю, что, когда ваш скрипт запускается,
days[i].trim() == input.trim()
он находитсяfalse
в 1-м цикле. И, во 2 — м цикле,days[i].trim() == input.trim()
естьtrue
. Таким образом, запускается сценарий изsetValue
. Как насчет этого потока?
Ответ №1:
Вы регистрируете News not found
каждое сравнение со всеми строками Test2
, что неправильно.
Вместо этого вы должны регистрироваться только после завершения сравнения.
function test() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = sheet.getSheetByName("Test1");
var target_sheet = sheet.getSheetByName("Test2");
var lastRow = source_sheet.getLastRow();
var inputs = source_sheet.getRange('A' lastRow).getValues().flat();
var days = target_sheet.getRange('A1:A').getValues().flat();
var codes = target_sheet.getRange('B1:B').getValues().flat();
inputs.forEach(function(input, count){
let found = false;
for(var i = 0; i < days.length; i ){
if(days[i].trim() == input.trim()){
source_sheet.getRange('B' (count source_sheet.getLastRow())).setValue(codes[i]);
Logger.log(codes[i]);
found = true;
break;
}
}
if (!found) { Logger.log("News not found"); }
});
}
Или просто,
function test() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = sheet.getSheetByName("Test1");
var target_sheet = sheet.getSheetByName("Test2");
var lastRow = source_sheet.getLastRow();
var inputs = source_sheet.getRange('A' lastRow).getValues().flat();
var days = target_sheet.getRange('A1:A').getValues().flat();
var codes = target_sheet.getRange('B1:B').getValues().flat();
inputs.forEach(function(input, count){
for(var i = 0; i < days.length; i ){
if(days[i].trim() == input.trim()){
source_sheet.getRange('B' (count source_sheet.getLastRow())).setValue(codes[i]);
Logger.log(codes[i]);
return;
}
}
Logger.log("News not found");
});
}
Ответ №2:
function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh1 = ss.getSheetByName("Sheet0");
var sh2 = ss.getSheetByName("Sheet1");
var lastRow = sh1.getLastRow();
var vs1 = sh1.getRange(1,1,sh1.getLastRow()).getValues().flat().map(e => e.trim());
var vs2 = sh2.getRange(1,1,sh2.getLastRow(),2).getValues();
vs2.forEach(r => {
if(~vs1.indexOf(r[0].trim())) {
Logger.log(r[1]);
}
});
}