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

前言

把数据导出至 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的更多相关文章

  1. Java利用Apache POI将数据库数据导出为excel

    将数据库中的数据导出为excel文件,供其他人查看 public class POITest { public static void main(String[] args) { POITest te ...

  2. ASP.NET中GridView数据导出到Excel

    /// <summary> /// 导出按钮 /// </summary> /// <param name="sender"></para ...

  3. 学习笔记 DataGridView数据导出为Excel

    DataGridView数据导出为Excel   怎样把WinForm下的“DGV”里的绑定数据库后的数据导出到Excel中. 比如:在窗体里有个一“DGV”,DataGridView1,绑定了数据源 ...

  4. 将C1Chart数据导出到Excel

    大多数情况下,当我们说将图表导出到Excel时,意思是将Chart当成图片导出到Excel中.如果是这样,你可以参考帮助文档中保存和导出C1Chart章节. 不过,也有另一种情况,当你想把图表中的数据 ...

  5. 将datagrid中数据导出到excel中 -------<<工作日志2014-6-6>>

    前台datagrid数据绑定 #region 导出到excel中    /// <summary>    /// 2014-6-6    /// </summary>    / ...

  6. 大批量数据导出到Excel的实现

    在平时的项目中,将数据导出到Excel的需求是很常见的,在此对一些常见的方法做以总结,并提供一种大数据量导出的实现. OLEDB   使用OLEDB可以很方便导出Excel,思路很简单,处理时将Exc ...

  7. struts2结合poi-3.7实现数据导出为excel

    我们在处理数据的时候,有可能要将数据导出到excel文件中,那么java中是怎么实现的呢?apache开发的poi就可以帮我们实现啦,它也是开源的代码,导入相应的jar包,就可以轻松实现,下面让我们来 ...

  8. WPF-将DataGrid控件中的数据导出到Excel

    原文:WPF-将DataGrid控件中的数据导出到Excel 导出至Excel是非常常见,我们可以用很多类库,例如Aspose.NOPI.Interop,在这里我们使用微软自家的工具.我的WPF绑定的 ...

  9. vb.net-三种将datagridview数据导出为excel文件的函数

    第一种方法较慢,但是数据格式都比较好,需要引用excel的 Microsoft.Office.Interop.Excel.dll  office.dll #Region "导出excel函数 ...

  10. 数据导出至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. 如何从AWS中学习如何使用AmazonSimpleStorageService(S3)进行数据存储

    目录 文章标题:32. <如何从 AWS 中学习如何使用 Amazon Simple Storage Service (S3) 进行数据存储> 背景介绍: 随着数据量的不断增加,数据存储的 ...

  2. WPF 入门笔记 - 06 - 命令

    我们把世界看错,反说它欺骗了我们. --飞鸟集 前言 相较而言,命令对我来说是一个新概念,因为在Winform中压根没有所谓的命令这个概念.从文字角度理解,"命令"可以指代一种明确 ...

  3. 如何使用Java在Excel中实现一个数据透视表

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前一段时间淘宝出了一个"淘宝人生"的模块, ...

  4. C# 12新预览功能介绍

    Visual Studio 17.7 Preview 3和.NET 8 Preview 6延续了C# 12的发展.该预览版包含的功能旨在为未来的性能增强奠定基础.对内联数组的轻松访问将允许库在更多地方 ...

  5. react项目中使用plop

    第一步,安装依赖 npm install plop --dev //或者用yarn yarn add plop --dev 第二步,在package同级目录下新建plopfile.js 这是plop的 ...

  6. Nginx获取用户真实IP

    Nginx获取用户真实IP地址 本人在一次项目中,使用Nginx需要获取到用户IP,本来可以很常规的获取的,可现实往往不常规,项目是前后端分离的,部署时,前端使用了Nginx进行了代理并转发,后端也使 ...

  7. Mysql基础8-多表查询

    一.多表关系 一对多或者多对一 案例:部门与员工的关系 关系:一个部门对应多个员工,一个员工对应一个部门(不考虑跨部门的特殊情况) 实现:在多的一方建立外键,指向一的一方的主键,这里员工表是多的的一方 ...

  8. AI转换视频风格:Stable Diffusion+TemporalKit

    话不多说,开干! 基本方法 首先通过 Temporal-Kit 这个插件提取视频中的关键帧图片,然后使用 Stable Diffusion WebUI 重绘关键帧图片,然后再使用 Temporal-K ...

  9. React报错:Module not found: Error: Can't resolve 'react-router-dom'

    解决方案 npm install -S react-router-dom@5 参考链接 https://stackoverflow.com/questions/53914013/failed-to-c ...

  10. JDK中「SPI」原理分析

    目录 一.SPI简介 1.概念 2.入门案例 2.1 定义接口 2.2 两个实现类 2.3 配置文件 2.4 测试代码 二.原理分析 1.ServiceLoader结构 2.iterator迭代方法 ...