使用Apache POI在Excel中插入行

1.概述

有時,我們可能需要在Java應用程序中處理Excel文件。

在本教程中,我們將專門研究使用Apache POI庫在Excel文件的兩行之間插入新行。

2. Maven依賴

首先,我們必須將poi-ooxml Maven依賴項添加到我們的pom.xml文件中:

<dependency>

 <groupId>org.apache.poi</groupId>

 <artifactId>poi-ooxml</artifactId>

 <version>5.0.0</version>

 </dependency>

3.在兩行之間插入行

3.1。 Apache POI相關的類

Apache POI是一個庫的集合-每個庫都專用於處理特定類型的文件。 XSSF庫包含用於處理xlsx Excel格式的類。下圖顯示了與Apache POI相關的接口和用於處理xlsx Excel文件的類:

使用Apache

3.2。實施行插入

為了m行,從插入點到最後一行的所有行都應向下移動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()方法移動行。 startRowlastRow之間的行移動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。結論

總之,我們已經學習瞭如何使用Apache POI庫在Excel文件的兩行之間插入一行。