Saltar al contenido

Cómo borrar el formato condicional (no todo el formato) en el script de Google Apps

Posterior a buscar en diferentes repositorios y foros al concluir hemos hallado la respuesta que te compartimos aquí.

Solución:

Google Apps Scripts ahora admite la eliminación del formato condicional mediante clearConditionalFormatRules

var sheet = SpreadsheetApp.getActiveSheet();
sheet.clearConditionalFormatRules();

https://developers.google.com/apps-script/reference/spreadsheet/sheet#clearconditionalformatrules

Esto es posible con Google Sheets API v4, al que Apps Script puede acceder a través del Servicio de hojas avanzadas (tenga en cuenta que debe habilitarse antes de su uso, como se indica en la página vinculada). Aquí hay una secuencia de comandos que elimina todas las reglas de formato condicional en la Hoja 1 de la hoja de cálculo actual (querrá recorrer las hojas, etc.).

function clearSheet() 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var sheet = ss.getSheetByName("Sheet1");
  var sheetId = sheet.getSheetId(); 
  var format_req = 
    "requests": [
      "deleteConditionalFormatRule":  
        "index": 0,
        "sheetId": sheetId
      
    ]
  ;
  var string_req = JSON.stringify(format_req);
  while (true) 
    try 
      Sheets.Spreadsheets.batchUpdate(string_req, ssId);
    
    catch(e) 
      break;
    
  

Cada regla de formato condicional tiene un “índice” basado en 0. Eliminar la regla con el índice 0 hace que otros índices disminuyan en 1. Por lo tanto, el ciclo continúa eliminando la regla índice = 0 hasta que no haya ninguna, y se genera un error (y se detecta, saliendo del ciclo).

Esta es una forma extraña de enviar solicitudes: prefiero enviar una solicitud por lotes como esta:

  var format_req = 
    "requests": [
    
      "deleteConditionalFormatRule":  
        "index": 0,
        "sheetId": sheetId
      
    ,
    
      "deleteConditionalFormatRule":  
        "index": 1,
        "sheetId": sheetId
      
    ]
  ;

pero para hacer esto, uno debe saber cuántas reglas de formato condicional hay (y no veo cómo podría averiguarlo). Si solicita que se eliminen más reglas de las que existen en la hoja, la solicitud completa falla y no se elimina nada.

Sin servicio avanzado

Con Apps Script simple, lo mejor que se puede hacer es esto:

  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
  var backgrounds = range.getBackgrounds(); 
  var fontColors = range.getFontColor(); 
  var fontFamilies = range.getFontFamilies();
  // ... other get methods from https://developers.google.com/apps-script/reference/spreadsheet/range 

  // tricky part: modify the backgrounds, replacing the colors used in conditional formatting by white 

  range.clearFormat();
  range.setBackgrounds(backgrounds)
       .setFontColors(fontColors)
       .setFontFamilies(fontFamilies)
    // .set  other things

Aquí asumo que el formato condicional afecta solo a los fondos de las celdas. Si uno no puede filtrar los colores de fondo (lo que requiere saber exactamente qué colores se usaron en las reglas de formato condicional), los efectos del formato condicional se convertirán en colores de fondo ordinarios, lo cual es muy indeseable… puede ser mejor renunciar a configurar el colores de fondo en absoluto.

Aquí puedes ver las reseñas y valoraciones de los usuarios

Si te gustó nuestro trabajo, tienes la libertad de dejar una reseña acerca de qué le añadirías a este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *