通过xml配置实现数据动态导入导出Excel

spring-dj-excel-common.jar 一个可以通过动态配置 xml 建立 Excel 与数据关系现实数据导入导出的 spring 组件包,在 xml 配置文件里,你可以很方便的定义 Excel - sheet 表列头文本与数据表、数据实体属性的对应关系,对于创建 Excel 文件,你可以通过增加某一标签列的子项实现列头跨列展示效果,同时你也可以通过设置列头对应的样式属性 headStyle 来设置sheet表列头的文字、颜色、边框的展示效果,你也可以针对每一列进行单独的样式设置。

首先,为Excel文件与项目中的数据模型和数据表之间的关系创建一个配置文件,如果要将数据导入到Excel文件中,那么也可以在配置文件中对Excel文件进行基本的样式设置,例如,可以设置列宽, Excel 的文本大小、颜色、字体等。

单击此链接,可以下载资源编译代码生成的 JAR 包文件

单击此链接,可以下载 spring-dj-excel-common.jar 包的源代码

下面是一个简单的配置文件示例,配置文件名称可以根据实际业务进行命名,可以在源码包的 resources/excelconfigs 路径下看到示例配置文件。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<FieldMappings table="UserInfo"title="User information"headStyle="text-align:center;text-valign:center;background-color:green;color:white;border-width:1px;border-color:yellow;">    <column alias="name" allowEmpty="false" columnWidth="100" length="5" name="name" text="Name" type="string" style=""/><column alias="sex" allowEmpty="false" columnWidth="80" length="1" name="gender" text="Gender" type="string" style=""/><column alias="age" allowEmpty="true" columnWidth="80" name="age" text="Age" type="int" style=""/><column alias="phone" allowEmpty="false" columnWidth="180" length="20" name="phone" text="Phone" type="string" style=""/><!--If the column has children, it means that the parent column needs to be displayed across columns--><column alias="course" name="course" text="Course"><column index="1" alias="chinese" allowEmpty="false" columnWidth="120" length="0" name="chinese" text="Chinese" type="float" style=""/><column index="2" alias="physics" allowEmpty="false" columnWidth="120" length="0" name="physics" text="Physics" type="float" style=""/></column><column alias="address" allowEmpty="true" width="300" length="100" name="address" text="Address" type="string" style=""/>
</FieldMappings>


FieldMapping 标签属性说明:
table - 表名称,程序中数据导入导出时在调用方法时作为参数使用
title - 标题,数据导入到 Excel 中时,数里该属性值不为空,sheet表的首行首列将显示该属性值
headStyle - 设置 Excel 中数据列头的显示效果,可以设置单元格背景颜色、单元格前景色、单元格边框线宽和边框线颜色、文本大小、文本在单元格中的位置、文本字体类型、文本粗体


column 标签属性说明:
name - 对相应数据表中的列的名称
index - 序号, 设置列在 Excel 表中显示顺序, 如果不设置按配置文件中从上至下顺序依次显示
alias - 列的别名(对应于数据模型的属性名称)
text - Excel 文件中表格的列标题文本
columnWidth - 设置 Excel 文件中表的列宽,也可以使用 width 属性
allowEmpty - 在将数据导入 Excel 时,是否允许数据为空, 设置为 true 表示允许为空
type - 数据类型, 类型范围: string, int, float, double, boolean, date
length - 数据允许的长度,类型为 string 时有效
style - 为指定列设置单独的样式,与 headStyle 类似,此属性优先级高于 FieldMapping 标签中的 headStyle 属性
headStyle - 单独设置当前列在 Excel 文件中标题样式,优先级高于 style 属性及 FieldMapping 标签中的 headStyle 属性,可以设置单元格背景颜色、单元格前景色、单元格边框线宽和边框线颜色、文本大小、文本在单元格中的位置、文本字体类型、文本粗体
dataStyle - 单独设置当前列在 Excel 文件中数据单元样式,优先级高于 style 属性

通常,配置文件位于项目的资源目录中:
main
--java
--resources
----excelconfig
------excel-user-info.xml
----application.yml

向启动类添加 @EnableExcelConfigScan 注解,并指定 XML 配置文件目录位置。
示例:

  @SpringBootApplicatio@EnableExcelConfigScan(configPackages = {"excelconfig"})public class UserInformationApplication {public static void main(String[] args) {SpringApplication.run(UserInformationApplication.class, args);}}

如何使用该组件呢?

