个性化与默认EXCEL文件导出实现

文章目录

需求excel可实现个性化导出同时配置默认导出

接口1忽略某些字段采用默认模板导出

java 复制代码
public static <T> void exportExcelExclude(
HttpServletResponse response, //客户端响应
String sheetName, //表单名
Class clazz, //EO类
List<T> data) {//数据
}

EXCEL模板配置

无需配置,按照EO默认横向书写List中的某个数据,纵向书写整个List

优点

  • 表头无需自定义,EO文件 中ExcelProperty即可指定表头单列名称,开发便捷高效

缺点

  • 丰富型个性化表格样式无法设置

思路

  1. 设置响应内容(HttpServletResponse,sheetName)响应给客户端文件名EXCEL文件
  2. 通过排除注解ExcelExclude是否存在来过滤,得到导出字段excludeList
  3. EasyExcel写出文件到客户端

核心代码

java 复制代码
EasyExcel.write(response.getOutputStream(), clazz).excludeColumnFiledNames(excludeList)).sheet(sheetName).doWrite(data);

接口2填充指定内容到指定模板导出

java 复制代码
 public static <T> void exportFillExcel(
 HttpServletResponse response, //客户端响应对象
 String sheetName,//表单名
  InputStream templateFileStream,//模板文件流
   List<T> list,//数据A
    Map<String, Object> map) {//数据B
 }

思路

  • 设置响应内容(HttpServletResponse,sheetName)传给客户端文件名EXCEL文件
  • 构造器(创建型模式)基于模板文件构建输出流EXCEL对象
  • 创建WriteSheet 表写对象 ------真正的写者
  • 设置写Sheet 数据表配置方式 fillConfig 数据展现样式 横纵方向
  • EXCEL对象基于传入的两种数据使用Sheet 写对象写到客户端

核心代码

java 复制代码
InputStream template = this.getClass().getClassLoader().getResourceAsStream(XXX.XLS);
excelWriter.fill(list, fillConfig, writeSheet);
excelWriter.fill(map, writeSheet);

EXCEL模板配置

忽略EO,仅读入数据、数据不同 模板文件配置书写有区别

  • List传入数据
java 复制代码
{.propertyName}
  • Map传入数据
java 复制代码
{keyName}

优点

  • 满足个性化表单导出,下一步可作为银行商票、销售、物流单据等内容进行打印操作

缺点

  • 模板文件所有样式都将被读入,对于大型商用模板,增加CODER时间成本,故预设样式需指定专员提供,
  • 在List书写数据时任然按照上述方式,单条可指定任意位置填充,大量数据需写Sheet 数据表配置方式 或写入Map
相关推荐
二哈赛车手2 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~3 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
程序员敲代码吗3 小时前
Go语言中Channel的实现与内存通信机制详解
excel
YDS8293 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
未若君雅裁4 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记5 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI5 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
辰海Coding6 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路6 小时前
C++ 多线程与并发
java·jvm·c++