Java – Crear archivo Excel

Para crear un archivo de excel usaremos las bibliotecas POI de Apache, por lo que agregaremos la dependencia de Maven a nuestro proyecto.

<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 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.xlsx"));
            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 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.xlsx"));
    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 sea de utilidad