ftl模板导出excel_使用freemark模板生成excel
1、背景
文件操作中导入导出功能在项目中十分常见,这里我们要聊的是导出excel这一功能。老话题常谈常新,小编给大家介绍使用freemark模板的方式导出excel。
2、实现
Demo中采用springBoot+mybatis整合项目,其他项目配置类似。
2.1 添加jar
pom.xml中配置freemark所需的jar包,如下所示:
org.springframework.boot
spring-boot-starter-freemarker
2.2 准备模板
修改excel模板(即后续导出的excel模板,包括列名和样式等内容)的扩展名为.xml文件格式。打开文件,这里需要修改一处参数。
2.2.1 修改行数
将上述代码中的“ss:ExpandedRowCount”属性的值设置为${exports?size+15} ,其中,exports是后台准备数据的值,即下面代码中map中的key值。
如果您能预估到表格中数据的条数,可以直接设置一个较大的值。
2.2.2 填充数据
这里的用法和一般的模板引擎以及jsp的用法都很类似,只要清楚具体用法就可以了,这里取一小段做示例。
0)>
${(p.student.schoolNo)!'无'}
${(p.student.systemNo)!'无'}
${(p.student.name)!'无'}
男
女
#if>
#list>
Tips:
1) 做好判空处理,否则模板会直接报错
2)保持excel代码中原有数据值不变,比如上述的ss:StyleID等。另外,每个标签都要跟上结束标签,否则生成的excel会无法打开。
修改完毕后,将文件保存为.ftl格式的文件,即freemark模板文件格式。
2.3 后台实现
@RequestMapping("index")
public void index(HttpServletRequest request, int oaId,String startDate,HttpServletResponse response, Model model) {
//填充模板的数据Vo
Map map=getPermission(oaId,startDate);
File file = null;
InputStream inputStream = null;
ServletOutputStream out = null;
try{
request.setCharacterEncoding("UTF-8");
file = new ExcelUtil().createExcel(request,map, "myExcel","all.ftl");//调用创建excel帮助类,其中all.ftl为模板名称
inputStream = new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msexcel");
response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode("name" + ".xls", "UTF-8"));
out = response.getOutputStream();
byte[] buffer = new byte[512]; // 缓冲区
int bytesToRead = -1;
// 通过循环将读入的Excel文件的内容输出到浏览器中
while ((bytesToRead = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
out.flush();
if (inputStream != null) {
inputStream.close();
}
file.delete(); //导出到浏览器后,删除项目中的临时文件
}catch(Exception e){
}
}
Utils工具类:
public File createExcel(HttpServletRequest request, Map, ?> dataMap, String type, String valueName){
realPath=request.getServletContext().getRealPath("");
try {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
configuration.setDirectoryForTemplateLoading(new File(realPath+""));
allTemplates = new HashMap();
allTemplates.put(type, configuration.getTemplate(valueName));
} catch (IOException ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
String name = "temp" + (int) (Math.random() * 100000) + ".xls";
File file = new File(name);
Template template = allTemplates.get(type);
try {
Writer w = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
template.process(dataMap, w);
w.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return file;
}
导出excel如下所示:
3、小结
使用模板生成excel适用于要展示的数据项较多,并且样式十分复杂的需求中。如果使用纯Java代码来编写这样复杂的excel,极易出错而且工作量很大。
学会变通,不同场景使用不同的方式来解决。当你发觉一直在做体力活的时候,就应该闻到了坏代码的味道……
ftl模板导出excel_使用freemark模板生成excel相关推荐
- ftl模板导出excel_使用freemarker模板引擎导出word或excel文件(代码实现)
在项目中我们会遇到很多导入导出excel或者word 有时候一些比较复杂的表格设计用freemarker 来做为模板导出还是很不错的 具体操作 我们要针对该列表做数据导出模板 在桌面右键新建一个exc ...
- python 查询mysql数据导出excl_python查询mysql并生成excel表
需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...
- Freemarker 模板导出(带图片)
1. 依赖 <!--FreeMarker--><dependency><groupId>org.freemarker</groupId><arti ...
- POI之excel固定模板导出
POI之excel固定模板导出 一.简介 二.excel模板 三.项目中maven依赖 四.Excel模板操作代码 五.Controller层excel模板导出接口代码 六.导出excel 一.简介 ...
- SpringBoot生成Excel文件并下载到浏览器
SpringBoot生成并下载Excel文件到浏览器 前言 分析业务 如何实现下载 工具类及实现方法 导出 导出工具类 下载 以请求方式下载 前言 今天又接到了如题的需求,突然脑子一抽不记得这个逻辑是 ...
- Freemark 模板生成doc文件,xml doc文件转docx 文件,docx文件转pdf文件
freemark 模板生成doc文件,此doc文件为xml格式,无法直接转pdf 需要doc转docx文件,才能转pdf 方法1:docx4j 转 pdf 方法2: e-iceblue docx 转 ...
- ftl模板导出excel_freemarker导出复杂Excel
原文: freemarker导出复杂Excel date: 2017-04-20 12:39:04 [TOC] 序言 用Freemarker做Excel导出确实很容易. 但是导出复杂Excel, 例如 ...
- ftl模板导出excel_freemarker导出Excel
freemarker 导出Excel 原创 2015年10月23日 14:47:05 927 在项目开发中,导出Excel 是比较常见的功能, 以前用过POI导出Excel 文件, 但是POI 在使用 ...
- ftl模板导出word简历
ftl模板导出 1.新建 word 文档模板 新建 word 文档(muban.doc),编辑该文档作为样板数据文档: 2.将 word 文档另存为 xml 3.将 xml 文档重命名为 ftl 将上 ...
最新文章
- binlog日志的三种模式
- c语言编程能控制热风炉,利用C语言设计热风炉悬链线拱顶研究.pdf
- 实战:在远程网络配置DNS转发
- springboot1——第一个springboot程序
- mysql中间件研究(Atlas,cobar,TDDL)
- mockito 使用_用Mockito回答
- 在Ubuntu中安装MySQL (转载)
- 丝蛋白行业调研报告 - 市场现状分析与发展前景预测
- python 设计模式之组合模式Composite Pattern
- Ajax基础之原生js封装
- java ee 设计模式解析与应用_《Java EE 设计模式解析与应用》PDF 下载
- session 过期怎么办
- NBIOT模块 HCore BC95-B5 与电信IOT平台通信-AT命令介绍
- 立创EDA学习笔记(2)——创建元件符号
- 认识机器视觉环形光源
- 链队列——-链式存储实现队列的入队出队(带next,front,rear指针)
- 电商直播方案主要有哪些内容?
- 蓝天保卫战之产品测试服务
- 为什么重写equals方法必须要重写hashCode方法
- 上海合宙Luat 模块 Air724开发板 入门指南(1)
热门文章
- 论文阅读-Retrieving and Reading : A ComprehensiveSurvey on Open-domain Question Answering
- 编写一个python程序用来计算投资回收期_计算该项目的投资回收期;
- 回调地狱,解决回调地狱,回调地狱的终极解决方案
- iOS App上架审核经验
- 禁用Linux的SCP命令
- Python实现十大经典排序 I
- SVG阴影、渐变、滤镜
- Win32编程API 基础篇 -- 1.入门指南 根据英文教程翻译
- FloatingActionButton悬浮菜单按钮的实现
- 【栖梧-源码-spring】@Bean从解析到注册到beanDefinitionMap