1.概述
有时,我们可能需要在 Java 应用程序中处理 Excel 文件。
在本教程中,我们将专门研究使用Apache POI库在文件的两行之间插入新行。
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 文件的类:
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()
方法移动行。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。结论
总之,我们已经学习了如何使用Apache POI库在Excel文件的两行之间插入一行。
0 评论