首页 > 编程语言 >高效数据传输:Java通过绑定快速将数据导出至Excel

高效数据传输:Java通过绑定快速将数据导出至Excel

时间:2023-10-09 09:12:13浏览次数:57  
标签:setBindingPath getRange Java worksheet 绑定 Excel 数据源 workbook 数据传输

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

前言

把数据导出至 Excel 是很常见的需求,而数据的持久化,往往又放在数据库中。因此把数据库中的数据导出到 Excel中,成了非常普遍的一个需求。

以关系型数据库为例,数据表是一个二维矩阵,但是为了易于操作和维护,在数据读取中,都会定义类,并且以对象的形式在内存中存放数据。但是Excel的工作表又是另一个二维矩阵,这就意味着,从数据库读取出的对象数据,又需要循环写入另一个表格中,这使得代码难以维护。

为了解决数据不易维护的问题,可以给工作表,单元格或者表格设置对象及单元格的绑定关系,这样在保存时便可以根据数据源的绑定关系,自动填充数据。

具体实现方法

现有数据类如下:

public static class SalesRecord {
   public int sales;
   public String productType;
   public String product;
   public String salesman;
   public String area;
 }

 public static class SalesData {
   public ArrayList records;
 }

样本数据如下:

private SalesData getDataSource() {
   // 创建数据源
   SalesData datasource = new SalesData();
   datasource.records = new ArrayList();

   // 添加数据
   SalesRecord record1 = new SalesRecord();
   record1.area = "NorthChina";
   record1.salesman = "Hellen";
   record1.product = "Apple";
   record1.productType = "Fruit";
   record1.sales = 120;
   datasource.records.add(record1);

   SalesRecord record2 = new SalesRecord();
   record2.area = "NorthChina";
   record2.salesman = "Hellen";
   record2.product = "Banana";
   record2.productType = "Fruit";
   record2.sales = 143;
   datasource.records.add(record2);

   SalesRecord record3 = new SalesRecord();
   record3.area = "NorthChina";
   record3.salesman = "Hellen";
   record3.product = "Kiwi";
   record3.productType = "Fruit";
   record3.sales = 322;
   datasource.records.add(record3);
   return datasource;
 }

1.数据源绑定至工作表

下面是给工作表设置数据源绑定的代码,其中setAutoGenerateColumns设置为false,当setAutoGenerateColumns为true 时,工作表会根据数据源自动生成列。

public void SheetBinding() {
   // 创建一个新的workbook
   Workbook workbook = new Workbook();
   // 获取默认sheet
   IWorksheet worksheet = workbook.getWorksheets().get(0);

   SalesData datasource = getDataSource();

   // 自动生成列设置为false
   worksheet.setAutoGenerateColumns(false);

   // 给工作表中的每一列绑定数据源
   worksheet.getRange("A:A").getEntireColumn().setBindingPath("area");
   worksheet.getRange("B:B").getEntireColumn().setBindingPath("salesman");
   worksheet.getRange("C:C").getEntireColumn().setBindingPath("product");
   worksheet.getRange("D:D").getEntireColumn().setBindingPath("productType");
   worksheet.getRange("E:E").getEntireColumn().setBindingPath("sales");

   // 设置数据源
   worksheet.setDataSource(datasource.records);

   // 保存为Excel文件
   workbook.save("output/SheetBinding.xlsx");
 }

实现效果如下:

2.数据源绑定至单元格

// 创建workbook
 Workbook workbook = new Workbook();
 // 获取默认的sheet
 IWorksheet worksheet = workbook.getActiveSheet();

 // 添加数据
 SalesRecord record = new SalesRecord();
 record.area = "北方";
 record.salesman = "李强";
 record.product = "苹果";
 record.productType = "水果";
 record.sales = 120;

 // 给单元格设置绑定
 worksheet.getRange("A1").setBindingPath("area");
 worksheet.getRange("B2").setBindingPath("salesman");
 worksheet.getRange("C2").setBindingPath("product");
 worksheet.getRange("D3").setBindingPath("productType");

 // 设置数据源
 worksheet.setDataSource(record);

 // 保存为Excel
 workbook.save("output/CellBinding.xlsx");

实现效果如下:

3.数据源绑定至表格

下面的代码使用了setExpandBoundRows ,ITable.setExpandBoundRows方法用来处理一个绑定的表格对数据源的更改该如何响应。当属性设置为true时,该绑定表格会使用整行操作自动调整行数以适应数据源更改。

