Tengo un script de aplicación de Google que se supone que debe leer cada fila, ver si la columna C está marcada como "verdadera" y si es necesario eliminar la validación de datos verdadera de todas las columnas de esa fila. El código de ejemplo siguiente no funciona. Espero que alguien pueda ayudarme a educarme sobre por qué.
function skl(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet2 = ss.getSheetByName('Savings Register'); var columnO2 = sheet2.getRange(2, 1, sheet2.getLastRow()-1, 1); var oValues2 = columnO2.getValues(); for (var i = 0; i < oValues2.length; i++) { if (oValues2[i][2] == 'TRUE') { sheet2.getRange(i + 2, 1, 1, 9).setDataValidation(null); } } } Si lo cambio a if (oValues2[i][0] == 'TRUE') el código funciona cuando la columna A es verdadera... pero mi criterio es la columna C. ¿No debería funcionar este código siendo la columna C el número? 2?
var columnO2 = sheet2.getRange(2, 1, sheet2.getLastRow()-1, 1);Su rango esencialmente especifica "A2: A", por lo tanto, la columna C no está incluida.
Aquí hay una solución:
function myFunction() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Savings Register'); const data = sheet.getSheetValues(2, 1, sheet.getLastRow()-1, sheet.getLastColumn()); const targetRows = data.filter(i => i[2] === true); for (let row of targetRows) { const index = data.findIndex(i => i === row)+2; sheet.getRange(index, 1, 1, 9).setDataValidation(null); } }Si tiene algún problema, por favor hágamelo saber.