高效数据传输: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.rhkb.cn/news/154405.html

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

相关文章

2023年入职/转行网络安全,该如何规划?

前言 前段时间,知名机构麦可思研究院发布了 《2022年中国本科生就业报告》,其中详细列出近五年的本科绿牌专业,其中,信息安全位列第一。 网络安全前景 对于网络安全的发展与就业前景,想必无需我多言,作为…

SQL sever中的视图

目录 一、视图概述: 二、视图好处 三、创建视图 法一: 法二: 四、查看视图信息 五、视图插入数据 六、视图修改数据 七、视图删除数据 八、删除视图 法一: 法二: 一、视图概述: 视图是一种常用…

亚马逊测评工作室应该如何开展,需要准备哪些?

亚马逊测评自养号项目需要用到哪些资源呢?1. 防火墙独立的环境 纯净IP注册资料收货地址支付卡邮箱及手机号 想做好这个项目以上的资源缺一不可 我们先来说说养号的环境,养号的环境在以前的文章里也提到过,有很多种方案,我们曾经…

JUC并发编程:Monitor和对象结构

JUC并发编程:Monitor和对象结构 1. Monitor1.1 对象的结构1.1.1 MarkWord1.1.2 Klass Word1.1.3 数组长度1.1.4 🌰 1. Monitor Monitor官方文档 我们可以把Monitor理解为一个同步工具,也可以认为是一种同步机制。它通常被描述为一个对象&…

软考高级架构师下篇-18大数据架构理论设计与实践

目录 1. 引言2. 传统数据处理系统的问题1.传统数据库的数据过载问题2.大数据的特点3.大数据利用过程4.大数据处理系统架构分析3.典型的大数据架构1. Lambda架构2.Kappa架构3. Lambda架构与Kappa架构的对比4.大数据架构的实践1.大规模视频网络2.广告平台3.公司智能决策大数据系统…

Android系统修改AOSP输入法默认输入语言

Android系统中的Android键盘(AOSP)有个语言设置选项,里面默认的是“使用系统语言”,现在客户要求关闭默认“使用系统语言”,打开美式英语。即默认如下图: 网上很多方法都是设置输入法的Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE属性为 -921088104。实际测试在Andr…

黑盒测试方法:原理+实战

目录 一、如何设计测试用例 二、黑盒测试常用方法 1、基于需求进行测试用例的设计 2、等价类 3、边界值 4、判定表分析法(因果分析法) 5、正交表 6、场景设计法 三、案例补充 1、使用Fiddler模拟弱网 2、针对一个接口该如何测试 一、如何设计测试…

算法——动态规划

一、 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 最大子数组和&#xff0c;可以建立一个dp表&#xff0c;来存放当前的位置的累加的最大和 int maxSubArray(vector<int>& nums) {int nnums.size();if(n1)return nums[0];vector<int> dp(n);int…

【办公自动化】在Excel中按条件筛选数据并存入新的表2.0(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

利达卓越:绿色金融助推经济高质量发展

随着环境问题的日益突出和可持续发展的需求增加,绿色金融将成为金融发展的重要方向之一。政府、金融机构、企业和公众都将加大对绿色金融的支持和关注,绿色金融也将更加成熟和规范。利达卓越积极推动绿色金融的快速发展,为实现可持续发展目标提供了重要支持。绿色金融将成为金融…

uni-app生命周期

uni-app的生命周期包括&#xff1a;应用生命周期、页面生命周期、组件生命周期 一、应用生命周期&#xff08;只能在App.vue文件中监听&#xff09; 函数说明onLaunch初始化完成时触发&#xff08;全局只触发一次&#xff09;onShow启动时或从后台进入前台显示onHide从前台进入…

Django实战项目-学习任务系统-用户注册

接着上期代码框架&#xff0c;开发第2个功能&#xff0c;用户注册&#xff0c;在原有用户模型基础上&#xff0c;增加一个学生用户属性表&#xff0c;用来关联学生用户的各种属性值&#xff0c;这个属性表是参考网络小说里系统属性值设计的&#xff0c;方便直观了解用户的能力高…

如何使用摩尔信使MThings连接网络设备

帽子&#xff1a; 摩尔信使MThings支持Modbus-TCP、Modbus-RTU Over TCP、Modbus-TCP Over UDP、Modbus-RTU Over UDP。 TCP链接中&#xff0c;摩尔信使MThings支持灵活的连接方式&#xff0c;主机可作为客户端也可以作为服务端&#xff0c;同时支持模拟从机以客户端方式向远…

新媒体达人投放技巧有哪些,投放总结!

达人投放&#xff0c;一个当今时代品牌传播跳不开的词。关于达人投放的优势与特点&#xff0c;相信所有人都已经不在陌生。但是真的进行达人投放时&#xff0c;又该如何实施&#xff0c;今天来分享下新媒体达人投放技巧有哪些&#xff0c;投放总结&#xff01; 一、品牌不同阶段…

C语言,输出最长连号的个数

数据范围&#xff1a;0 < n <10000. 最长连号&#xff0c;就是一组数字里面出现的连续的数字的最长长度。这里的连号最长是2 3 4 5 6&#xff0c;个数为5。 要实现求连号的个数&#xff0c;就要创建一个变量&#xff0c;用来专门计算连号的个数。在不满足连号时&#xf…

【超分】A Benchmark for Chinese-English Scene Text Image Super-resolution

中英文场景文本图像超分辨率的基准 摘要&#xff1a;场景文本图像超分&#xff08;STISR&#xff0c;Scene Text Image Super-resolution&#xff09;就是将低分辨率图像恢复为具有令人愉快的视觉和可读的文本内容。现有工作都是处理笔画简单的英文字符而不是复杂的中文字符。…

安科瑞ARB5系列弧光保护装置,智能电弧光保护,保障用电安全

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 什么是弧光 电弧是放电过程中发生的一种现象&#xff0c;当两点之间的电压超过其工频绝缘强度极限时就会发生。当适当的条件出现时&#xff0c;一个携带着电流的等离子产生&#xff0c;直到电源侧的保护设备断开才会消失。空气在通常条件…

slamplay:用C++实现的SLAM工具集

0. 项目简介 slamplay 是一个功能强大的工具集合&#xff0c;可用于开始使用 C 来玩和试验 SLAM。这是一项正在进行的工作。它在单个 cmake 框架中安装并提供一些最重要的功能 后端框架&#xff08;g2o、gtsam、ceres、se-sync 等&#xff09;、 前端工具&#xff08;opencv、…

Python教程——配置环境,再探IDE

文章目录 一、Python安装下载安装验证 二、第一个Python程序常见问题 三、Python解释器四、PyCharm工具安装和配置安装使用PyCharm基本使用 一、Python安装 下载 如果我们想要使用Python语言编写程序&#xff0c;我们必须下载Python安装包并配置Python环境&#xff0c;我们现…

Apache Ranger:(一)安装部署

1.Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。 说白了就是管理大多数框架的授权问题。 …