// 创建workbook
 Workbook workbook = new Workbook();
 // 获取默认的sheet
 IWorksheet worksheet = workbook.getActiveSheet();

 SalesData datasource = getDataSource();
 // 添加一个表格
 ITable table = worksheet.getTables().add(worksheet.getRange("B2:F5"), true);

 // 设置表格,不自动生成列
 table.setAutoGenerateColumns(false);

 // 给表格设置绑定path
 table.setBindingPath("records");

 // 设置setExpandBoundRows为true,
 table.setExpandBoundRows(true);

 // 设置表格列的数据字段
 table.getColumns().get(0).setDataField("area");
 table.getColumns().get(1).setDataField("salesman");
 table.getColumns().get(2).setDataField("product");
 table.getColumns().get(3).setDataField("productType");
 table.getColumns().get(4).setDataField("sales");

 // 设置数据源
 worksheet.setDataSource(datasource);

 // 保存为excel
 workbook.save("output/TableBinding.xlsx");

实现效果如下:

总结

通过给工作表、单元格或表格设置数据源绑定关系,可以实现将数据库中的数据导出到Excel的功能。这种方法使用对象和属性的绑定关系,将内存中的数据源与Excel中的工作表、单元格或表格进行连接。这样,在保存数据时,只需要根据数据源的绑定关系自动填充数据,而无需手动循环写入。这种实现方式简化了代码,提高了代码的可维护性和可扩展性。同时,通过设置自动生成列、设置绑定路径以及处理数据源变化等操作,还可以进一步增强导出功能的灵活性和适应性。总的来说,这种数据源绑定的方法为数据导出提供了一种优雅而高效的解决方案。

扩展链接:

从表单驱动到模型驱动,解读低代码开发平台的发展趋势

低代码开发平台是什么?

基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

标签:setBindingPath,getRange,Java,worksheet,绑定,Excel,数据源,workbook,数据传输
From: https://www.cnblogs.com/powertoolsteam/p/17732205.html

相关文章

  • Java内存泄漏的排查思路
           ......
  • 【JAVA】打印一个三角形(5行)
    需求打印一个三角形,实现效果和如图所示 思路分析分成三部分,左边一个透明倒三角,然后两个直角三角拼接外循环为每一行,执行完内循环后换行 代码实现for(inti=1;i<=5;i++){     for(intj=5;j>=i;j--){//最左侧的透明三角    ......
  • java基础:重写
    重写总结来说为:方法名相同,参数类型相同子类返回类型等于父类方法返回类型,子类抛出异常小于等于父类方法抛出异常,子类访问权限大于等于父类方法访问权限。详细的说明为:重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。 即外壳不变,核心重写!重写的......
  • 基于Java的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文
    (高校学生综合测评管理系统)三、开发环境与技术3.1MySQL数据库本课题研究研发的应用程序在数据操作过程中是难以预测的,而且常常产生变化。没有办法直接从word里写数据,这不但不安全,并且难以实现应用程序的功能。想要实现运用所需要的数据存放功能,就必定要选择专业的数据库存储软......
  • JavaFX的基础 第二节
    JavaFX的基础第二节JavaFX图形界面的基础结构StageStage就是一个窗口,在JavaFX应用程序中,可以有多个窗口,一个窗口就是一个StageScene场景在一个Stage中一次只能显示一个场景,场景因需求而改变。比如你的前面是个漂亮小姐姐,你的后面有个钢铁侠,但是你的眼睛只能让你选择一个......
  • 万字长文详解Java线程池面试题
    王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人今天是《面霸的自我修养》第6篇文章,我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源:大部分来自于各机构(Java之父,Java继父,某灵,某泡,某客)以及各博主整理文档;小部分来自于......
  • JavaWeb(四)
    1、Maven1.1、Maven是专门用于管理和构建ava项目的工具,它的主要功能有:提供了一套标准化的项目结构提供了一套标准化的构建流程(编译,测试,打包,发布…)提供了一套依赖管理机制1.2、Maven的配置①、配置环境变量②、修改配置信息<!--Thisislocalwarehousepath--><loca......
  • 《java编程语言》读后感
    读完《Java编程思想》这本书,我不禁对Java编程语言有了更深的认识和理解。这本书对Java的各个方面进行了详细的讲解,从基础知识到高级概念,从语法到设计模式,无一不涉及。通过阅读这本书,我不仅学到了很多Java的技术细节,还对软件开发的思想和方法有了更深入的了解。首先,这本书让我对Ja......
  • 面试题1:Java的多态深入聊一聊
    多态是面向对象编程中的一个重要概念,它允许不同的对象通过相同的接口来执行不同的操作。在Java中,多态性主要通过以下两种方式实现:方法重载(Overloading):这是编译时多态,它允许一个类中有多个同名方法,但它们的参数列表不同。编译器会根据方法的参数列表选择正确的方法。例如:class......
  • 已经安装了Excel,提示“您没有安装Excel软件!”
    已经安装了Excel,提示“您没有安装Excel软件!” 1)重新安装Office ----------------------2)修改注册表 找到excel图标,点击右键,发现出现没有安装excel的提示,可能是安装版本的问题,也有可能是注册表被删除 win+R键,跳出运行弹窗,输入regedit,点击确认 选择打开HKEY_LOCAL_MACHINE文件......