Para crear un archivo de excel en Java usaremos las bibliotecas POI de Apache, por lo que agregaremos la dependencia de Maven a nuestro proyecto.
-Cómo leer un archivo de texto -Cómo crear un archivo XML -Cómo crear un archivo ZIP -Como crear un PDF |
La dependencia que que debes agregar en tu archivo POM es la siguiente:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency>
El código es el siguiente:
package com.decodigo.ejemplos; import java.io.File; import java.io.FileOutputStream; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; /** * * @author decodigo */ public class CrearExcel { public static void main(String args[]) { //Crear libro de trabajo en blanco Workbook workbook = new HSSFWorkbook(); //Crea hoja nueva Sheet sheet = workbook.createSheet("Hoja de datos"); //Por cada línea se crea un arreglo de objetos (Object[]) Map<String, Object[]> datos = new TreeMap<String, Object[]>(); datos.put("1", new Object[]{"Identificador", "Nombre", "Apellidos"}); datos.put("2", new Object[]{1, "María", "Remen"}); datos.put("3", new Object[]{2, "David", "Allos"}); datos.put("4", new Object[]{3, "Carlos", "Caritas"}); datos.put("5", new Object[]{4, "Luisa", "Vitz"}); //Iterar sobre datos para escribir en la hoja Set<String> keyset = datos.keySet(); int numeroRenglon = 0; for (String key : keyset) { Row row = sheet.createRow(numeroRenglon++); Object[] arregloObjetos = datos.get(key); int numeroCelda = 0; for (Object obj : arregloObjetos) { Cell cell = row.createCell(numeroCelda++); if (obj instanceof String) { cell.setCellValue((String) obj); } else if (obj instanceof Integer) { cell.setCellValue((Integer) obj); } } } try { //Se genera el documento FileOutputStream out = new FileOutputStream(new File("/ruta/ejemplo.xls")); workbook.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
Como puedes ver primero creamos el contenedor de toda la información de nuestro documento.
//Crear libro de trabajo en blanco Workbook workbook = new HSSFWorkbook();
Si recuerdas, un documento de excel puede tener varias hojas de trabajo. En la siguiente línea creamos al menos una a partir del objeto workbook creado anteriormente y le asignamos el nombre «Hoja de datos«.
//Crea hoja nueva Sheet sheet = workbook.createSheet("Hoja de datos");
Lo siguiente es crear la información que estará contenida en la hoja de datos.
//Por cada línea se crea un arreglo de objetos (Object[]) Map<String, Object[]> datos = new TreeMap<String, Object[]>(); datos.put("1", new Object[]{"Identificador", "Nombre", "Apellidos"}); datos.put("2", new Object[]{1, "María", "Remen"}); datos.put("3", new Object[]{2, "David", "Allos"}); datos.put("4", new Object[]{3, "Carlos", "Caritas"}); datos.put("5", new Object[]{4, "Luisa", "Vitz"});
Toda la información estará contenida en un objeto llamado datos, que es un mapa de arreglos de objetos sobre el cual iteraremos en el siguiente bloque de código.
//Iterar sobre datos para escribir en la hoja Set<String> keyset = datos.keySet(); int numeroRenglon = 0; for (String key : keyset) { Row row = sheet.createRow(numeroRenglon++); Object[] arregloObjetos = datos.get(key); int numeroCelda = 0; for (Object obj : arregloObjetos) { Cell cell = row.createCell(numeroCelda++); if (obj instanceof String) { cell.setCellValue((String) obj); } else if (obj instanceof Integer) { cell.setCellValue((Integer) obj); } } }
Del bloque anterior podrás notar que iteramos sobre un conjunto de llaves creado a partir de nuestro arreglo inicial, en esta iteración también creamos los reglones de nuestra hoja de datos con el método createRow y de forma anidada vamos creando cada una de las celdas que corresponden a cada columna por medio del método createCell.
Los datos con los que creamos nuestra hoja de cálculo pueden provenir de otra fuente de datos como una base de datos, algún archivo de texto o cualquier arreglo de datos.
Finalmente creamos el documento en excel.
try { //Se genera el documento FileOutputStream out = new FileOutputStream(new File("/ruta/ejemplo.xls")); workbook.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); }
El resultado será una hoja de cálculo como la siguiente:
Y eso es todo. Esperamos que este ejemplo de crear un archivo de excel en Java te sea de utilidad.
Más información en inglés: https://geekole.com/create-excel-file-with-apache-in-java/
Estimados, gracias por su maravillosa acotación.
Ahora bien, necesito vuestra ayuda respecto a la ruta donde sera guardado el archivo excel. Como podría hacer para que el usuario escoja la ruta donde desea se guarde el archivo excel generado?
Se guarda en la ruta del proyecto. Pero el código me da varios fallos
Habría que cambiar a formato xls y no xlsx ( no lo abre)
Y el otro fallo que me daba era que tengo que cambiar esta línea
Set keyset = datos.keySet();
pudiste arreglar lo de Set keyset = datos.keySet();? tengo el mismo problema.
saludos
para arreglar eso Set keyset = datos.keySet();? deben cambiar el String por Object.