首页 > 编程语言 >如在 Java 中分割 Excel 工作表

如在 Java 中分割 Excel 工作表

时间:2024-04-01 09:11:06浏览次数:20  
标签:分割 Java Excel 工作 文档 拆分 Workbook tempWorkbook

前言

在Excel中创建的大多数商业报告不是单页的文档,而是包含了多个上下文相关的信息,这些信息被存储在多个工作表中。例如我们的一些地区销售报告、按部门分类的员工记录、每家店铺的库存清单等。

然而,随着Excel文件中工作表数量的增加,要在单一文档内导航和管理数据会变得十分具有挑战性。此外,因为这些Excel文档包含了并非所有相关方都应看到的信息,所以在不同的相关方之间共享这样的Excel文档不是一个合理的方案。因此,有必要将这些多工作表的Excel文档分割成若干个较小的文档,以便更容易管理、提高效率和数据隔离。

尽管Excel在功能上占据主导地位,但它不提供原生的函数来分割工作表。你需要手动进行此操作,或者使用VBA。虽然手动方法效率低且容易出错,但VBA方法会使文件变得容易受攻击。

GrapeCity Documents for Excel(以下简称 GcExcel )提供了几种通过Java语言编程的方法,可以将Excel文件中的多个工作表分割成独立的Excel文档,例如:

  • 通过从源工作簿复制到目标工作簿来分割工作表
  • 通过从源工作簿移动到目标工作簿来分割工作表
  • 通过从源文件删除不需要的工作表并将其另存为新文档来分割工作表
  • 通过从源到目标工作簿复制并粘贴内容等方式分割工作表

在这篇博客中,小编将为大家介绍如何通过编程方法将工作表从源工作簿复制到目标工作簿来实现分割。

应用案例

假设你现在作为你公司的首席销售官,准备了一个Excel报表,其中按区域分别在不同的工作表上包含了销售分析信息。你想要将这份报告分享给区域销售经理们。但是,你希望将各个工作表分离成独立的Excel文件,以隔离不同区域的分析细节,如下图所示:

让我们看看如何通过使用GcExcel通过3个简单的步骤为每个工作表生成独立的Excel文件。

我们需要在遵循GcExcel的产品文档中描述的规则的情况下于IDEA中使用GcExcel。

步骤1- 初始化工作簿

第一步是加载你想要拆分工作表的源工作簿。使用GcExcel,你可以通过IWorkbook接口的Open方法加载Excel文件,如下所示:

Workbook workbook = new Workbook();
workbook.open("input.xlsx");

步骤2 - 添加拆分Excel工作表的逻辑

完成第一步后,紧接着是添加拆分源工作簿中工作表的逻辑,包括:

  • 创建一个循环,遍历源工作簿中的每个工作表,并按需进行拆分
  • 初始化一个临时工作簿
  • 使用IWorksheets接口的Copy方法将当前工作表从源工作簿复制到临时工作簿的末尾
  • 删除临时工作簿中的默认工作表
//创建一个循环
for (IWorksheet worksheet : workbook.getWorksheets()) {
    //初始化一个临时工作簿,粘贴工作表,删除临时工作表
    Workbook tempWorkbook = new Workbook();
    worksheet.copy(tempWorkbook);
    tempWorkbook.getWorksheets().get("Sheet1").delete();
}

步骤3 - 保存拆分的Excel工作表

最后,使用IWorkbook接口的Save方法将拆分的工作表保存为独立的Excel或其他格式的文件,如下所示:

tempWorkbook.save(worksheet.getName()+".xlsx",SaveFileFormat.Xlsx);// Excel文件
tempWorkbook.save(worksheet.getName()+".pdf",SaveFileFormat.Pdf);// PDF文件

完整的代码片段如下所述:

Workbook workbook = new Workbook();
workbook.open("test.xlsx");
for (IWorksheet worksheet : workbook.getWorksheets()) {
    Workbook tempWorkbook = new Workbook();
    worksheet.copy(tempWorkbook);
    tempWorkbook.getWorksheets().get("Sheet1").delete();
    tempWorkbook.save(worksheet.getName()+".xlsx",SaveFileFormat.Xlsx);
}

