java freemarker jxl excel_freemarker导出定制excel

之前我们导excel大部分用的是jxl和poi,JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护

POI是apache的项目,可对微软的Word,Excel,ppt等进行操作,包括office2003和2007,Excl2003和2007。poi现在一直有更新。所以现在主流使用POI

如果只是简单的excel,用上述工具导出没有任何问题,但如果导出定制化复杂的excel或word,就会显得很繁琐,代码也有一定难度,所以我尝试用freemarker

来导出

先制作一个定制的excel

新建一个excel,在里面写上点数据并将后缀改为.xml

0457acbece0a0d02ef530934c2f6ef50.png

将下图的 1和张三改一下以接收数据,将excel复制到项目的resource目录中将后缀名改为.ftl

ffe0c529cfaaff6c65121260a14a87d5.png

905e42742e29554c3d2c710bcb71230f.png

到这一步excel已经好了,接下来就是代码

需要的maven包

org.freemarker

freemarker

2.3.20

导出的方法

package com.pskj.GSLZ.utils.word;

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

import java.io.*;

import java.util.HashMap;

import java.util.Map;/**

* word,excel导出*/

public classFreemarkerWord {private Configuration configuration = null;publicFreemarkerWord() {

configuration= newConfiguration();

configuration.setDefaultEncoding("utf-8");

}/**

* dataMap为要装载的数据

* @param dataMap*/

public voidcreateDoc(Map dataMap) {//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,//这里我的模板是放在resources/ftl包下(放在其它位置总会报文件找不到)

configuration.setClassForTemplateLoading(this.getClass(),"/ftl");

Template t= null;try{//test2.ftl为要装载的模板

t= configuration.getTemplate("test2.ftl");

t.setEncoding("utf-8");

}catch(IOException e) {

e.printStackTrace();

}//输出文档路径及名称

File outFile= new File("E:/test2.xls");

Writerout = null;try{out = new BufferedWriter(newOutputStreamWriter(new FileOutputStream(outFile), "utf-8"));

}catch(Exception e1) {

e1.printStackTrace();

}try{

t.process(dataMap,out);out.close();

}catch(TemplateException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}public static voidmain(String[] args) {

Map map=newHashMap();

map.put("id", "1");//添加数据

map.put("name", "光头权");

FreemarkerWord fw=newFreemarkerWord();

fw.createDoc(map);//调用导出方法

}

}

运行之后

9db3a30270a894a34f1015be49f98187.png

再就是导出多条数据,修改之后的可循环遍历数据

bd236985db2b9103189c52fac51d8f4f.png

查询数据库后调用导出方法,数据也能正常导出

/**

* 根据excel模板导出数据*/@RequestMapping("listAll")

@ResponseBodypublic voidlistAll() {

PageData pd=this.getPageData();//用于接受参数的封装类

FreemarkerWord fw=new FreemarkerWord();//实例化该导出类

Map dataMap = newHashMap();try{

List list=fhlogService.listAll(pd);//获取多组数据

dataMap.put("list",list);//将数据装进Map

fw.createDoc(dataMap);//调用导出方法

}catch(Exception e){

e.printStackTrace();

}

}

参考链接: https://blog.csdn.net/guangcigeyun/article/details/78769704

参考链接: https://www.jianshu.com/p/66645b71942f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值