[翻译] 使用apache poi在excel文件中插入一行数据
概述
有时,我们可能需要在Java应用程序中处理Excel文件。
在本教程中,我们将专门研究如何使用Apache POI库在Excel文件的某两行之间插入一个新行。
Maven依赖
首先,我们必须将poi-ooxml Maven依赖项添加到我们的pom.xml文件中:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
在两行之间插入新行
apache poi
Apache POI是一个库的集合-每个库都专用于处理特定类型的文件。该XSSF库包含用于处理类XLSX Excel格式。下图显示了与Apache POI相关的接口和用于处理xlsx Excel文件的类:
代码
为了在现有Excel工作表的中间插入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);
值得注意的是,以上实现将保留要移动的行的格式。另外,如果在我们要移动的范围内有隐藏的行,则它们会在插入新行时移动。
单元测试
单元测试
让我们编写一个测试用例,该用例读取资源目录中的工作簿,然后在位置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();
}
总结
总之,我们已经学习了如何使用Apache POI库在Excel文件的两行之间插入一行。
共有 0 条评论