SpringBoot中使用JeecgBoot的Autopoi导出Excel的方法步骤
说到导出Excel,我们首先会想到poi、jsxl等,使用这些工具会显得笨重,学习难度大。今天学习使用JeecgBoot中的Autopoi导出Excel,底层基于easypoi,使用简单,还支持数据字典方式
一、开发前戏
1、引入maven依赖
org.jeecgframework autopoi-web 1.1.1 commons-codec commons-codec
exclusions是将commons-codec从autopoi中排除,避免冲突
2、切换Jeecg镜像
以下代码放在pom.xml文件中的parent标签下面
aliyun aliyunRepository http://maven.aliyun.com/nexus/content/groups/public false jeecg jeecgRepository http://maven.jeecg.org/nexus/content/repositories/jeecg false
可以看到,这里我们配置了aliyun的国内镜像,还配置了jeecg的镜像,这样方便我们下载依赖文件
3、导出工具类
我们把导出Excel通用方法写在ExcelUtils.java文件中
importorg.jeecgframework.poi.excel.def.NormalExcelConstants;
importorg.jeecgframework.poi.excel.entity.ExportParams;
importorg.jeecgframework.poi.excel.view.JeecgEntityExcelView;
importorg.springframework.web.servlet.ModelAndView;
importjava.util.List;
/**
*导出excel工具类
*
*@authorlizhou
*/
publicclassExcelUtils{
/**
*导出excel
*
*@paramtitle文件标题
*@paramclazz实体类型
*@paramexportList导出数据
*@param
*@return
*/
publicstaticModelAndViewexport(Stringtitle,Classclazz,ListexportList){
ModelAndViewmv=newModelAndView(newJeecgEntityExcelView());
mv.addObject(NormalExcelConstants.FILE_NAME,title);
mv.addObject(NormalExcelConstants.CLASS,clazz);
mv.addObject(NormalExcelConstants.PARAMS,newExportParams(title,title));
mv.addObject(NormalExcelConstants.DATA_LIST,exportList);
returnmv;
}
}
这样我们导出数据的时候,只需要传入文件的标题(标题同样作为表格的标题)、数据类型、数据集合,就可以导出数据了
二、开始导出
1、给实体类加注解
我们将需要导出的实体类或VO类中的属性加上注解@Excel
packagecom.zyxx.sys.entity; importcom.baomidou.mybatisplus.annotation.*; importcom.baomidou.mybatisplus.extension.activerecord.Model; importcom.zyxx.common.annotation.Dict; importio.swagger.annotations.ApiModel; importio.swagger.annotations.ApiModelProperty; importlombok.Data; importlombok.EqualsAndHashCode; importlombok.experimental.Accessors; importorg.jeecgframework.poi.excel.annotation.Excel; importjava.io.Serializable; /** **用户信息表 *
* *@authorlizhou *@since2020-07-06 */ @Data @EqualsAndHashCode(callSuper=false) @Accessors(chain=true) @TableName("sys_user_info") @ApiModel(value="SysUserInfo对象",description="用户信息表") publicclassSysUserInfoextendsModel{ @ApiModelProperty(value="ID") @TableId(value="id",type=IdType.AUTO) privateLongid; @Excel(name="账号",width=15) @ApiModelProperty(value="登录账号") @TableField("account") privateStringaccount; @ApiModelProperty(value="登录密码") @TableField("password") privateStringpassword; @Excel(name="姓名",width=15) @ApiModelProperty(value="姓名") @TableField("name") privateStringname; @Excel(name="电话",width=15) @ApiModelProperty(value="电话") @TableField("phone") privateStringphone; @ApiModelProperty(value="头像") @TableField("avatar") privateStringavatar; @Excel(name="性别",width=15) @ApiModelProperty(value="性别(0--未知1--男2--女)") @TableField("sex") privateIntegersex; @Excel(name="状态",width=15) @ApiModelProperty(value="状态(0--正常1--冻结)") @TableField("status") privateIntegerstatus; @Excel(name="创建时间",width=30) @ApiModelProperty(value="创建时间") @TableField("create_time") privateStringcreateTime; }
- @Excel(name=“性别”,width=15)
- name:表头
- width:列宽度
导出Excel时,只会导出加了@Excel注解的字段,不然不会导出
2、导出数据
@ApiOperation(value="导出用户信息",notes="导出用户信息")
@GetMapping(value="/export")
publicModelAndViewexportXls(SysUserInfosysUserInfo){
returnExcelUtils.export("用户信息统计报表",SysUserInfo.class,sysUserInfoService.list(1,Integer.MAX_VALUE,sysUserInfo).getData());
}
我们传入了文件的标题,类型为SysUserInfo,传入了数据的集合,这样我们请求这个API就能导出数据了
三、配合数据字典导出
上面介绍了数据的简单导出,下面介绍配合数据字典导出数据,如果对数据字典不熟悉的同学,可先看看我的另一篇博客:【SpringBoot】廿四、SpringBoot中实现数据字典
1、@Excel注解
与上面注解相比,我们需要多加一个属性,dicCode,如下
@Excel(name="性别",width=15,dicCode="sex")
@ApiModelProperty(value="性别(0--未知1--男2--女)")
@TableField("sex")
@Dict(dictCode="sex")
privateIntegersex;
- @Excel(name=“性别”,width=15,dicCode=“sex”)
- name:表头
- width:列宽度
- dicCode:字典类型
这样,我们就为这个字段注入了一个字典类型,这样就能翻译成文本了
2、配置类
要配合数据字典导出,我们需要配置autopoi的配置类AutoPoiConfig.java
importorg.jeecgframework.core.util.ApplicationContextUtil;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
/**
*autopoi配置类
*
*@AuthorLizhou
*/
@Configuration
publicclassAutoPoiConfig{
/**
*excel注解字典参数支持(导入导出字典值,自动翻译)
*举例:@Excel(name="性别",width=15,dicCode="sex")
*1、导出的时候会根据字典配置,把值1,2翻译成:男、女;
*2、导入的时候,会把男、女翻译成1,2存进数据库;
*@return
*/
@Bean
publicApplicationContextUtilapplicationContextUtil(){
returnneworg.jeecgframework.core.util.ApplicationContextUtil();
}
}
3、翻译规则
我们可以根据自己项目中的字典翻译规则,来重写autopoi的字典翻译规则AutoPoiDictService.java
importcom.zyxx.sys.entity.SysDictDetail;
importcom.zyxx.sys.mapper.SysDictDetailMapper;
importlombok.extern.slf4j.Slf4j;
importorg.jeecgframework.dict.service.AutoPoiDictServiceI;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;
importjava.util.ArrayList;
importjava.util.List;
/**
*描述:AutoPoiExcel注解支持字典参数设置
*举例:@Excel(name="性别",width=15,dicCode="sex")
*1、导出的时候会根据字典配置,把值1,2翻译成:男、女;
*2、导入的时候,会把男、女翻译成1,2存进数据库;
*
*@Authorlizhou
*/
@Slf4j
@Service
publicclassAutoPoiDictServiceimplementsAutoPoiDictServiceI{
@Autowired
privateSysDictDetailMappersysDictDetailMapper;
/**
*通过字典翻译字典文本
*
*@Authorlizhou
*/
@Override
publicString[]queryDict(StringdicTable,StringdicCode,StringdicText){
ListdictReplaces=newArrayList<>();
ListdictList=sysDictDetailMapper.queryDictItemsByCode(dicCode);
for(SysDictDetailt:dictList){
if(t!=null){
dictReplaces.add(t.getName()+"_"+t.getCode());
}
}
if(dictReplaces!=null&&dictReplaces.size()!=0){
returndictReplaces.toArray(newString[dictReplaces.size()]);
}
returnnull;
}
}
实现了AutoPoiDictServiceI接口,重写queryDict方法,这里我只使用了dicCode来查询字典列表,这样就能配合数据字典导出了
4、导出数据
导出数据如图所示
可以看出,数据已经成功导出,性别、状态等魔法值已经被翻译成文本,这样,我们的字典翻译是成功的
四、总结
以上介绍了JeecgBoot中的Autopoi导出Excel的方法,还有配合数据字典导出等操作,可以看出,比以往我们使用的poi、jsxl使用方便,导出方便,大大提高了我们的工作效率。更多相关SpringBootAutopoi导出Excel内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。