El problema que estoy tratando de resolver es el siguiente. Estoy tratando de hacer un bucle que encuentre la letra "Y" y solo la Y. Quiero que sea así, si una celda tiene Y, hará que las 4 filas a la izquierda se llamen %NULL% . El problema es que hay 2 celdas por fila donde podría estar Y.
Este es el código que comencé pero no sé a dónde ir.
function Loop1(){ var sheet = SpreadsheetApp.getActive().getSheetByName("EXP50"); var data = sheet.getDataRange().getValues(); for(var i = 1; i< data.length; i++){ if(data[i][7-1] === "Y"){ sheet.getRange(i + 1, 3).setValue("%NULL%"); sheet.getRange(i + 1, 4).setValue("%NULL%"); sheet.getRange(i + 1, 5).setValue("%NULL%"); sheet.getRange(i + 1, 6).setValue("%NULL%"); } if(data[i][13-1] === "Y") { sheet.getRange(i + 1, 9).setValue("%NULL%"); sheet.getRange(i + 1, 10).setValue("%NULL%"); sheet.getRange(i + 1, 11).setValue("%NULL%"); sheet.getRange(i + 1, 12).setValue("%NULL%"); } } }Creo que su objetivo es el siguiente.
%NULL% en las columnas "C" - "F" y las columnas "I" - "L" en la misma fila.setValue se usa en el ciclo, el costo del proceso será alto.En esta respuesta, al reducir el costo del proceso, me gustaría proponer los siguientes 2 patrones.
En este patrón, se utilizan los métodos de getValues y setValues .
function Loop1() { var sheet = SpreadsheetApp.getActive().getSheetByName("EXP50"); var range = sheet.getDataRange(); var data = range.getValues(); data.forEach(r => { var [g, m] = [r[6], r[12]]; var temp = Array(4).fill("%NULL%"); if (g == "Y") r.splice(2, 4, ...temp); if (m == "Y") r.splice(8, 4, ...temp); }); range.setValues(data); }En este patrón, se utiliza TextFinder.
function Loop1() { var sheet = SpreadsheetApp.getActive().getSheetByName("EXP50"); var ranges = sheet.createTextFinder("Y").matchCase(true).matchEntireCell(true).findAll().reduce((ar, r) => { var col = r.getColumn(); var row = r.getRow(); if (col == 7) ar.push(`C${row}:F${row}`); if (col == 13) ar.push(`I${row}:L${row}`); return ar; }, []); sheet.getRangeList(ranges).setValue("%NULL%"); }En lugar de un bucle if , ¿no podrías usar algo como esto?
function Loop1(){ var sheet = SpreadsheetApp.getActive().getSheetByName("EXP50"); var data = sheet.getDataRange().getValues(); while 1 = 1: if(data[i][7-1] === "Y"){ sheet.getRange(i + 1, 3).setValue("%NULL%"); sheet.getRange(i + 1, 4).setValue("%NULL%"); sheet.getRange(i + 1, 5).setValue("%NULL%"); sheet.getRange(i + 1, 6).setValue("%NULL%"); } if(data[i][13-1] === "Y") { sheet.getRange(i + 1, 9).setValue("%NULL%"); sheet.getRange(i + 1, 10).setValue("%NULL%"); sheet.getRange(i + 1, 11).setValue("%NULL%"); sheet.getRange(i + 1, 12).setValue("%NULL%"); } } }(Disculpas, no sé si esto resolverá tu problema).