首页 > 编程语言 >轻松合并Excel工作表:Java批量操作优化技巧

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

时间:2023-10-23 09:12:27浏览次数:47  
标签:复制到 文件 Java wb 批量 Excel newWb Workbook

摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

前言

在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对于复制工作表来说,非常地方便易用。复制工作表在数据处理的场景中应用得很多。

除了上面展示的copyBefore,还有copyAfter等其他API。可以参考GcExcel的产品文档了解更多。

扩展链接:

如何在前端系统中使用甘特图

窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器

探秘移动端BI:发展历程与应用前景解析

标签:复制到,文件,Java,wb,批量,Excel,newWb,Workbook
From: https://www.cnblogs.com/powertoolsteam/p/17730769.html

相关文章

  • 为什么Java的 +=, -=, *=, /= 复合赋值运算符不需要将long转换为int?
    内容来自DOC[https://q.houxu6.top/?s=为什么Java的+=,-=,*=,/=复合赋值运算符不需要将long转换为int?](https://q.houxu6.top/?s=为什么Java的+=,-=,*=,/=复合赋值运算符不需要将long转换为int?)直到今天,我认为例如:i+=j;只是一个i=i+j;的快捷方式。但......
  • java异常处理
    空指针异常(NullPointerException)空指针异常是JAVA中最常见的异常之一,当我们尝试使用一个空对象的方法或属性时,就会抛出该异常。为了避免空指针异常,我们可以在使用对象之前进行判空处理,或者使用Optional类来代替可能为空的对象。数组越界异常(ArrayIndexOutOfBoundsException)......
  • java并发线程
    在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(boolon);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在Thread.start()之前调用,否则运行......
  • java复习
    1、Java常用集合及特点?List:ArrayList、LinkedList、Vector、StackSet:LinkedSet、HashSet、TreeSetQueue->Deque->LinkedList。Map:HashMap、LinkedHashMap、TreeMapDictionary->HashTable->Properties。Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,默认长度为10,超......
  • 什么是java集合框架
    Java集合框架是Java编程语言提供的一组类和接口,用于处理和存储数据集合。它提供了各种数据结构和算法,以便开发者能够高效地操作数据,无需自行实现这些数据结构。Java集合框架的主要目标是提供一种通用的、标准的方法来处理和存储不同类型的数据,使开发更加方便和高效。以下是Java集......
  • Java并发
    Java并发基础并发:多个任务在同一时间段内交替执行并行:多个任务在同一时刻同时执行Java线程创建方式继承Thread和实现接口继承Thread类并重写run,之后调用start方法启动线程,注意:调用run只是普通的方法调用,不会新开线程。例如如下匿名类继承Thread。Threadthread=new......
  • JAVA项目中的常用的异常处理情况
    在Java项目开发中,异常处理是非常重要的一部分。异常是指在程序运行过程中出现的错误或异常情况,如空指针异常、数组越界异常等。合理处理异常可以提高程序的健壮性和可靠性,保证程序的正常运行。首先在Java中,异常处理的基本原则是“捕获异常、处理异常、抛出异常”。在程序......
  • java异常总结
    JAVA项目中的异常处理在Java项目中,异常处理是非常重要的一部分,它可以帮助我们更好地管理和控制程序的运行流程,提高代码的可读性和可维护性。本文将介绍Java项目中常见的异常处理情况,包括异常的分类、处理方式以及最佳实践。一、Java异常的分类Java异常主要分为两大类:受检查异常......
  • java中使用Graphics绘制图形验证图片,为什么图中的文字没有呈现?
       项目中做了一个图形验证的功能。可选择图形中的文字,想出现的效果如上。图形上有文字。而在实际做的过程中,发到测试环境linux系统上去之后,是下面的情况: 只有图,没有文字!于是问了问度娘,说是字体的原因。项目中使用了linux中没有的字体会导致上图的问题。但我是使用了......
  • JAVA
    1.Java中的泛型是什么?使用泛型的好处是什么?这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道,在集合中存储对象并在使用前进行类型转换是多么的不方便。泛型防止了那种情况的发生。它......