该组件支持xls和xlsx文件格式两种格式的数据导入和导出,在程序中,Excel2003表示后缀为xls文件格式,Excel2007表示xlsx文件格式后缀。

1、从 Excel 文件获取数据

@Autowired
private IExcel2003Export excel2003Export;
@Autowired
private IExcel2007Import excel2007Import;@Test
void getDataFromExcel() throws Exception {        String fPath = "D:\\user-info.xls";//The third parameter value 'UserInfo', corresponds to the value of the table attribute in the xml configuration fileexcel2003Export.exportToEntityFromFile(fPath, "Sheet1", "UserInfo", UserInfo.class, ((entity, rowIndex) -> {//Get the data for each row in the Excel fileSystem.out.println("row: " + rowIndex + ", data: " + entity.toString());return true;}));
}

2、把数据导入到 Excel 中

@Autowired
private IExcel2003Import excel2003Import;
@Autowired
private IExcel2007Import excel2007Import;private byte[] createExcel(IExcelImport excelImport) {String extName = "xls";if (IExcel2007Import.class.isAssignableFrom(excelImport.getClass())) extName = "xlsx";   try {//Getting an IExcelBuilder interface object is equivalent to creating a new sheet formIExcelBuilder builder = excelImport.createBuilder("UserInfo");UserInfo userInfo = new UserInfo();userInfo.setName("DJ").setAge(18).setPhone("1231456789").setGender(1).setUid("admin").setPwd("admin").setEmail("dj@qq.com").setAddress("China").setOrder_by(1).setIs_enabled(true);builder.createRow(userInfo, UserInfo.class);//Here we get another IExcelBuilder interface object, and we create a new sheet againbuilder = excelImport.createBuilder("UserInfo");builder.setSheetName("UserInfoQueryDTO");//Here's how to get the UserInfo data from the database and import it into the newly created sheet tableList<UserInfoQueryDTO> dtos = findUserInfoByName("allan");builder.createRows(dtos, UserInfoQueryDTO.class);byte[] datas = excelImport.getBytes();//You can also choose to save the created Excel file to a specified disk location//excelImport.save("D:\\user-info.xlsx");return datas;} catch (Exception e) {System.out.println("Excel import exception: " + e);} finally {try {excelImport.close();} catch (Exception e) {//}}return new byte[0];
}

//使用 IExcel2003Import 去调用 createExcel 方法
byte[] data = createExcel(excel2003Import);

//使用 IExcel2007Import 去调用 createExcel 方法
byte[] data = createExcel(excel2007Import);

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

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

相关文章

尽管担任社长 宫崎英高95%时间还是在做游戏

宫崎英高表示&#xff0c;虽然他是 FromSoftware 工作室的社长&#xff0c;但他日常工作的绝大部分时间都是在指导游戏开发。因魂系列大获成功而成为 FromSoftware 社长的宫崎英高在接受《卫报》采访时表示&#xff0c;企业高管生活并不是他的兴趣所在。 “我喜欢帮助年轻的监督…

cesium for unity 打包webgl失败,提示不支持

platform webgl is not supported with HDRP use the Vulkan graphics AR instead.

Linux-PXE批量安装

一、部署 PXE 远程安装服务 在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢&#xff1f;传统的 USB光驱、移动硬盘等安装方法显…

双向滑动选择器

插件地址:https://ext.dcloud.net.cn/plugin?id3940 注意: 当改变值是,让滑块自动滑动需要调用: this.$refs.powerSlider.updateValue(that.tempPowerValue[0], that.tempPowerValue[1], false); <view style"width: 90%;margin: 15px"><cj-slider ref…

CAS Apereo 5.3.16 实现单点登录

1.CAS部署 服务端下载地址&#xff1a;cas5.3 1.下载好打开后&#xff0c;复制target/cas/WEB-INF/classes/META-INF/spring.factories target/cas/WEB-INF/classes/services下的Apereo-10000002.json和HTTPSandIMAPS-10000001.json target/cas/WEB-INF/classes下的applicati…

挑战Midjourney,融合近百个SD大模型的通用模型AlbedoBase XL

在SDXL的通用模型中&#xff0c;DreamShaperXL和juggernautXL这2款大模型一直都深受广大AI绘画者的喜爱&#xff0c;不可否认&#xff0c;这2款通用模型在很多方面表现都相当出色。 今天再给大家介绍一款基于SDXL的通用大模型&#xff1a;AlbedoBase XL&#xff0c;作者的目标…

iTextSharp 绘制pdf

一、新建项目&#xff1a;pdfdemo <ItemGroup><PackageReference Include"iTextSharp.LGPLv2.Core" Version"3.4.20" /> </ItemGroup>二、HomeController.cs using iTextSharp.text; using iTextSharp.text.pdf; using Microsoft.AspN…

UWA发布 | Unity手游性能年度蓝皮书

UWA本次发布的《2023-2024年度Unity手游性能蓝皮书》将汇总游戏行业使用Unity引擎进行手游开发过程中及游戏上线后的性能表现&#xff0c;从测试机型分布、引擎各模块开销、内存占用等方面剖析定位Unity手游性能瓶颈和趋势&#xff0c;反映了Unity手游行业的现状&#xff0c;帮…

【会议征稿,JPCS出版】第三届电力系统与能源技术国际学术会议(ICPSET 2024,7月5-7)

第三届电力系统与能源技术国际学术会议&#xff08;ICPSET 2024&#xff09;将于2024年7月5-7日在杭州举办。由浙江水利水电学院电机产业学院主办&#xff0c;AEIC学术交流中心承办&#xff0c;湖州市南浔创新研究院、南浔区科技局&#xff08;科协&#xff09;协办 。会议主要…

回溯算法练习题(2024/6/18)

1全排列 II 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,…

rollup学习笔记

一直使用的webpack,最近突然想了解下rollup,就花点时间学习下. 一,什么是rollup? rollup 是一个 JavaScript 模块打包器&#xff0c;可以将小块代码编译成大块复杂的代码,比如我们的es6模块化代码,它就可以进行tree shaking,将无用代码进行清除,打包出精简可运行的代码包. 业…

【Java基础】

Java基础常见面试题总结(上) 基础概念与常识 Java 语言有哪些特点? 简单易学(语法简单,上手容易);面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性);支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程…

