Creando archivos Excel desde Java con Apache POI

Estándar

Como parte de un proyecto que maneje datos monetarios, como lo son precios es posible que se le solicite la posibilidad de exportar los datos del sistema a una hoja de calculo, con el fin de que los departamentos adecuados puedan realizar los cálculos y cuentas que les  sean necesarios.

Ya que la hoja de Calculo mas popular del mercado es Microsoft Excel, es una buena idea conocer como crear archivos que puedan ser abiertos y editados por este programa, a la vez que usar ese formato reduce riesgos de que ruido o problemas de importación hagan el archivo ilegible o los datos incorrectos.

Apache POI

Para la generación del los archivos Excel haremos uso de las librerías Apache POI, las cuales puede obtener en la pagina: http://poi.apache.org/ .

Para este punto ya sabra como agregar librerias a un proyecto de Eclipse, en caso de que no puedo recomendar la entrada: https://hashblogeando.wordpress.com/2014/04/27/crear-una-libreria-en-eclipse/ donde podra ver como llevar a cabo este procedimiento.

Figura 1 - Librerias POI

Figura 1 – Librerias POI

 

Codigo.

package mx.hashSoft.excel;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class Excel {

static public void main(String[] args) {

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(“Reporte de productos”);

Row fila = sheet.createRow(0);
File archivo = new File(“ejemplo.xls”);
Cell celda;

String[] titulos = { “id”, “Cantidad”, “Consumo”, “Precio compra”, “Precio Venta” };
Double[] datos = { 1.0, 10.0, 45.0, 14.50, 30.50 };

int i;

// Creamos el encabezado

for (i = 0; i < titulos.length; i++) {
      celda = fila.createCell(i);
      celda.setCellValue(titulos[i]);
}

// Nueva fila

fila = sheet.createRow(1);

for (i = 0; i < datos.length; i++) {
      celda = fila.createCell(i);
      celda.setCellValue(datos[i]);
}

// Escribimos el archivo
try {
      FileOutputStream out = new FileOutputStream(archivo);
      workbook.write(out);
      out.close();

      System.out.println(“Archivo creado exitosamente!”);

} catch (IOException e) {
      System.out.println(“Error de escritura”);
e.printStackTrace();
}
}
}

Comentarios del código.

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

Estas son las librerías que necesitaremos, para crear el libro de Excel, la hoja de calculo, la fila y las celdas

HSSFWorkbook workbook = new HSSFWorkbook(); – Con esto creamos un nuevo libro de trabajo, el cual contendrá todas las hojas de calculo que necesitemos crear

HSSFSheet sheet = workbook.createSheet(“Reporte de productos”); – Vía el libro de trabajo que acabamos de crear generamos una nueva hoja de calculo, a la cual también el damos un nombre, este método lo podemos usar para crear cuantas hojas necesitemos

Row fila = sheet.createRow(0); – Creamos una nueva fila de celdas en la hoja de calculo, el numero de dicha fila sera el argumento de la función mas uno ya que Excel no maneja filas cero

File archivo = new File(“ejemplo.xls”); – El archivo en el que guardaremos la hoja de calculo, en este caso estamos creando una hoja de Excel formato 2003 asi que recuerde usar la extensión correcta.

Cell celda; – Esta variable hara referencia a una celda de la hoja de calculo, se usara posteriormente

celda = fila.createCell(i); – Con esto creamos una celda en la fila indicada, el numero que pasemos como argumento mas 1 sera la columna en la que dicha celda se ubicara

celda.setCellValue(titulos[i]); – Con este método especificamos el contenido de la celda, este método en particular tiene sobrecargas para manejar todos los tipos de datos que maneja excel

fila = sheet.createRow(1); – Con este método creamos una nueva fila ubicada en la posición siguiente

 FileOutputStream out = new FileOutputStream(archivo); – Creamos un flujo de datos de salida, el cual apuntara al archivo que creamos previamente y con el cual guardaremos el archivo.

workbook.write(out); – El método write almacena todo el contenido del libro de excel vía el flujo de datos que previamente creamos

out.close(); – Cerramos el flujo de datos, de modo que los datos se almacenen en disco duro.

Una vez que ejecute el programa obtendrá en la carpeta del proyecto algo similar al de la figura 2

Figura 2 - Archivo de salida

Figura 2 – Archivo de salida

Y cuando abra el archivo con Excel o con LibreOffice vera la salida mostrara en la figura 3

Figura 3 - Salida

Figura 3 – Salida

Algo que comentar es que este ejemplo crea un archivo Excel en formato Office 2003, las librerías POI también permiten generar archivos xlsx (Office 2007 y  superior) lo cual se describe en esta entrada: Creando archivos Excel en formato .xlsx

Espero que el ejemplo le de los datos necesarios para poder aplicar esto en alguna forma, que fuera útil y nos vemos en otra entrada.