API POI de Apache. Hojas de Calculo. yII

Publicado el 28 abril 2015 por Instintobinario

En el anterior artículo sobre la API POI de Apache hablamos de cómo se puede leer el contenido de una hoja de Excel desde un programa de Java. Pero puede que lo que queramos sea crear una nueva hoja de cálculo de Excel. Ésta API de Apache también nos permite hacerlo. Esto nos permitirá organizar datos de forma bastante eficiente cuando no necesitemos un base de datos. Con esta segunda parte finalizaré la explicación de ésta API, de momento al menos ya que se pueden hace muchas más cosas con ella.

Los elementos que utilizaremos en éste articulo pertenecen al mismo paquete que los del anterior: ss.usermodel. Si se queréis profundizar en este tema, igual que con el anterior, podéis acudir a la documentación oficial de apache para ésta API en éste enlace. Si lo que necesitáis es una guía de referencia de las clases y métodos es mejor que visitéis el Java doc del API.

 Creación de un Libro de Excel

Para la creación de un nuevo libro de Excel (en adelante Workbook), en modo escritura, vamos a utilizar la clase WorkbookFactory, igual que en el articulo anterior, pero le pasaremos como parámetro un OutputStream. El código es el siguiente:

OutputStream fOS = new FileOutputStream("workbook.xls");
Workbook wb = WorkbookFactory.create(fOS);

Una vez creado el Workbook, ya no necesitamos el OutputStream, hasta que vayamos a escribir los cambios, así que ya podemos cerrarlo. Además, hay que tener en cuenta que el OutputStream lanza una excepción IOException, y la creación del Workbook lanza InvalidFormatException para poder capturarlas.

Escritura de celdas de un Workbook

Una vez que tenemos el nuevo Workbook ya podemos crear las hojas que necesitemos

Sheet sh = wb.createSheet("Hoja 1");

Si queremos estar seguros de que el nombre de la hoja no existe, debemos crear el siguiente String que le pasaremos al método createSheet:

String safeName = WorkbookUtil.createSafeSheetName("[O'Brien's sales*?]");

Una vez que tenemos la hoja que necesitamos crear las filas para poder crear celdas en ella después. Debemos tener en cuenta que el orden de las ambas es en base 0:

Row row = sheet.createRow((short)0);
Cell cell = row.createCell(0);

Ahora ya podemos poner valores en las celdas. Para ello utilizaremos el siguiente método:

cell.setCellValue( x );

El valor x puede ser de diferentes tipos: cell.setCellValue( x );, java.util.Calendar, java.util.Date, doubleRichTextString (Especial de ésta API) o java.lang.String.

También podemos asignar otros valores a la celda:

  • Fórmula -> cell.setCellFormula(java.lang.String formula);
  • Error -> cell.setCellErrorValue(byte value);

Las celdas también pueden recibir un estilo o un comentario, con las dos siguientes funciones respectivamente:

cell.setCellStyle(CellStyle style);
cell.setCellComment(Comment comment);

Sin embargo los estilos salen fuera del ámbito en el que se centra éste archivo, por lo que no entraré en ello.

Guardado de los cambios al Workbook y cierre

Cuando hemos acabado con todo lo que queremos escribir en el Workbook que creamos al inicio, debemos escribir los cambios en el archivo de salida y cerrarlo:

FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
wb.close();
fileOut.close();

Cuidado con la posible excepción IOException, ya que será necesario capturarla.

Espero que os resulten útiles éstos dos artículos y que con ellos podáis iniciaros en la lectura/escritura de hojas de cálculo desde Java con mayor facilidad. Para coger soltura lo mejor es hacer un par de programas de prueba que permitan  ver como funcionan exactamente las funciones.

El artículo API POI de Apache. Hojas de Calculo. yII apareció por primera vez en Instinto Binario.