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

news/2024/7/21 5:26:41 标签: java, excel, oracle

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

前言

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

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

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

具体实现方法

现有数据类如下:

java">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;
 }

样本数据如下:

java">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 时,工作表会根据数据源自动生成列。

java">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.数据源绑定至单元格

java">// 创建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时,该绑定表格会使用整行操作自动调整行数以适应数据源更改。

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

扩展链接:

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

低代码开发平台是什么?

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


http://www.niftyadmin.cn/n/5083218.html

相关文章

Spring Boot Bean 注入的常用方式教程

Spring Boot Bean 注入是一种将依赖对象引入到应用程序组件中的机制,它有助于实现松耦合和可测试的代码。这种注入方式允许我们将依赖关系委托给 Spring 容器来管理,从而提高了代码的可维护性和可读性。Spring Boot 提供了多种 Bean 注入方式&#xff0c…

Are you sure you want to continue connecting (yes/no) 每次ssh进

Lunix scp等命令不需要输入yes确认方法_scp不需要确认-CSDN博客 方法一:连接时加入StrictHostKeyCheckingno ssh -o StrictHostKeyCheckingno root192.168.1.100 方法二:修改/etc/ssh/ssh_config配置文件,添加: StrictHostKeyC…

Android绑定式服务

Github:https://github.com/MADMAX110/Odometer 启动式服务对于后台操作很合适,不过需要一个更有交互性的服务。 接下来构建这样一个应用: 1、创建一个绑定式服务的基本版本,名为OdometerService 我们要为它增加一个方法getDistance()&#x…

高防CDN:网络安全的锁与钥匙

深度解析高防CDN原理 高防CDN,一门整合防护与分发功能的互联网安全技术,以卓越之姿应对DDoS攻击等网络威胁,巧妙地辨识和过滤访问源地址,以保障用户畅通访问和服务的稳定。其核心原理包括: 流量清洗: 高防C…

鱼哥赠书活动第②期:《AWD特训营:技术解析、赛题实战与竞赛技巧》《ATTCK视角下的红蓝对抗实战指南》《智能汽车网络安全权威指南》上下册

鱼哥赠书活动第①期: 《AWD特训营:技术解析、赛题实战与竞赛技巧》1.1介绍: 《ATT&CK视角下的红蓝对抗实战指南》1.1介绍: 《Kali Linux高级渗透测试》1.1介绍: 《智能汽车网络安全权威指南》上册1.1介绍&#xff…

AndroidStudio使用superSUAPK ROOT(失败)

下载superSUAPK Chainfire SuperSU Download - Official Download Page 两个文件: supersu-2-82.apk SuperSU-v2.82-201705271822.zip 查看有哪些模拟器 > cd C:\Users\Administrator\AppData\Local\Android\Sdk\emulator> .\emulator.exe -list-avds …

循环神经网络时间序列预测

循环神经网络时间序列预测 循环神经网络用于时间序列预测比较好,先使用股票价格数据集来理解和掌握该算法。 数据来源 数据要先在Tushare注册登录一下,获取足够的积分 注册完之后有100积分,然后个人信息完善一下获取20积分,然后…

计算机网络面试常问问题--保研及考研复试

前言: Hello大家好,我是Dream。今年保研上岸山东大学人工智能专业 (经验贴),现在将我自己的专业课备考知识点整理出来,分享给大家,希望可以帮助到大家!这是重点知识总结,…