Páginas

18/3/15

Estilo y color en celdas Excel desde Java

Estilo y color en celdas Excel desde Java.

Color en reporte Excel desde Java. Estilos en las celdas.

Estilos Excel Java



Para ponerle color a las celdas en un Excel desde Java es fácil, en este ejemplo vamos a construir el Excel (Si no sabes cómo hacerlo puedes aprenderlo aquí), vamos a ponerle color a las celdas dependiendo de un dato que en el mismo Excel se encuentra. Por ejemplo nos dan un requerimiento para un reporte con estas columnas "ID, NOMBRE, INGRESO" y en el mismo se pide:
  • Si el ingreso de un cliente está entre (0 - 100) esta celda debe ser de color ROJO
  • Si el ingreso de un cliente está entre (100 - 600) esta celda debe ser de color AMARILLO
  • Si el ingreso de un cliente es mayor a 600 esta celda debe ser de color VERDE
Después que ya creamos todo el Excel vamos a recorrerlo de nuevo y le vamos a dar el estilo correspondiente dependiendo del ingreso del cliente. Este es el método para que lo hagas:
 /**
  * 
  * @param hssfWorkbook = El excel completo
  * @param numCelda = el numero de la celda que cambiara
  * 
  * @author datojava.blogspot.com
  */
 public void colorCeldas(HSSFWorkbook hssfWorkbook, int numCelda) {
  HSSFSheet mySheet = hssfWorkbook.getSheetAt(0);

  // Creamos el estilo de celda del color ROJO
  HSSFCellStyle styleGroup3 = hssfWorkbook.createCellStyle();
  styleGroup3.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  styleGroup3.setFillForegroundColor(HSSFColor.RED.index);

  // Creamos el estilo de celda del color AMARILLO
  HSSFCellStyle styleGroup2 = hssfWorkbook.createCellStyle();
  styleGroup2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  styleGroup2.setFillForegroundColor(HSSFColor.YELLOW.index);

  // Creamos el estilo de celda del color VERDE
  HSSFCellStyle styleGroup1 = hssfWorkbook.createCellStyle();
  styleGroup1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  styleGroup1.setFillForegroundColor(HSSFColor.GREEN.index);

  
  // Recorrer cada columna del excel
  // Comenzamos en 1 porque la 0 es el header del excel
  for (int i = 1; i <= mySheet.getLastRowNum(); i++) {
   HSSFRow myRow = mySheet.getRow(i);

   // Recorremos sobre cada celda de la columna seleccionada
   Iterator cellIter = myRow.cellIterator();
   while (cellIter.hasNext()) {

    HSSFCell myCell = (HSSFCell) cellIter.next();
    
    // Cuando sea la celda correcta
    if (myCell.getCellNum() == numCelda) {
    
     // Hay que parsear el contenido de la celda de ser necesario, 
     // La mayoría de las veces insertamos datos como "String"
     if (Integer.parseInt(myCell.toString()) >= 0
       && Integer.parseInt(myCell.toString()) <= 100) {
       
      // Aplicamos el estilo correspondiente ROJO
      myCell.setCellStyle(styleGroup3);
     } else if (Integer.parseInt(myCell.toString()) > 100
       && Integer.parseInt(myCell.toString()) < 600) {
       
      // Aplicamos el estilo correspondiente AMARILLO
      myCell.setCellStyle(styleGroup2);
     } else if (Integer.parseInt(myCell.toString()) > 600) {
     
      // Aplicamos el estilo correspondiente VERDE
      myCell.setCellStyle(styleGroup1);
     }
    }
   }
  }
 }
Todo esta explicado en el mismo código, ojo este método es para darle estilo a las celdas una vez que el Excel ya está hecho, en el caso contrario puedes darle el estilo a la celda desde el principio. Si estas siguiendo el ejemplo anterior para crear las celdas con colores en el Excel deberías llamar este método justamente después de obtener el Excel completamente, para refrescar la memoria este es el método exportarExcel() que ejecuta el Excel, justamente en la línea 12 hacemos el llamado para cambiar el color de la celda que queremos dependiendo de el dato que esta contenga:

Método: exportarExcel
  public void exportarExcel() {

  // Llenar la cabecera y el contenido del excel
  dataModelReporte();

  // Hacer el excel con su cabecera y contenido
  HSSFWorkbook hssfWorkbook = obtenerExcel(dataModelContenido,
    dataModelCabecera, "datojava.blogspot.com");
  
  //Pasamos el "2" suponiendo que esa sea la celda
  //AQUI LA LLAMADA
  colorCeldas(hssfWorkbook, 2);

  try {
   // Guardar el Archivo
   FileOutputStream fileOutputStream = new FileOutputStream(
     "datojava.xls");
   hssfWorkbook.write(fileOutputStream);
   fileOutputStream.close();

   File file = new File("datojava.xls");

   // Abrir el archivo
   Desktop.getDesktop().open(file);

  } catch (Exception e) {
   e.printStackTrace();
  }
 } 
  

Un plus, si no sabes cómo hacer un autosize en las celdas del Excel desde Java para que aparezca todo el contenido de cada celda aprende aquí:
   /**
    * Primero obtenemos la primera hoja del excel, despues la primera
    * columna que viene siendo la cabecera y despues la cantidad de celdas
    * que tiene esa columna para darle autosize a cada celda en el for.
    */
   for (int i = 0; i < hssfWorkbook.getSheetAt(0).getRow(0)
     .getLastCellNum(); i++) {
    hssfWorkbook.getSheetAt(0).autoSizeColumn((short) i);
   }
 
Ya con este dato java no solo puedes darle color a una celda, puedes hacer muchas cosas, por ejemplo, la letra, el tamaño, color de letra, tamaño de la celda, queda a tu imaginación. Suerte.


Temas Relacionados:

2 comentarios :