高效数据传输: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() {// 创建一个新的workbookWorkbook workbook = new Workbook();// 获取默认sheetIWorksheet worksheet = workbook.getWorksheets().get(0);SalesData datasource = getDataSource();// 自动生成列设置为falseworksheet.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.数据源绑定至单元格

// 创建workbookWorkbook workbook = new Workbook();// 获取默认的sheetIWorksheet 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);// 保存为Excelworkbook.save("output/CellBinding.xlsx");

实现效果如下:

3.数据源绑定至表格

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

// 创建workbookWorkbook workbook = new Workbook();// 获取默认的sheetIWorksheet worksheet = workbook.getActiveSheet();SalesData datasource = getDataSource();// 添加一个表格ITable table = worksheet.getTables().add(worksheet.getRange("B2:F5"), true);// 设置表格,不自动生成列table.setAutoGenerateColumns(false);// 给表格设置绑定pathtable.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);// 保存为excelworkbook.save("output/TableBinding.xlsx");

实现效果如下:

总结

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

扩展链接:

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

低代码开发平台是什么?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/133968.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

入行CSGO游戏搬砖项目前,这些问题一定要了解

最近咨询的人也不少,针对大家平时问到的问题,在这里做一个统一汇总和解答。 1、什么是国外steam游戏装备汇率差项目? 通俗易懂的理解就是,从国外steam游戏平台购买装备,再挂到国内网易buff平台上进行售卖。充值汇率差…

接口测试总结及其用例设计方法

接口测试的总结文档 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为什…

使用宝塔面板在Linux上搭建网站,并通过内网穿透实现公网访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

计算机体系结构和操作系统

这篇文章的主要内容是冯诺依曼计算机体系结构和操作系统的理解。 目录 一.冯诺依曼计算机体系结构 二.操作系统的理解 一.冯诺依曼计算机体系结构 如图是冯诺依曼计算机体系结构,计算机本质就是对数据进行处理的机器,图中,数据从输入设备交给…

Jetson Orin NX 开发指南(7): EGO-Swarm 的编译与运行

一、前言 EGO-Planner 浙江大学 FAST-LAB 实验室的开源轨迹规划算法是,受到 IEEE Spectrum 等知名科技媒体的报道,其理论技术较为前沿,是一种不依赖于ESDF,基于B样条的规划算法,并且规划成功率、算法消耗时间、代价数…

十六、【橡皮擦工具组】

文章目录 橡皮擦背景橡皮擦1. 一次取样2. 连续取样3. 取样背景色板 魔术橡皮擦 橡皮擦 橡皮擦跟我们平常生活中所用的橡皮擦是一样,它是将图层的内容擦除,只剩下空白部分。另外当我们按住Alt的键去擦除空白部分的时候,也可以将背景的部分显示出来。 另…

Flink之DataStream API开发Flink程序过程与Flink常见数据类型

开发Flink程序过程与Flink常见数据类型 DataStream APIFlink三层APIDataStream API概述 开发Flink程序过程添加依赖创建执行环境执行模式创建Data Source应用转换算子创建Data Sink触发程序执行示例 Flink常见数据类型基本数据类型字符串类型时间和日期类型数组类型元组类型列表…

【Java 进阶篇】JavaScript Array数组详解

当我们编写JavaScript代码时,经常需要处理一组数据。JavaScript中的数组(Array)是一种用于存储多个值的数据结构,它提供了许多方法和功能,使我们能够方便地操作这些数据。在本篇博客中,我们将详细探讨JavaS…

“Jwt认证在前后端分离架构中的应用与优化“

目录 引言1. JWT的简介1.1 什么是JWT1.2 JWT的优势 2. JWT工具类2.1 JWT生成与解析2.2 JWT与安全性 3. JWT案例演示后台改动前台改动 总结 引言 在当今互联网应用开发中,前后端分离架构已经成为一种主流的开发模式。而身份验证和授权是保证系统安全性的重要环节之一…

内存空间的分配与回收之连续分配管理方式

1.连续分配管理方式 连续分配:指为用户进程分配的必须是一个连续的内存空间。 1.单一连续分配 在单一连续分配方式中,内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只…

Windows下DataGrip连接Hive

DataGrip连接Hive 1. 启动Hadoop2. 启动hiveserver2服务3. 启动元数据服务4. 启动DG 1. 启动Hadoop 在控制台中输入start-all.cmd后,弹出下图4个终端(注意终端的名字)2. 启动hiveserver2服务 单独开一个窗口启动hiveserver2服务,…

HarmonyOS 远端状态订阅开发实例

IPC/RPC 提供对远端 Stub 对象状态的订阅机制, 在远端 Stub 对象消亡时,可触发消亡通知告诉本地 Proxy 对象。这种状态通知订阅需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现消…