Get it on Google Play

Importación y exportación de datos a Excel con apache POI

26-05-2016
 
Apache POI

Apache POI

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);
	}

Leave a Reply

© Albert Coronado Calzada