vue elementui table给表格中满足条件的每一条记录添加计时器

需求&#xff1a; 在前端给表格中给满足条件的每一条记录增加一个计时器&#xff0c;用于计算工作时长。 1.数据库中存储的有每条记录的作业开始时间&#xff0c;将当前时间和作业开始时间计算一个差值&#xff0c;作为作业时长的初始值&#xff1b; 2.把满足条件的每条记录绑…

Java中对象的比较

1. 对象的比较 在Java中&#xff0c;基本类型的对象可以直接比较大小&#xff0c;而自定义类型却不能 class Card {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank rank;this.suit suit;}}public class TestPriori…

2008-2022年 全国31省-环境污染综合指数

环境污染综合指数是一个衡量环境污染程度或环境质量等级的抽象概括数值。它能够综合反映不同环境要素的污染情况&#xff0c;例如水污染指数和大气污染指数等。环境空气质量综合指数&#xff08;Air Quality Index, AQI&#xff09;是专门用来描述城市环境空气质量状况的一个指…

C++进阶之AVL树

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 C进阶​ ​​​​算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.前言 二.插入 三.旋转 3.1右旋 …

如何利用数据仓库进行业务分析:一名大数据工程师的视角

在大数据时代&#xff0c;数据的有效利用对企业的成功至关重要。 本文将基于上面的流程图&#xff0c;详细介绍如何利用数据仓库进行业务分析&#xff0c;并提供实际的例子和代码演示&#xff0c;以帮助读者更好地理解和应用相关技术。 数据仓库的基本流程 上图展示了一个典…

莱辅络Rebro BIM机电专业软件

莱辅洛&#xff08;Rebro&#xff09;是一款专业机电 BIM 软件。它具备专业人士所期待的各种专业功能&#xff0c;应用于建筑机电工程的三维设计&#xff0c;并且适用于建筑、结构、给排水、暖通、电气五大专业。 该软件具有以下特点&#xff1a; • 3D 模型&#xff1a;可以…

1.接口测试-postman学习

目录 1.接口相关概念2.接口测试流程3.postman基本使用-创建请求&#xff08;1&#xff09;环境&#xff08;2&#xff09;新建项目集合Collections&#xff08;3&#xff09;新建collection&#xff08;4&#xff09;新建模块&#xff08;5&#xff09;构建请求请求URLheader设…

常见的创建型设计模式( 一 )

设计模式( 一 ) 常见的创建型设计模式 1.单例模式 : 确保一个类只有一个实例 , 为整个程序提供一个全局的访问接口。getInstance 实现方式 饿汉式&#xff0c;在调用getInstance 创建实例的时候 &#xff0c;实例已经存在了 &#xff0c;不需要我们再次去 new创建。 优点&a…