介绍

Excel导出功能采用了EasyPoi开源组件,详细的配置内容非常多,请大家直接打开EasyPoi文档进行查阅,文档内容非常详细。

下面仅介绍最基本的使用方式,大家了解了这些内容后可以满足90%的需求,如果有更复杂的设置,请查询EasyPoi文档。

实体描述

EasPoi组件对导出的数据使用注解在实体类上进行标注,常用的注解如下:

@Excel 这个是必须使用的注解,描述属性相关信息
@ExcelIgnore 导出时忽略这个属性

举个例子

  1. /**
  2. * 服务收费标准
  3. */
  4. @Data
  5. public class BasicServiceCost implements Serializable {
  6. private static final long serialVersionUID = 1L;
  7. /**
  8. * 服务收费标准主键
  9. */
  10. @ExcelIgnore
  11. @Excel(name = "服务收费标准主键")
  12. private String id;
  13. /**
  14. * 服务收费标准名称
  15. */
  16. @Excel(name = "收费名称", width = 20d)
  17. private String name;
  18. /**
  19. * 操作时间
  20. */
  21. @Excel(name = "操作时间", width = 20d, exportFormat = XConst.DEFAULT_DATETIME_PATTERN)
  22. @ApiModelProperty(value = "操作时间", position = 98)
  23. private Date operateDateTime;
  24. /**
  25. * 状态
  26. */
  27. @Excel(name = "状态", replace = {"启用_true", "禁用_false"})
  28. private Boolean status;
  29. }
  • @Excel属性name,指定导出列的表头文本
  • 字段 id 不会被导出,因为设置了注解@ExcelIgnore
  • 字段 name 宽度设置为20,单位为字符,一个汉字是2个字符,默认是10
  • 字段 operateDateTime 设置导出日期的格式为 yyyy-MM-dd HH:mm:ss
  • 字段 status 导出时会根据值转换为启用或者禁用,因为设置了转换器:replace = {“启用_true”, “禁用_false”}

@Excel


这个是必须使用的注解,如果需求简单只使用这一个注解也是可以的,涵盖了常用的Excel需求,需要大家熟悉这个功能。

属性 类型 默认值 功能
name String null 列名,支持name_id
needMerge boolean fasle 是否需要纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row)
orderNum String “0” 列的排序,支持name_id
replace String[] {} 值得替换 导出是{a_id,b_id} 导入反过来
savePath String “upload” 导入文件保存路径,如果是图片可以填写,默认是upload/className/ IconEntity这个类对应的就是upload/Icon/
type int 1 导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本
width double 10 列宽,单位为字符,一个汉字是2个字符,默认是10。
height double 10 列高,后期打算统一使用@ExcelTarget的height,这个会被废弃,注意
isStatistics boolean fasle 自动统计数据,在追加一行统计,把所有数据都和输出[这个处理会吞没异常,请注意这一点]
isHyperlink boolean false 超链接,如果是需要实现接口返回对象
isImportField boolean true 校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败,支持name_id
exportFormat String “” 导出的时间格式,以这个是否为空来判断是否需要格式化日期
importFormat String “” 导入的时间格式,以这个是否为空来判断是否需要格式化日期
format String “” 时间格式,相当于同时设置了exportFormat 和 importFormat
databaseFormat String “yyyyMMddHHmmss” 导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出
numFormat String “” 数字格式化,参数是Pattern,使用的对象是DecimalFormat
imageType int 1 导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的
suffix String “” 文字后缀,如% 90 变成90%
isWrap boolean true 是否换行 即支持\n
mergeRely int[] {} 合并单元格依赖关系,比如第二列合并是基于第一列 则{0}就可以了
mergeVertical boolean fasle 纵向合并内容相同的单元格
fixedIndex int -1 对应excel的列,忽略名字
isColumnHidden boolean false 导出隐藏列

导出步骤

服务端

  1. @ApiOperation(value = "导出列表")
  2. //必须按照此格式标注
  3. @PostMapping(value = "/export", produces = {XConst.PRO_OCTETSTREAM, XConst.PRO_JSON})
  4. public void export(String name, Boolean status) {
  5. //先根据条件查询出数据列表
  6. List<BasicDeviceCost> list = basicDeviceCostService.selectList(name, status);
  7. //exportWeb方法参数
  8. //* @param data 导出的数据列表
  9. //* @param pojoClass 实体对象类型
  10. //* @param title 导出的标题
  11. //把数据列表以Excel流的形式发送给客户端
  12. ExcelHelper.exportWeb(list, BasicDeviceCost.class, "数据导出列表");
  13. }

客户端

  1. //在Form表单中调用
  2. ExcelExportCore(() =>
  3. {
  4. var url = "/export";//接口地址
  5. var map = Map.New.Add("name", name).Add("status", status);//参数集合
  6. byte[] data = SysRuntime.Api.DownloadPost(url, map)
  7. .EnsureSuccess().Data;//调用接口,返回excel二进制流
  8. return data;
  9. }, "默认文件名");