Color en reporte Excel desde Java. Estilos en las celdas.
- 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
/** * * @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(); } }
/** * 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.
Buen post. Gracias por el aporte
ResponderEliminarExcelente Sergio Jose, gracias por comentar.
EliminarSuerte!!!
Gracias, claro y realmente lo que se necesita
ResponderEliminarGracias a ti por comentar amig@, Saludos!
EliminarBuen aporte me sirvio mucho gracias :D
ResponderEliminarAmig@, gracias por comentar! Saludos!
EliminarAsi es como creo mi archivo excel, como podria agregar estilos a mi celdas, si todas ellas se llenan dinamicamente:
ResponderEliminarEste es mi codigo
//creacion de archivo excel
final int a=40;//Horas que se deben registrar por semana
try{
Thread t= new Thread(){
public void run(){
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet hoja= workbook.createSheet("REGISTRO INCORRECTO");
Este viene siendo como mi cabezera
//se crean los campos de la base de datos para que aparezcan en el archivo excel
XSSFRow fila= hoja.createRow(0);
fila.createCell(0).setCellValue("NOMBRE");
fila.createCell(1).setCellValue("HORAS REGISTRADAS");
fila.createCell(2).setCellValue("TOTAL DE HORAS");
fila.createCell(3).setCellValue("HORAS POR REGISTRAR");
jProgressBar1.setMaximum(jTable1.getRowCount());
XSSFRow filas;
Rectangle rect;
for(int z=0; z<jTable1.getRowCount(); z++){
rect= jTable1.getCellRect(z,0,true);
try{
jTable1.scrollRectToVisible(rect);
}catch(java.lang.ClassCastException e){}
jTable1.setRowSelectionInterval(z, z);
jProgressBar1.setValue(z+1);
//SE CREAN LAS FILAS DE LA HOJA DE EXCEL
filas= hoja.createRow(z+1);
filas.createCell(0).setCellValue(jTable1.getValueAt(z,0).toString());
filas.createCell(1).setCellValue(jTable1.getValueAt(z,1).toString());
filas.createCell(2).setCellValue(a);
//este try es para poder aumnetar o disminuir la lentitud de la barra de cargar PROGRESSBAR
try{
Thread.sleep(100);
}catch (InterruptedException ex){
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE,null,ex);
}
}//for
jProgressBar1.setValue(0);
jProgressBar1.setString("ARCHIVO EXCEL CREADO");
try{
workbook.write(new FileOutputStream(new File(ruta+"//Error_RegEsfuerzo.xlsx")));
Desktop.getDesktop().open(new File(ruta+"//Error_RegEsfuerzo.xlsx")); // para abrir excel autimaticamente
}catch(IOException ex){
Tal vez sea igual que tu ejemplo pero si me gustaria mas o menos una orientacion, soy nuevo con los exceles.
saludos
Bastante bueno el tutorial! Da gusto ver que hay personas que comparten sus conocimientos para apoyar a quienes estamos aprendiendo! Saludos...
ResponderEliminarHola Francisco, esa es la idea, compartir el conocimiento ya que todos pasamos por ahí! Saludos!
Eliminar