spreadsheetapp sheets sheet scripts script google example data apps app google-apps-script google-spreadsheet gs-conditional-formatting

google-apps-script - example - google sheets scripts data validation



Hoja de cálculo de Google: secuencia de comandos para cambiar el color de la fila cuando una celda cambia el texto; (5)

Tengo una hoja de cálculo de Google donde guardo una lista de errores y cuando soluciono un error, cambio el estado de "No iniciado" a "Completo". Quiero escribir un script para la hoja de cálculo de Google Docs de manera que cada vez que cambie el estado a "Completar" toda la fila se resalte en un cierto color.

Ya sé que Google Spreadsheet ya tiene "cambiar el color en el texto", pero esa función solo cambia el color de la celda y no cambia el color de toda la fila.


Creo que es más simple (aunque sin una secuencia de comandos) suponiendo que la columna de Status es ColumnS.

Seleccione ColumnS y borre el formateo de la misma. Seleccione todo el rango para formatear y Formato, Formato condicional ..., Formato de celdas si ... La Custom formula is y:

=and($S1<>"",search("Complete",$S1)>0)

con relleno de elección y Listo .

Esto no es sensible a las mayúsculas y minúsculas (cambie la search para find ) y resaltará una fila donde ColumnS contiene el Me gusta de Now complete (aunque también Not yet complete ).


La respuesta de user2532030 es la respuesta correcta y más simple.

Solo quiero agregar, que en el caso, donde el valor de la celda determinante no es adecuado para una coincidencia de RegEx, encontré la siguiente sintaxis para que funcione igual, solo con valores numéricos, relaciones et.c .:

[Custom formula is] =$B$2:$B = "Complete" Range: A2:Z1000

Si la columna 2 de cualquier fila (fila 2 en el script, pero el $ inicial significa que puede ser cualquier fila) textualmente equivale a "Completar", haga X para el rango de la hoja completa (excluyendo la fila del encabezado (es decir, comenzando desde A2 en lugar de A1)).

Pero, obviamente, este método también permite operaciones numéricas (aunque esto no se aplica a la pregunta de Op), como:

=$B$2:$B > $C$2:$C

Entonces, haz las cosas, si el valor de col B en cualquier fila es más alto que el valor de col C.

Una última cosa: lo más probable es que esto solo se aplique a mí, pero fui lo suficientemente estúpido como para olvidarme repetidamente de elegir que la fórmula personalizada esté en el menú desplegable, dejándola en Texto contiene . Obviamente, esto no flotará ...


Tenga en cuenta que este es un hilo antiguo, pero después de ver muchos scripts como este, noté que puede hacer esto solo con el formato condicional.

Asumiendo que el "Estado" era Columna D:

Resalte celdas> clic derecho> formateo condicional. Seleccione "Fórmula personalizada es" y configure la fórmula como

=RegExMatch($D2,"Complete")

o

=OR(RegExMatch($D2,"Complete"),RegExMatch($D2,"complete"))

Editar (gracias a Frederik Schøning)

=RegExMatch($D2,"(?i)Complete") luego configure el rango para cubrir todas las filas, por ejemplo, A2:Z10 . Esto no distingue entre mayúsculas y minúsculas, por lo que coincidirá con Complete, Complete o CoMpLeTe.

A continuación, puede agregar otras reglas para "No iniciado", etc. El $ es muy importante. Denota una referencia absoluta. Sin ella, la celda A2 miraría D2, pero B2 miraría E2, por lo que obtendría un formato incoherente en cualquier fila determinada.


Usé el script de GENEGC, pero lo encontré bastante lento.

Es lento porque escanea toda la hoja en cada edición.

Así que escribí método mucho más rápido y más limpio para mí y quería compartirlo.

function onEdit(e) { if (e) { var ss = e.source.getActiveSheet(); var r = e.source.getActiveRange(); // If you want to be specific // do not work in first row // do not work in other sheets except "MySheet" if (r.getRow() != 1 && ss.getName() == "MySheet") { // E.g. status column is 2nd (B) status = ss.getRange(r.getRow(), 2).getValue(); // Specify the range with which You want to highlight // with some reading of API you can easily modify the range selection properties // (e.g. to automatically select all columns) rowRange = ss.getRange(r.getRow(),1,1,19); // This changes font color if (status == ''YES'') { rowRange.setFontColor("#999999"); } else if (status == ''N/A'') { rowRange.setFontColor("#999999"); // DEFAULT } else if (status == '''') { rowRange.setFontColor("#000000"); } } } }


//Sets the row color depending on the value in the "Status" column. function setRowColors() { var range = SpreadsheetApp.getActiveSheet().getDataRange(); var statusColumnOffset = getStatusColumnOffset(); for (var i = range.getRow(); i < range.getLastRow(); i++) { rowRange = range.offset(i, 0, 1); status = rowRange.offset(0, statusColumnOffset).getValue(); if (status == ''Completed'') { rowRange.setBackgroundColor("#99CC99"); } else if (status == ''In Progress'') { rowRange.setBackgroundColor("#FFDD88"); } else if (status == ''Not Started'') { rowRange.setBackgroundColor("#CC6666"); } } } //Returns the offset value of the column titled "Status" //(eg, if the 7th column is labeled "Status", this function returns 6) function getStatusColumnOffset() { lastColumn = SpreadsheetApp.getActiveSheet().getLastColumn(); var range = SpreadsheetApp.getActiveSheet().getRange(1,1,1,lastColumn); for (var i = 0; i < range.getLastColumn(); i++) { if (range.offset(0, i, 1, 1).getValue() == "Status") { return i; } } }