Работа с Excel в Java: Обзор библиотек и примеры кода
Несмотря на то, что PythonLib посвящён Python, Java остаётся одним из самых востребованных языков в корпоративной разработке, где работа с электронными таблицами Excel — повседневная задача. В этой статье мы рассмотрим основные библиотеки для работы с Excel в Java, их возможности и приведём практические примеры кода.
Зачем нужны библиотеки для Excel в Java?
Java не имеет встроенных средств для чтения и записи файлов Excel. Для этого используются сторонние библиотеки, которые позволяют:
- Создавать новые книги Excel (XLS и XLSX форматы).
- Читать и редактировать существующие файлы.
- Форматировать ячейки, объединять их, задавать стили.
- Работать с формулами, диаграммами и макросами.
- Экспортировать данные из баз данных или других источников.
Основные библиотеки
1. Apache POI
Apache POI — самая популярная и мощная библиотека для работы с файлами Microsoft Office в Java. Поддерживает как старый формат XLS (HSSF), так и новый XLSX (XSSF).
Преимущества:
- Полная поддержка всех возможностей Excel: формулы, стили, условное форматирование, диаграммы.
- Активное сообщество и регулярные обновления.
- Поддержка как чтения, так и записи.
Недостатки:
- Высокое потребление памяти при работе с большими файлами.
- Сложный API для новичков.
2. EasyExcel (Alibaba)
EasyExcel — облегчённая библиотека от Alibaba, созданная для работы с большими файлами XLSX. Она использует потоковую обработку, что значительно снижает потребление памяти.
Преимущества:
- Минимальное потребление памяти (до 100 раз меньше, чем POI).
- Простой и интуитивный API.
- Поддержка аннотаций для маппинга данных.
Недостатки:
- Не поддерживает старый формат XLS.
- Ограниченная поддержка форматирования.
3. JExcelApi (jxl)
Старая библиотека, которая поддерживает только формат XLS. Подходит для простых задач, но давно не обновлялась и не работает с XLSX.
Примеры кода
Пример 1: Чтение Excel файла с Apache POI
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadExcel {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("data.xlsx");
Workbook workbook = new XSSFWorkbook(fis)) {
Sheet sheet = workbook.getSheetAt(0);
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;
}
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Пример 2: Запись данных в Excel с Apache POI
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class WriteExcel {
public static void main(String[] args) {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fos = new FileOutputStream("output.xlsx")) {
Sheet sheet = workbook.createSheet("Данные");
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("Имя");
header.createCell(1).setCellValue("Возраст");
Row row1 = sheet.createRow(1);
row1.createCell(0).setCellValue("Анна");
row1.createCell(1).setCellValue(25);
Row row2 = sheet.createRow(2);
row2.createCell(0).setCellValue("Иван");
row2.createCell(1).setCellValue(30);
workbook.write(fos);
System.out.println("Файл создан успешно.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Пример 3: Работа с EasyExcel (чтение)
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import java.util.ArrayList;
import java.util