高效数据传输: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中的工作表、单元格或表格进行连接。这样,在保存数据时,只需要根据数据源的绑定关系自动填充数据,而无需手动循环写入。这种实现方式简化了代码,提高了代码的可维护性和可扩展性。同时,通过设置自动生成列、设置绑定路径以及处理数据源变化等操作,还可以进一步增强导出功能的灵活性和适应性。总的来说,这种数据源绑定的方法为数据导出提供了一种优雅而高效的解决方案。
扩展链接:
高效数据传输:Java通过绑定快速将数据导出至Excel的更多相关文章
- Java利用Apache POI将数据库数据导出为excel
将数据库中的数据导出为excel文件,供其他人查看 public class POITest { public static void main(String[] args) { POITest te ...
- ASP.NET中GridView数据导出到Excel
/// <summary> /// 导出按钮 /// </summary> /// <param name="sender"></para ...
- 学习笔记 DataGridView数据导出为Excel
DataGridView数据导出为Excel 怎样把WinForm下的“DGV”里的绑定数据库后的数据导出到Excel中. 比如:在窗体里有个一“DGV”,DataGridView1,绑定了数据源 ...
- 将C1Chart数据导出到Excel
大多数情况下,当我们说将图表导出到Excel时,意思是将Chart当成图片导出到Excel中.如果是这样,你可以参考帮助文档中保存和导出C1Chart章节. 不过,也有另一种情况,当你想把图表中的数据 ...
- 将datagrid中数据导出到excel中 -------<<工作日志2014-6-6>>
前台datagrid数据绑定 #region 导出到excel中 /// <summary> /// 2014-6-6 /// </summary> / ...
- 大批量数据导出到Excel的实现
在平时的项目中,将数据导出到Excel的需求是很常见的,在此对一些常见的方法做以总结,并提供一种大数据量导出的实现. OLEDB 使用OLEDB可以很方便导出Excel,思路很简单,处理时将Exc ...
- struts2结合poi-3.7实现数据导出为excel
我们在处理数据的时候,有可能要将数据导出到excel文件中,那么java中是怎么实现的呢?apache开发的poi就可以帮我们实现啦,它也是开源的代码,导入相应的jar包,就可以轻松实现,下面让我们来 ...
- WPF-将DataGrid控件中的数据导出到Excel
原文:WPF-将DataGrid控件中的数据导出到Excel 导出至Excel是非常常见,我们可以用很多类库,例如Aspose.NOPI.Interop,在这里我们使用微软自家的工具.我的WPF绑定的 ...
- vb.net-三种将datagridview数据导出为excel文件的函数
第一种方法较慢,但是数据格式都比较好,需要引用excel的 Microsoft.Office.Interop.Excel.dll office.dll #Region "导出excel函数 ...
- 数据导出至Excel文件--好库编程网http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm
using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...
随机推荐
- 《系列二》-- 1、BeanFactory.getBean 总览
目录 一句话概括 1 书接上回 2 揭开 doGetBean() 的神秘面纱, 重要操作一览 3 必要的课外知识 3.1 bean 的作用域 Scope 有哪些 3.2 FactoryBean 是什么 ...
- 自然语言处理 Paddle NLP - 结构化数据问答-理论
NLP问答任务 相似度和规则匹配,都是早期的方法,现在主流的方法,都是基于生成的方法 结构化数据问答,有两种形式,一种是知识图谱形式.一种是关系型数据库形式. 主要应用在企业中,减少销售的成本 应用于 ...
- Linux系统运维之Hadoop、Hive、Flume数据处理
配置环境 主机名 IP 备注 Hadoop-Data01 192.168.0.194 Hadoop-Master/Hive/Mysql/Flume-Agent Hadoop-Data02 192.16 ...
- React组件三大属性state,props,refs
1. React组件定义 1.1 函数组件(Function Components) 函数组件是一种简单的定义组件的方式,通过一个JavaScript函数来定义组件.函数接收一个props对象作为参数 ...
- Selenium:设置元素等待、上传文件、下载文件
前言:在工作和学习selenium自动化过程中记录学习知识点,深化知识点 1. 设置元素等待 元素定位之元素等待-- WebDriver提供了两种类型的等待:显示等待和隐式等待. 1.1 显示等待 显 ...
- Centos使用keepalived配置MySQL双主热备集群
目录 安装MySQL 下载安装包 卸载mariadb-lib 安装依赖 安装gcc 安装perl 永久关闭selinux 安装 配置 创建mysql数据库管理用户和组 创建数据目录 修改my.cnf配 ...
- Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- shell 并发
#!/bin/bash # 设置并发数 thread_num=3 # 创建管道文件 FIFO=/tmp/$$-FIFO mkfifo $FIFO # 使用句柄打开管道文件 exec 1000<& ...
- Linux shell:根据盘符定位硬盘在服务器上的位置
disk-light.sh #!/bin/bash t_dev=$1 [ -b "$t_dev" ] || { echo "-b failed: $t_dev" ...
- 助力618-Y的混沌实践之路
一.写在前面 1.混沌是什么? 混沌工程(Chaos Engineering)的概念由 Netflix 在 2010 年提出,通过主动向系统中引入异常状态,并根据系统在各种压力下的行为表现确定优化策略 ...