Siempre existe la duda entre los desarrolladores java, de como empezar a tratar documentos Excel desde el lenguaje Java. Sea en la lectura o escritura de los mismos.
El uso masivo de archivos e informes en excel en las distintas empresas.. obligan al desarrollador estar en la capacidad de emitir reportes en excel desde una aplicación Java. Esto permitirá poder combinar la capacidad de información de una base de datos en una presentación amigable y conocida como son los archivos Excel.
Es por ello, la necesidad de dar a conocer JexcelApi una poderosa herramienta, muy útil para manejar los parámetros y valores de la conocida hoja Excel desde un programa Java. También es necesario dar a conocer que existe el proyecto Jakarta POI para el tratamiento de archivos en formato microsoft.
JavaEE con JExcelApi - jxl
Para empezar a usar jexcel desde java .. tendremos que colocar la librería jxl.jar a nuestro aplicativo. Dicha librería la podemos descargar desde sourceforge.net . Personalmente recomiendo usar esta API antes que POI para el tratamiento de archivos excel.
Veremos la sintaxis de uso .. mediante un ejemplo de escritura de excel bastante simple.
log.info("Entrando ... reporteCertificados()"); OutputStream out = null; try{ res.setContentType("application/vnd.ms-excel"); res.setHeader("Content-disposition", "attachment; filename=\"ParaCertificados.xls\""); res.setHeader("Content-type", "application/vnd.ms-excel"); //ini:formato WritableFont cabeceraFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true); WritableFont cuerpoFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false); WritableFont domicilioFont = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false); WritableCellFormat fCabecera = new WritableCellFormat(cabeceraFont); fCabecera.setAlignment(Alignment.JUSTIFY); fCabecera.setVerticalAlignment(VerticalAlignment.CENTRE); fCabecera.setBackground(Colour.CORAL); fCabecera.setBorder(Border.ALL,BorderLineStyle.THIN); WritableCellFormat fCuerpo = new WritableCellFormat(cuerpoFont); fCuerpo.setAlignment(Alignment.LEFT); fCuerpo.setBorder(Border.ALL,BorderLineStyle.THIN); WritableCellFormat fCuerpo2 = new WritableCellFormat(domicilioFont); fCuerpo2.setAlignment(Alignment.LEFT); fCuerpo2.setBorder(Border.ALL,BorderLineStyle.THIN); //fin:formato WritableWorkbook w = Workbook.createWorkbook(res.getOutputStream()); WritableSheet s = w.createSheet("Informe", 0); //Nombre de hoja s.setColumnView(0,10);//ini:seteamos el ancho de las columnas s.setColumnView(1,20); s.setColumnView(2,20); s.setColumnView(3,20); s.setColumnView(4,25); s.setColumnView(5,10); s.setColumnView(6,15); s.setColumnView(7,15); s.setColumnView(8,10); s.setColumnView(9,10); s.setColumnView(10,30); s.setColumnView(11,20); s.setColumnView(12,20); //ini: armando el excel s.addCell(new Label(0, 0, "Nº",fCabecera)); //añadiendo celdas s.addCell(new Label(1, 0, "Nro. Certificado",fCabecera)); s.addCell(new Label(2, 0, "Apellido Paterno",fCabecera)); s.addCell(new Label(3, 0, "Apellido Materno",fCabecera)); s.addCell(new Label(4, 0, "Nombres",fCabecera)); s.addCell(new Label(5, 0, "DNI",fCabecera)); s.addCell(new Label(6, 0, "Fecha Inicio",fCabecera)); s.addCell(new Label(7, 0, "Fecha Fin",fCabecera)); s.addCell(new Label(8, 0, "Año",fCabecera)); s.addCell(new Label(9, 0, "Horas",fCabecera)); s.addCell(new Label(10, 0, "Región",fCabecera)); List<map> lstData = serviceFactory.getReporteService().getDataReporte(Long.valueOf(IdTaller)); int i=1; for(Map map:lstData){ s.addCell(new Number(0,i, Integer.parseInt(map.get("ORDEN").toString()),fCuerpo)); s.addCell(new Label(1, i, StringUtils.EMPTY,fCuerpo)); s.addCell(new Label(2, i, map.get("APE_PAT").toString(),fCuerpo)); s.addCell(new Label(3, i, map.get("APE_MAT").toString(),fCuerpo)); s.addCell(new Label(4, i, map.get("NOMBRES").toString(),fCuerpo)); s.addCell(new Label(5, i, map.get("DNI").toString(),fCuerpo)); s.addCell(new Label(6, i, map.get("DIA_INI").toString()+ " de "+Utils.getMesLetras(new Integer(map.get("MES_INI").toString())) ,fCuerpo)); s.addCell(new Label(7, i, map.get("DIA_FIN").toString()+ " de "+Utils.getMesLetras(new Integer(map.get("MES_FIN").toString())),fCuerpo)); s.addCell(new Label(8, i, map.get("ANIO").toString(),fCuerpo)); s.addCell(new Label(9, i, map.get("HORAS").toString(),fCuerpo)); s.addCell(new Label(10, i, map.get("REGION").toString(),fCuerpo2)); i++; } //fin:armando el excel w.write(); w.close(); } catch (Exception ex) { log.error(ex.getMessage(),ex); sendErrorMessage(req,"errors.excel.load"); } finally { if (out != null) out.close(); } log.info("Saliendo ... reporteCertificados() - Reportes"); return null;
Para Profundizar en el Tema
- mini-tutorial-de-jexcel-con-eclipse
- sgoliver.net?page_id=265
- sgoliver.net?p=213
- jexcelapi/tutorial.html
- JExcel-PGuide.pdf
Bueno espero que les sirva la información proporcionada ... se despide su amigo edisonjc7.. y como dice un amigo ... "seguiremos socializando el conocimiento" xD... chau