介绍
Excel导出功能采用了EasyPoi开源组件,详细的配置内容非常多,请大家直接打开EasyPoi文档进行查阅,文档内容非常详细。
下面仅介绍最基本的使用方式,大家了解了这些内容后可以满足90%的需求,如果有更复杂的设置,请查询EasyPoi文档。
实体描述
EasPoi组件对导出的数据使用注解在实体类上进行标注,常用的注解如下:
@Excel 这个是必须使用的注解,描述属性相关信息
@ExcelIgnore 导出时忽略这个属性
举个例子
/*** 服务收费标准*/@Datapublic class BasicServiceCost implements Serializable {private static final long serialVersionUID = 1L;/*** 服务收费标准主键*/@ExcelIgnore@Excel(name = "服务收费标准主键")private String id;/*** 服务收费标准名称*/@Excel(name = "收费名称", width = 20d)private String name;/*** 操作时间*/@Excel(name = "操作时间", width = 20d, exportFormat = XConst.DEFAULT_DATETIME_PATTERN)@ApiModelProperty(value = "操作时间", position = 98)private Date operateDateTime;/*** 状态*/@Excel(name = "状态", replace = {"启用_true", "禁用_false"})private Boolean status;}
- @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 | 导出隐藏列 |
导出步骤
服务端
@ApiOperation(value = "导出列表")//必须按照此格式标注@PostMapping(value = "/export", produces = {XConst.PRO_OCTETSTREAM, XConst.PRO_JSON})public void export(String name, Boolean status) {//先根据条件查询出数据列表List<BasicDeviceCost> list = basicDeviceCostService.selectList(name, status);//exportWeb方法参数//* @param data 导出的数据列表//* @param pojoClass 实体对象类型//* @param title 导出的标题//把数据列表以Excel流的形式发送给客户端ExcelHelper.exportWeb(list, BasicDeviceCost.class, "数据导出列表");}
客户端
//在Form表单中调用ExcelExportCore(() =>{var url = "/export";//接口地址var map = Map.New.Add("name", name).Add("status", status);//参数集合byte[] data = SysRuntime.Api.DownloadPost(url, map).EnsureSuccess().Data;//调用接口,返回excel二进制流return data;}, "默认文件名");
