轻松合并Excel工作表:Java批量操作优化技巧

本文由葡萄城技术团队于思否原创并首发。
https://segmentfault.com/a/1190000044325952


点击上方“大师兄聊架构”,选择“设为星标”做积极的人,而不是积极废人!每天更新文章,每天掉亿点点头发...

前言

在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如,学校给老师统计课时,医院给医护人员统计班次等。传统的手工方式需要逐个对比数据,然后将计算结果手动填写到一个新的Excel文件中。但是这种方式不仅费时费力,而且很难确保数据结果的准确性。为了解决这个问题,小编今天要为大家介绍如何使用Java快速实现批量Excel工作表的合并。

使用Java实现工作表的快速合并

首先,给大家介绍一下两种复制工作表的可能情况:

  1. 把多个文件的工作表复制到同一个文件中。
    例如有10个Excel文件,每个文件中有一个工作表,最终结果是生成一个新文件,里面有10个工作表。

  2. 把多个文件的工作表内容,截取一部分需要的,复制到同一个工作表中。
    例如有10个Excel文件,每个文件中有一个工作表,只需要该工作表中A1:D24范围内的数据,最终复制到新文件中的一个工作表中。

下面小编依次为大家介绍两种情况的实现方法(以下图的example.xlsx文件为例子)。

1.把多个文件的工作表复制到同一个文件中

首先分别创建两个workbook,然后使用workbook打开example.xlsx,获取 A1:D24的区域,并且分别复制到对应Excel文件中 A1:D24 和 F1:G24 的区域。

//创建workbook
Workbook wb = new Workbook();

//使用workbook打开example.xlsx
wb.open("resources/example.xlsx");
Workbook newWb = new Workbook();

//获取 A1:D24的区域,并且分别复制到对应Excel文件中 A1:D24 和 F1:G24 的区域。
wb.getActiveSheet().getRange("A1:D24").copy(newWb.getActiveSheet().getRange("A1:D24"));
wb.getActiveSheet().getRange("A1:D24").copy(newWb.getActiveSheet().getRange("F1:G24"));
newWb.save("output/mergedSheet.xlsx");

结果如下:

2.把多个文件的工作表内容,截取一部分需要的,复制到同一个工作表中

依然是创建两个workbook,使用workbook打开example.xlsx,模拟两次复制到newWb中。

这里使用的是copyBefore,意思是复制后,位置在对应目标工作表的前面。

//创建workbook
Workbook wb = new Workbook();
wb.open("resources/example.xlsx");
Workbook newWb = new Workbook();

//copyBefore:复制后,位置在对应目标工作表的前面。
wb.getActiveSheet().copyBefore(newWb.getWorksheets().get(0));
wb.getActiveSheet().copyBefore(newWb.getWorksheets().get(0));
newWb.save("output/copySheet.xlsx");

结果如下:

可以看到,在Sheet1前面,添加了两个example工作表。

总结

本文上述所用到的Excel库来自葡萄城的产品GcExcel,GcExcel提供的API对于复制工作表来说,非常地方便易用。复制工作表在数据处理的场景中应用得很多。

END

往期最佳






01. 继Vscode之后,Jetbrains再添一名竞争对手,江湖地位可能不保?02. 总监出手,直接把公司的SpringBoot项目启动从420秒优化到了40秒!
03. 一文搞定Nginx的压缩、黑白名单、防盗链、零拷贝、跨域、双机热备等知识04. Redis 替代品强势来袭,性能提升一倍!!
05. IDE临时激活码,以解大家燃眉之急(建议收藏)。
06. 
这款 SSH 工具足够惊艳07. Docker 大势已去?Podman 即将崛起 ?


[免责声明]

1、文章部分图片来源于网络以及设计图片;

2、我们所转载的文章、图片、音频视频文件等资料版权归版权所有人所有,因非原创文章及图片等内容无法一一和版权者联系,如原作者编辑认为作是不宜上网供大家浏览,请及时通知我们,及时采取措施;

3、本网页如无意中侵犯了媒体或个人的知识产权,我们将立即予以删除;

相关推荐

  • Ant Design 5.10.3 发布
  • 买彩票能中大奖?用Java盘点常见的概率悖论
  • GPT-4 又进化了!画图、插件、代码等能力被整合,网友:“更像是 AI Agent 了!”
  • 华为申请“遥遥领先”商标;苹果发布M3系列芯片和全新MacBook Pro;GitHub Stars功能已被滥用|极客头条
  • 使用 CSS columns 布局来实现自动分组布局
  • 阿里终面:10亿数据如何快速插入MySQL?
  • 太强了!看看别人设计的安全好用的OpenApi!
  • “内向”的技术人如何主动社交?
  • 【附源码】使用 Threejs 从基础开始构建 3D 地球!!!
  • 未来不一定有SaaS
  • Mybatis-Plus通用枚举功能 [MyBatis-Plus系列] - 第493篇
  • Amazing!三维场景竟然可以一键生成
  • 用 WebFlux 写个 CURD 是什么体验?
  • 如果你正在纠结毕设,不妨看看这个!
  • 一个支持多存储的文件列表程序,开箱即用!
  • 今年面试难度越来越大了...
  • [开源]MIT开源协议,前后端分离、美观大方后台通配权限管理系统
  • 浅谈权限系统在本地生活服务平台的应用
  • 【淘宝】什么情况下会发送 OPTIONS 请求
  • 1030.AI日报:百川大模型称一口气可处理35万个汉字