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:
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 .