DebugEN
科技森
专注于Java开发~每天都会更新文章~
  1. 首页
  2. Java
  3. 正文

[翻译] 使用apache poi在excel文件中插入一行数据

2021年03月12日 1920点热度 1人点赞 0条评论 作者: kejisen

概述

有时,我们可能需要在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文件的两行之间插入一行。

标签: excel java poi
最后更新:2021年03月12日

kejisen

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
【原创】记录一次失败的折腾——使用jkeymaster实现的按键监听 【原创】这些年我用过的IDEA插件 【原创】在windows上使用VNC远程连接linux桌面 我在RxJava使用线程池时遇到的问题 [原创文章] Swagger生成pdf格式的接口文档 [个人翻译]Java HTTP工具类的客户端证书认证 [原创] 如何从 Git 的提交历史记录中删除大文件 [翻译] 创建一个只读的Repository接口(Spring Data) [翻译] 反射的用法——用Java调用私有方法 Java 虚拟机最多可以支持多少个线程? 排查Hibernate的慢查询日志–这是查找慢查询的最简单方法 [翻译] 使用apache poi在excel文件中插入一行数据 [翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别 [原创] 从QQ音乐网页版扒歌词的补充说明 [原创] 介绍java maven项目的多种打包方式 原创——在Java中生成随机数 将G1垃圾回收的内存使用量减少20%(翻译) [原创] java8 lambda表达式的toMap造成的空指针异常 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道
Spring Boot的@RequestMapping注解中加斜杠与不加斜杠的区别 [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道 使用Spring RestTemplate压缩请求 [原创] 从QQ音乐网页版扒歌词的补充说明 在Java中生成随机的日期 [原创] spring-boot返回json或者xml格式的数据 [翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别 Spring Boot项目修改Tomcat端口号 [原创] 如何使用okhttp发起application/json类型的请求 [原创] 如何使用java(javamail)发送带附件的邮件 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [原创] 在ubuntu18.04上安装chromedriver Linux截图软件推荐-flameshot 将G1垃圾回收的内存使用量减少20%(翻译) [个人翻译]Java HTTP工具类的客户端证书认证 [原创] 关于Java的Base64编码 [原创] java8 lambda表达式的toMap造成的空指针异常 [原创] 介绍java maven项目的多种打包方式 [翻译] 创建一个只读的Repository接口(Spring Data) java maven项目的几种打包方式
标签聚合
json 歌词 maven spring springboot linux java base64 elasticsearch qq音乐

COPYRIGHT © 2020 Kejisen. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS