Genera Documentos Word desde Java

En esta nueva entrada, les explicaré una de las maneras existentes para que podamos generar un documento de Word desde nuestra aplicación desarrollada en Java, esto con ayuda del api llamada Apache POI.

Pues para empezar debemos descargar Apache POI. Esta api nos permite generar diferentes documentos del Office de Microsoft, en esta oportunidad nos avocaremos a generar documentos para Word. Una vez descargada; procedemos a descomprimir los archivos y agregaremos todos los archivos .jar en las Libraries de nuestro proyecto en Java. (En mi caso uso el IDE Netbeans).

Luego de agregar todos los .jar ubicados dentro de la carpeta que habíamos descargado, ya podemos empezar a trabajar la generación de nuestro documento.

Previos:

  • Este documento lo generaremos combinando dos maneras de ingreso de texto (GUI y código)
  • El documento constara de dos partes: Titulo y un Párrafo.
  • La GUI será básica con solo una caja de texto (en la que ingresaremos el titulo del documento) y un botón.


Paso 1:

Vamos a declarar dos variables, en una tendremos el titulo del documento y en la otra el contenido del párrafo.

 
String tituloDocumento = titulo.getText();
String contenidoParrafo = "Este es un documento de prueba, generado para el blog Codigo de Relleno demostrando la funcionalidad de Apache POI. ";


Paso 2:

Luego declaramos nuestro documento de la siguiente manera:


//Creamos el documento
XWPFDocument documento = new XWPFDocument();
        
//Declaramos el titulo y le asignamos algunas propiedades
XWPFParagraph titulo_doc = documento.createParagraph();
titulo_doc.setAlignment(ParagraphAlignment.CENTER);
titulo_doc.setVerticalAlignment(TextAlignment.TOP);
        
//Declaramos el parrafo y le asignamos algunas propiedades
XWPFParagraph parrafo = documento.createParagraph();
parrafo.setAlignment(ParagraphAlignment.BOTH);


Paso 3:

Una vez instanciadas las variables, ahora procedemos a dar formato a nuestro documento:

 
//Para el titulo
XWPFRun r1 = titulo_doc.createRun();
r1.setBold(true);
r1.setText(tituloDocumento);
r1.setFontFamily("Arial");
r1.setFontSize(14);
r1.setTextPosition(10);
r1.setUnderline(UnderlinePatterns.SINGLE);
        
//Para el parrafo
XWPFRun r2 = parrafo.createRun();
r2.setText(contenidoParrafo);
r2.setFontSize(12);
r2.addCarriageReturn();


Paso 4:

Para finalizar procedemos a escribir nuestro documento, en un FileOutputStream:


try {
    FileOutputStream word = new FileOutputStream(tituloDocumento+".docx");
    documento.write(word);
    word.close();
    Desktop.getDesktop().open(tituloDocumento+".docx");
} catch (FileNotFoundException ex) {
    Logger.getLogger(JF_Validar.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
    Logger.getLogger(JF_Validar.class.getName()).log(Level.SEVERE, null, ex);
}



Y eso fue todo, así es como se puede generar documentos de Word en Java con Apache POI, Espero que les sea de utilidad.
Dudas y/o sugerencias serán bienvenidas.


PD: Compártelo en tus redes sociales!

Siguiente
« Anterior
Anterior
Siguiente »

7 comentarios

Write comentarios
Unknown
AUTHOR
2 de agosto de 2016, 8:43 p.m. delete

cual es exactamente es la libreria que debo de tener de apache? es que no se cual descargar o en que parte del link apache viene?

Reply
avatar
Unknown
AUTHOR
3 de agosto de 2016, 9:00 a.m. delete

Pues escoge uno de los Binary Distribution del Apache POI, y adjuntas esa libreria en tu proyecto. Saludos

Reply
avatar
Unknown
AUTHOR
10 de enero de 2018, 3:09 p.m. delete

aquí tengo un problema
Desktop.getDesktop().open(tituloDocumento+".docx");
me dice que tituloDocumento es incompatible e intente convertirlo de tipo File pero me sale lo mismo espero puedas ayudarme

Reply
avatar
4 de febrero de 2018, 7:01 a.m. delete

no me quiere funcionar y no se que estoyy haciendo mal
String tituloDocumento = "HOLA MUNDO";
String contenidoParrafo = "Este es un documento de prueba, generado para el blog Codigo de Relleno demostrando la funcionalidad de Apache POI. ";
//Creamos el documento
XWPFDocument documento = new XWPFDocument();
//Declaramos el titulo y le asignamos algunas propiedades
XWPFParagraph titulo_doc = documento.createParagraph();
titulo_doc.setAlignment(ParagraphAlignment.CENTER);
titulo_doc.setVerticalAlignment(TextAlignment.TOP);

//Declaramos el parrafo y le asignamos algunas propiedades
XWPFParagraph parrafo = documento.createParagraph();
parrafo.setAlignment(ParagraphAlignment.BOTH);
//Para el titulo
XWPFRun r1 = titulo_doc.createRun();
r1.setBold(true);
r1.setText(tituloDocumento);
r1.setFontFamily("Arial");
r1.setFontSize(14);
r1.setTextPosition(10);
r1.setUnderline(UnderlinePatterns.SINGLE);
//Para el parrafo
XWPFRun r2 = parrafo.createRun();
r2.setText(contenidoParrafo);
r2.setFontSize(12);
r2.addCarriageReturn();
try {
FileOutputStream word = new FileOutputStream(tituloDocumento+".docx");
documento.write(word);
word.close();
//Desktop.getDesktop().open(tituloDocumento+".docx");
} catch (FileNotFoundException ex) {
Logger.getLogger(CrearWork.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(CrearWork.class.getName()).log(Level.SEVERE, null, ex);
}

me genera error en la primera linea

Reply
avatar
Unknown
AUTHOR
15 de marzo de 2019, 11:27 a.m. delete

buen post.. ya lo inplemente y me ha funcionado correctamente... alguien me podria apoyar indicando como puedo escribir en un archivo existente que tengo en una ruta especifica.gracias

Reply
avatar
Unknown
AUTHOR
15 de marzo de 2019, 11:28 a.m. delete

buen post.. ya lo inplemente y me ha funcionado correctamente... alguien me podria apoyar indicando como puedo escribir en un archivo existente que tengo en una ruta especifica.gracias

Reply
avatar