高效数据传输:Java通过绑定快速将数据导出至Excel
摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
前言
把数据导出至 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中的工作表、单元格或表格进行连接。这样,在保存数据时,只需要根据数据源的绑定关系自动填充数据,而无需手动循环写入。这种实现方式简化了代码,提高了代码的可维护性和可扩展性。同时,通过设置自动生成列、设置绑定路径以及处理数据源变化等操作,还可以进一步增强导出功能的灵活性和适应性。总的来说,这种数据源绑定的方法为数据导出提供了一种优雅而高效的解决方案。
扩展链接:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
云原生场景下高可用架构的最佳实践
01 引言 随着云原生技术的快速发展以及在企业 IT 领域的深入应用,云原生场景下的高可用架构,对于企业服务的可用性、稳定性、安全性越发重要。通过合理的架构设计和云平台的技术支持,云原生高可用架构可以提供高可用性、弹性扩展性、简化运维管理、提升可靠性和安全性等方面的优势,为企业提供了更加可靠和高效的应用运行环境。 Kubernetes 是云原生的核心技术之一,提供了容器编排和管理的能力,包括基础设施自动化、弹性扩展性、微服务架构和自动化运维等,所以 Kubernetes 的应用高可用架构是云原生高可用的基石。本文会以阿里云容器服务 ACK(Alibaba Cloud Container Service for Kubernetes)为例,介绍基于 ACK 的应用高可用架构和治理的最佳实践。 02 应用高可用架构设计 云原生应用的高可用架构设计,是应用高可用开发、部署和治理的重要前提,可以从如下方面考虑: 1. 集群设计:集群控制面和数据面的组件和节点,使用多节点、多副本高可用部署,保证 K8s 集群的高可用性。以 ACK 为例,提供了覆盖控制面和数据面的集群高可用能力。在控制面,ACK...
-
下一篇
全场景流量验证系统 | 京东物流技术团队
本文介绍了一种基于线上流量实现对重构系统进行功能和性能验证的实践方案。针对线上流量如何拦截、如何录制、如何存储、如何回放以及如何发压均作了详细说明,为具有类似需求的读者提供了一种可供参考的思路。 1 业务背景 随着百川项目的启动,中台需要对订单流量收口,将ECLP、各BP的接单入口全部切换至百川统一接单系统。且各个接单入口调用方式各异,有JOS请求(外部商家)、JSF请求(如TC),也有MQ异步消息(如POP)。为了确保各系统平稳切量,最大程度降低切量风险,需要在切量前做充分的流量验证(包括功能验证和性能验证)。为此,设计了一套全场景流量验证系统,支持基于线上流量的AB验证(功能验证)、压测(性能验证),为各业务线接单切量工作提供了可靠的基础支撑。 2 名词解释 引流:把各个接单入口所在系统的线上流量引入到流量验证系统。 录制:复制线上流量并做持久化存储。 回放:把录制的流量打到待验证系统。 切量:把接单流量从ECLP等老的接单系统切换到新的百川统一接单系统中。 AB验证:线上流量同时打到正式环境和AB环境,对两个环境的结果做对比分析,验证AB环境的正确性。 3 设计思路 如何引流? ...
相关文章
文章评论
共有0条评论来说两句吧...