除此之外,GcExcel还提供了一些来自IWorksheets接口的其他方法,比如CopyAfter和CopyBefore,以满足特定Excel需求的工作表拆分。此外,它还提供了Move、MoveAfter和MoveBefore方法,通过将工作表从源Excel文件移动到目标Excel文件来拆分工作表。

总结

Excel文件解决方案工具(GcExcel)是一个强大的工具,设计用于使用Java简化Excel文档的创建、读取和编辑。它提供了一种简单高效的方式来以编程方式处理Excel文档。有了现成的API,你可以仅用几行代码就完成所需的Excel操作,如拆分工作表一样。编程方式处理Excel文档可以节省宝贵的时间和确保数据的精确性。如果您想了解更多的信息,欢迎点击这里查看。

扩展链接:

轻松构建低代码工作流程:简化繁琐任务的利器

数据驱动创新:以Java编程方式定制数据透视表

Java批量操作Excel文件实践

标签:分割,Java,Excel,工作,文档,拆分,Workbook,tempWorkbook
From: https://www.cnblogs.com/powertoolsteam/p/18100775

相关文章

  • 学习java第二十九天
    如何通过注解配置文件?@Configuration 用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解,value属性用于指定配置类的字节码。@ComponentScan 用于指定Spring在初始化容器时要扫描的包。basePackages属性用于指定要扫描的包。@PropertySource 用于加......
  • 【粉丝福利社】《Effective Java》(文末送书-进行中)
    ......
  • Java实现ATM机模拟系统(week1)
    目录目的项目规划(第一周)ATM机系统第一周需求分析账户管理大类Account(账户)类AccountOperations(对账户操作)接口创建账户账户内容管理账户权限管理User类UserOperations(用户操作)接口Operations类货币大类基本属性方法操作界面合作开发(利用git)后言 ......
  • .net和java串口通讯压力测试对比
    最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机。要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒。于是就自己写代码测试。通过.net写,发现最少能达到1毫秒,但是有遗漏,看日志如下2024-03-3......
  • 解决 java.sql.SQLException:null,message from Server:"Host 'xxx' is not allowed t
    问题:url中机器地址写127.0.0.1或是localhost时不会发生,但写真实IP就出现此异常,即使从本机运行也会出此错。解决方法:在MySQL控制台,执行以下命令:mysql>usemysql;Databasechangedmysql>updateusersethost='%'whereuser='root';QueryOK,1rowaffected(0.04sec)......
  • 史上最全Java核心面试题(带全部答案)2024年最新版
    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦。在跳槽季来临之前,特地做这个系列的文章,一方面帮助自己巩固下基础,另一方面也希望帮助想要换工......
  • JavaScript基础篇3【数组】
    今日学习内容什么是数组简单理解就是用于临时存储同类数据,本质上是一种具有顺序的特殊对象【当然其实是可以存储不同的数据类型的,只是说那样做很少,所以一般就如前一样理解】数组的定义JavaScript中有两种定义数组的方式:实例化Array对象【称之为“完整形式”】vararr......
  • java(包)package(1)
    为了使类型更容易找到和使用,避免命名冲突,以及控制访问,程序员将相关类型类编排到包中。定义:包是一组提供访问保护和名称空间管理的相关类型。注意,类型指的是类、接口、枚举和注释类型。枚举和注释类型分别是特殊类型的类和接口,因此在本文中,类型通常被简单地称为类和接口。......
  • java(包)package(3)
    命名包由于世界各地的程序员都使用Java编程语言编写类和接口,因此许多程序员可能会对不同的类型使用相同的名称。当定义了一个Rectangle类时,但该类Rectangle在java.awt包定义过。但是,如果两个类位于不同的包中,编译器允许它们具有相同的名称。每个Rectangle类的完全限定名包括包......
  • Java(3) ----- File类、IO流、基本软件结构
    File类:代表当前操作系统的文件对象。File类:建用来操作操作系统的文件对象的,删除文件,获取文件信息,创建文件(文件夹)广义来说操作系统认为文件包含(文件和文件夹)File类创建文件路径:相对路径:默认是直接相对到工程目录下寻找文件的;分隔符:File:separatorgetAbsolutePath()绝对......