domingo, 7 de abril de 2013

Crear un Excel desde Java usando Apache POI

Buenas en este post voy a continuar con el tema de las retribuciones en especie pero desde un punto de vista más informático y voy a crear una sencilla aplicación para escritorio en Java que según los valores entrados en unas cajas de texto calculará el importe de la retribución en especie. Con esto vamos a automatizar el cálculo y así repasamos un poco como crear este tipo de aplicaciones con Netbeans. A parte voy explicar lo sencillo que es crear un fichero Excel desde Java. El Excel con los cálculos de la retribución en especie anual se podría adjuntar a la nómina de mes. Para crear Excels voy a usar una librería llamada apache Poi disponible en http://poi.apache.org/ Hay más librerías para Java iguales de buenas y que nos permiten automatizar la creación de Excels.

En un siguiente post explicaré cómo crear un pdf con “la factura que la empresa emite al trabajador” para ir repercutiendo al trabajador la parte proporcional del IVA que la empresa se ha deducido por la adquisición del vehículo. Entonces usaré otra librería que sirve tanto para proyectos para Java como para Net llamada iTextSharp o iText.  Como ya he comentado en el post anterior sólo se tendrá que repercutir el IVA al trabajador siempre que la empresa haya optado por deducirse el 100 % del IVA soportado en la compra o renting del vehículo que cede para el uso del trabajador.
Pues bien primero cuelgo aquí el proyecto ya acabado a la espera de añadir la opción de crear pdfs que será en el siguiente post.

Como vemos es una aplicación muy sencilla que tiene varias cajas de texto para entrar los datos, un botón para calcular los importes y otro botón para crear un Excel. El código para la creación de un Excel en Java es muy sencillo. Hay que entender los siguientes pasos:

Añadir los “import” necesarios:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

Crear un libro de Excel:
Workbook libro = new HSSFWorkbook();

Añadir una hoja al libro:
Sheet hoja = libro.createSheet("Nombre_Hoja");

Crear una fila:
Row fila1 = hoja.createRow(0);

Se accede a la celda 2 de la fila 1:
Cell filaCell = fila1.getCell(1);

Se añade contenido a la celda:
filaCell.setCellValue("Hola");

Una vez todo guardamos el libro:
OutputStream output = new FileOutputStream(“prueba.xls”);
libro.write(output);
output.close();

En la aplicación se puede ver que el proceso de guardado de la hoja Excel es un poco más complejo ya que he usado un JFileChooser. Se puede crear un método al que se le pase el libro de Excel y que lo guarde.
El código sería el siguiente:
    private void CrearExcel(Workbook libro) throws Exception {
        JFileChooser fc = null;
        FileNameExtensionFilter filter = null;
        //Set up the file chooser.
        if (fc == null) {
            fc = new JFileChooser();
            fc.setDialogTitle("Guardar");
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            filter = new FileNameExtensionFilter("Libro de Excel", "xls");
            fc.addChoosableFileFilter(filter);
        }
        //Show it.
        int returnVal = fc.showSaveDialog(this);
        //Process the results.
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            String ext = "";
            if (fc.getFileFilter() == filter) {
                //Set xls extension only to xls files
                String extension = file.getAbsolutePath();
                if (!extension.endsWith(".xls")) {
                    ext = ".xls";
                }
            }
            try (
                    OutputStream output = new FileOutputStream(file + ext);) {
                libro.write(output);
                output.close();
            } catch (FileNotFoundException e) {
                System.err.println(e.getMessage());
            } catch (IOException e) {
                System.err.println(e.getMessage());
            }
        }
        //Reset the file chooser for the next time it's shown.
        fc.setSelectedFile(null);
    }

Como siempre como el proceso puede ser complejo cuelgo un vídeo donde explico cómo se haría.
Como he dicho en el siguiente post me centraré en crear pdfs con Java y a partir de aquí hablaré sobre bases de datos en Java.

1 comentario:

  1. Hola Raúl,

    Muchas gracias por este post, me voy a apoyar en él ya que debo crear un excel en una aplicación que estoy programando para mi PFC de mi ingeniería.

    ResponderEliminar