Trabajo con Excel en Java: Apache POI y alternativas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Excel en Java: resumen de bibliotecas y ejemplos de código



Java es uno de los lenguajes más populares para el desarrollo empresarial, donde a menudo surge la necesidad de interactuar con hojas de cálculo de Microsoft Excel (formatos .xls y .xlsx). Ya sea para exportar informes, importar datos desde un CRM o automatizar informes contables, no se puede prescindir de una herramienta confiable para trabajar con Excel. En este artículo, revisaremos las principales bibliotecas para Java, sus capacidades, ventajas y desventajas, y proporcionaremos ejemplos prácticos de código.



Bibliotecas populares para trabajar con Excel en Java



Hoy en día, existen varias soluciones maduras. La elección de una biblioteca específica depende de la versión de Excel, el volumen de datos y la funcionalidad requerida.



  • Apache POI — el estándar de facto. Soporta ambos formatos (.xls y .xlsx), permite leer, escribir, formatear celdas, trabajar con fórmulas, gráficos y macros. Es pesada, pero la biblioteca más potente.
  • JExcelApi (jxl) — una alternativa más ligera, pero solo soporta el formato antiguo .xls. Adecuada para tareas simples donde no se necesita soporte para .xlsx.
  • EasyExcel (Alibaba) — una versión ligera basada en POI, optimizada para trabajar con archivos grandes y procesamiento por flujo. Ideal para importar/exportar millones de filas.
  • OpenCSV — no es directamente para Excel, sino para trabajar con CSV (que Excel abre). Es ideal para el intercambio simple de datos tabulares sin formato.


Ejemplo 1: Lectura de un archivo Excel con Apache POI



Consideremos un escenario básico: abrir el archivo data.xlsx y mostrar el contenido de la primera hoja en la consola.



import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;

public class ReadExcelExample { public static void main(String[] args) { String filePath = "data.xlsx";

try (FileInputStream fis = new FileInputStream(filePath); Workbook workbook = new XSSFWorkbook(fis)) {

Sheet sheet = workbook.getSheetAt(0); // primera hoja

for (Row row : sheet) { for (Cell cell : row) { switch (cell.getCellType()) { case STRING: System.out.print(cell.getStringCellValue() + "\\t"); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + "\\t"); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + "\\t"); break; default: System.out.print("?\\t"); } } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } }}


Ejemplo 2: Escritura de datos en Excel con formato



Crearemos un nuevo archivo report.xlsx con encabezados y datos, resaltando los encabezados en negrita.



import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;

public class WriteExcelExample { public static void main(String[] args) { try (Workbook workbook = new XSSFWorkbook()) { Sheet sheet = workbook.createSheet("Informe");

// Estilo para los encabezados CellStyle headerStyle = workbook.createCellStyle(); Font headerFont = workbook.createFont(); headerFont.setBold(true); headerFont.setFontHeight

Recommendations