Перейти к основному содержимому

Вставьте строку в Excel с помощью Apache POI

· 3 мин. чтения

1. Обзор

Иногда нам может понадобиться манипулировать файлами Excel в приложении Java.

В этом руководстве мы рассмотрим вставку новой строки между двумя строками в файле Excel с помощью библиотеки Apache POI .

2. Зависимость от Maven

Во- первых, мы должны добавить зависимость poi-ooxml Maven в наш файл pom.xml:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.0</version>
</dependency>

3. Вставка строк между двумя строками

3.1. Классы, связанные с Apache POI

Apache POI — это набор библиотек, каждая из которых предназначена для работы с файлами определенного типа. Библиотека XSSF содержит классы для обработки формата xlsx Excel. На рисунке ниже показаны интерфейсы и классы, связанные с Apache POI, для управления файлами xlsx Excel:

./bb5c0cfc6de267f3719734f97f1d8553.png

3.2. Реализация вставки строки

Для вставки m строк в середину существующего листа Excel все строки от точки вставки до последней строки должны быть перемещены вниз на m строк.

Прежде всего, нам нужно прочитать файл Excel. Для этого шага мы используем класс XSSFWorkbook :

Workbook workbook = new XSSFWorkbook(fileLocation);

Второй шаг — доступ к листу в рабочей книге с помощью метода getSheet() :

Sheet sheet = workbook.getSheetAt(0);

Третий шаг — смещение строк из строки, расположенной в настоящее время там, где мы хотим начать вставку новых строк, через последнюю строку листа:

int lastRow = sheet.getLastRowNum(); 
sheet.shiftRows(startRow, lastRow, rowNumber, true, true);

На этом этапе мы получаем номер последней строки с помощью метода getLastRowNum() и сдвигаем строки с помощью метода shiftRows() . Этот метод сдвигает строки между startRow и lastRow на размер rowNumber .

Наконец, мы вставляем новые строки, используя метод createRow() :

sheet.createRow(startRow);

Стоит отметить, что приведенная выше реализация сохранит форматирование перемещаемых строк. Кроме того, если в диапазоне, который мы перемещаем, есть скрытые строки, они перемещаются во время вставки новых строк.

3.3. Модульный тест

Давайте напишем тестовый пример, который читает книгу в каталоге ресурсов, затем вставляет строку в позицию 2 и записывает содержимое в новый файл Excel. Наконец, мы утверждаем номер строки результирующего файла с основным файлом.

Давайте определим тестовый пример:

public void givenWorkbook_whenInsertRowBetween_thenRowCreated() {
int startRow = 2;
int rowNumber = 1;
Workbook workbook = new XSSFWorkbook(fileLocation);
Sheet sheet = workbook.getSheetAt(0);

int lastRow = sheet.getLastRowNum();
if (lastRow < startRow) {
sheet.createRow(startRow);
}

sheet.shiftRows(startRow, lastRow, rowNumber, true, true);
sheet.createRow(startRow);

FileOutputStream outputStream = new FileOutputStream(NEW_FILE_NAME);
workbook.write(outputStream);

File file = new File(NEW_FILE_NAME);

final int expectedRowResult = 5;
Assertions.assertEquals(expectedRowResult, workbook.getSheetAt(0).getLastRowNum());

outputStream.close();
file.delete();
workbook.close();
}

4. Вывод

Таким образом, мы научились вставлять строку между двумя строками в файле Excel с помощью библиотеки Apache POI. Как всегда, полный исходный код статьи доступен на GitHub .