Работа с Excel в Java: обзор библиотек и практические примеры
В корпоративной разработке на Java часто возникает необходимость программного создания, чтения и модификации электронных таблиц Excel. Это может быть генерация отчётов, импорт данных из внешних систем или экспорт результатов расчётов. В данной статье мы рассмотрим основные библиотеки для работы с Excel в Java, их особенности, а также приведём наглядные примеры кода.
Почему Java, а не Python?
Несмотря на то, что наш сайт называется PythonLib, Java остаётся одним из самых популярных языков для enterprise-разработки. Многие компании активно используют Java для серверных приложений, и интеграция с Excel — востребованная задача. Понимание того, как работать с Excel в Java, будет полезно как начинающим, так и опытным разработчикам.
Основные библиотеки для работы с Excel в Java
Существует несколько зрелых библиотек, каждая из которых имеет свои сильные стороны:
- Apache POI — самая популярная и функциональная библиотека. Поддерживает форматы .xls (HSSF) и .xlsx (XSSF). Позволяет создавать, читать и изменять файлы, поддерживает формулы, стили, диаграммы.
- JExcelApi (jxl) — более лёгкая библиотека, поддерживает только старый формат .xls. Подходит для простых задач, но не развивается с 2009 года.
- Apache POI + XSSF/SXSSF — продвинутые возможности для работы с большими файлами. SXSSF (Streaming) позволяет обрабатывать миллионы строк с низким потреблением памяти.
- Docx4j — библиотека для работы с Office Open XML, может использоваться для .xlsx, но чаще применяется для Word.
Начало работы с Apache POI
Для подключения библиотеки к проекту Maven добавьте в pom.xml следующие зависимости:
<!-- Для работы с .xls (HSSF) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.5</version>
</dependency>
<!-- Для работы с .xlsx (XSSF) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.5</version>
</dependency>
Если вы используете Gradle, добавьте строки в build.gradle:
implementation 'org.apache.poi:poi:5.2.5'
implementation 'org.apache.poi:poi-ooxml:5.2.5'
Пример: создание Excel-файла с таблицей
Рассмотрим простой пример создания файла .xlsx с данными о сотрудниках.
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelWriter {
public static void main(String[] args) {
// Создаём новую книгу
try (Workbook workbook = new XSSFWorkbook()) {
// Создаём лист
Sheet sheet = workbook.createSheet("Сотрудники");
// Создаём строку заголовка
Row headerRow = sheet.createRow(0);
String[] columns = {"ID", "Имя", "Должность", "Зарплата"};
for (int i = 0; i < columns.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(columns[i]);
// Делаем заголовок жирным
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
cell.setCellStyle(style);
}
// Заполняем данными
Object[][] data = {
{1, "Иван Иванов", "Разработчик", 150000},
{2, "Петр Петров", "Аналитик", 120000},
{3, "Сидор Сидоров", "Менеджер", 180000}
};
int rowNum = 1;
for (Object[] rowData : data) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue((int) rowData[0]);
row.createCell(1).setCellValue((String) rowData[1]);
row.createCell(2).setCellValue((String) rowData[2]);
row.createCell(3).setCellValue((double) (int) rowData[3]);
}
// Автоматическая ширина колонок
for (int i = 0; i < columns.length; i++) {
sheet.autoSizeColumn(i);
}
// Запись в файл
try (FileOutputStream out = new FileOutputStream("employees.xlsx")) {
workbook.write(out);
}
System.out.println("Файл создан успешно!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Пример: чтение данных из Excel-фай
Также в библиотеке
Reactive Programming in JavaScript (Node.js): RxJS & Observables
HTTP-клиент для C++: топ библиотек для работы с сетью
Генерация PDF отчётов на Swift: PDFKit и UIPrintPageRenderer