Apache POI es una API Java para importar y exportar datos para documentos Microsoft(Excel, Word, Project, etc.). En este post vamos a ver un ejemplo de como exportar e importar datos con Microsoft Excel.
Primero debemos descargar Apache POI y sus dependencias de su web https://poi.apache.org/download.html.
Exportar datos
Para generar un fichero Excel y guardarlo en un fichero podemos hacerlo siguiente el ejemplo(Con ancho de columnas y negritas y todo!):
/* Creamos el documento y la primera hoja(Clientes) */ HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Clientes"); /* Configuramos ancho columna 1, las otras ya quedan bien por defecto */ sheet.setColumnWidth((short) 0,(short) 5000); /* Configuramos los estilos */ HSSFFont bold = workbook.createFont(); bold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); HSSFCellStyle styleBold = workbook.createCellStyle(); styleBold.setFont( bold ); /* Definimos los datos a guardar */ Vector<Object[]> data = new Vector<Object[]>(); data.add( new Object[] {"Name", "NIS", "Score"} ); data.add( new Object[] {"Pepe Ruvianes", "010101", "8"} ); data.add( new Object[] {"Juan Loco", "2576", "7"} ); data.add( new Object[] {"Julia Dos", "934856", "9"} ); /* Guardamos los datos en el documento */ int rownum = 0; for (Object [] objArr : data) { HSSFRow row = sheet.createRow(rownum++); short cellnum = 0; for (Object obj : objArr) { HSSFCell cell = row.createCell(cellnum++); if ( row==1 ) cell.setCellStyle( styleBold ); if(obj instanceof Date) cell.setCellValue((Date)obj); else if(obj instanceof Boolean) cell.setCellValue((Boolean)obj); else if(obj instanceof Double) cell.setCellValue((Double)obj); else if(obj instanceof Integer) cell.setCellValue((Integer)obj); else cell.setCellValue(""+obj); } } /* Guardamos el archivo, en este caso lo devolvemos por un servlet */ response.setContentType("application/pdf"); response.addHeader("Content-disposition", "inline; filename=" + URLEncoder.encode(filename+".xls", "UTF-8")); OutputStream os = response.getOutputStream(); workbook.write(os); os.flush(); os.close();
En fin, no es complicado adaptar el ejecmplo para cualquier situación.
Importar datos
Ahora vamos a ver como hacemos lo contrario, importar los datos de un archivo Excel:
/* Leemos el archivo y seleccionamos la primera hoja */ HSSFWorkbook workbook = new HSSFWorkbook( event.getFile().getInputstream() ); HSSFSheet sheet = workbook.getSheetAt(0); /* Leemos todo el Excel */ int row=0; HSSFRow r=sheet.getRow(row); while ( r!=null ) { System.out.print( r.getCell( (short) 1 ).toString()+” \t” ); System.out.print( r.getCell( (short) 2 ).toString()+” \t” ); System.out.println( r.getCell( (short) 3 ).toString()+” \t” ); if ( row==0 ) System.out.println(“===========================================”); row++; r=sheet.getRow(row); }