Ahora estoy usando Google Script para un pequeño proyecto, anteriormente usé VBA pero no soy un experto en codificación.
La situación es que Values2 y Rowd2 son exactamente iguales, probé el si escribiendo el valor exacto en cualquiera de sus lugares.
Digamos, por ejemplo, que ambos son "Nombre" al depurar, ambos activan VERDADERO en el IF cuando los comparo con "Nombre", por ejemplo, [si (valores2[i] == "Nombre")]
Pero cuando los comparo directamente, obtengo un FALSO en el IF. no lo entiendo...
Intenté usar el filtro de cadenas, pero no tuve suerte :(
Este es un problema realmente simple y lamento hacerle perder el tiempo, pero realmente agradecería un poco de ayuda. Código a continuación
function Messagebox2() { var spreadsheet = SpreadsheetApp.getActive(); var sheet = SpreadsheetApp.getActive().getSheetByName("Comments"); var range = sheet.getRange("Comments!B2:B"); var values = range.getValues(); var values2 = values.filter(String); var range2 = sheet.getRange("Dashboard!A1") var rowd = range2.getValues(); var rowd2 = rowd.filter(String); for (var i = 0; i < values2.length; i++) { if (values2[i] == rowd2) { var k = values2[i] } } Logger.log(values2[0] + " " + k +" " + rowd2); }La salida es "Nombre" indefinido "Nombre"
El problema proviene del hecho de que está comparando matrices de cadenas en lugar de los valores dentro de ellas. sheet.getRange().getValues() devuelve una matriz en el formulario [[column1, column2, ...], ...] , incluso si solo tiene una columna. Entonces, las dos matrices que está utilizando son similares a las siguientes:
values2 = [["First Name"], ["Second Name"], ...] rowd = [["First Name"]]Entonces, para que su código funcione, simplemente cambie la declaración if:
if (values2[i][0] == rowd2[0][0]) { var k = values2[i][0] } La próxima vez, sugeriría registrar las variables individualmente antes de compararlas para ver si sus valores son los que cree que son. Registrar matrices junto con cadenas convierte las matrices en cadenas, por lo que no puede ver los corchetes en su propio registro. También puedes usar typeof .
function Messagebox2() { const ss = SpreadsheetApp.getActive(); const shc = ss.getSheetByName("Comments"); const shd = ss.getSheetByName('Dashbaord'); const v2 = shc.getRange(2, 2, shc.getLastRow() - 1, 1).getValues() const dba1 = shc.getRange(1, 1).getValue(); let k = ''; vs.forEach(r => { if (r[0] == dba1) { k = r[0]; } }); Logger.log(v2[0][0] + k + dba1) }