JXLS
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
JXLS报表导出
模板导出:
List<Object> list=new ArrayList();
//造数据
map1.put("ele",eledetailVo);//put进一个对象
map1.put("date",eledetailVoList);//put进一个对象集合
list.add(map1);
//定义上下文传递对象
Context context = new Context();
context.putVar("data",list);//添加数据,在模板取数据时用data取
//context.putVar("sheetName",arrayList);
String fileName = "adc.xls";
//获取模板 并转换流
InputStream is =this.getClass().getClassLoader().getResourceAsStream("template/adc.xls");
//设置导出信息
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName ,"UTF-8"));
response.setContentType("application/vnd.ms-excel");
// 写出文件
OutputStream os = new BufferedOutputStream( response.getOutputStream() );
// 生成 setDeleteTemplateSheet(是否删除模板,true代表删除,默认不删除)、processTemplateAtCell(模板文件,写入的流,Context,指定excel表中起始的位置[包含解析的单元格位置就可])
JxlsHelper.getInstance().setDeleteTemplateSheet(true).processTemplateAtCell(is, os, context,"A1");
//不删除模板,单个sheet时会覆盖模板文件,可以用processTemplateAt方法
-- JxlsHelper.getInstance().processTemplateAt(is, os, context);
导出模板设计
jx:each
模板遍历深度获取属性值
方式一、
jx:each(items=“data.date” var=“item” lastCell=“P10”)
${item.name}
优势是:以一个P10范围整体循环遍历展示
模板解析
导出样式
方式二、
${date.date.name}
只能一行一行循环
模板解析
:不写循环方法,直接获取属性方式
导出样式:
多sheet导出
List<Object> list=new ArrayList();
//造数据
map1.put("ele",eledetailVo);//put进一个对象
map1.put("date",eledetailVoList);//put进一个对象集合
list.add(map1);
ArrayList<Object> arrayList = new ArrayList<>();
arrayList.add("aa");
arrayList.add("bb");
//定义上下文传递对象
Context context = new Context();
//传递的对象,到sheet导出时,一个集合元素就是一页sheet上展示的内容
context.putVar("pages",list);
//这个是sheet名称集合,在模板中会解析sheetName,
context.putVar("sheetNames",arrayList);
String fileName = "adc.xls";
//获取模板 并转换流
InputStream is =this.getClass().getClassLoader().getResourceAsStream("template/adc.xls");
//设置导出信息
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName ,"UTF-8"));
response.setContentType("application/vnd.ms-excel");
// 写出文件
OutputStream os = new BufferedOutputStream( response.getOutputStream() );
// 生成 setDeleteTemplateSheet(是否删除模板,true代表删除,默认不删除)、processTemplateAtCell(模板文件,写入的流,Context,指定excel表中起始的位置[包含解析的单元格位置就可])
JxlsHelper.getInstance().setDeleteTemplateSheet(true).processTemplateAtCell(is, os, context,"A1");
//不删除模板,单个sheet时会覆盖模板文件,可以用processTemplateAt方法
-- JxlsHelper.getInstance().processTemplateAt(is, os, context);
模板解析
导出样式
多sheet导出时,模板页不会自动覆盖,需要删除,调用setDeleteTemplateSheet(true)方法
jxls外篇
取索引
jx:each("data" var="item" varStatus="status")
varStatus=当前遍历到的集合的索引
取值=${status.index}
分组
groupBy:根据那个字段分组,如果这个字段不一样时就分组
jx:each(items="data" groupBy="factoryNo" groupOrder="asc" lastCell="P20")
jx:each(items="_group.items" var="item" lastCell="P18")
自定义函数
// 生成--看源码,然后改造
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
Transformer transformer = jxlsHelper.createTransformer(is, os);
JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator)transformer.getTransformationConfig().getExpressionEvaluator();
Map<String, Object> funcs = new HashMap<String, Object>();
//添加自定义功能 JxlsUtils是自定义的一个工具类 utils=自定义的函数名,
funcs.put("utils", new JxlsUtils());
evaluator.getJexlEngine().setFunctions(funcs);
//生成导出
jxlsHelper.processTemplate(context,transformer );
//将JxlsUtils类当做函数定义进去
funcs.put("utils", new JxlsUtils());
JxlsUtils是自定义的一个工具类 utils=自定义的函数名,
通过这个utils函数名,可以访问JxlsUtils工具类中的方法了
模板解析:
dateFmt(Date date, String fmt)模板中传递的参数要和实际方法中一致
dateFmt()方法
// 日期格式化
public String dateFmt(Date date, String fmt) {
if (date == null) {
return "";
}
try {
SimpleDateFormat dateFmt = new SimpleDateFormat(fmt);
return dateFmt.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
JxlsUtils工具类
import org.jxls.common.Context;
import org.jxls.expression.JexlExpressionEvaluator;
import org.jxls.transform.Transformer;
import org.jxls.util.JxlsHelper;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JxlsUtils{
private static final String TEMPLATE_PATH="jxls-template";
public static void exportExcel(InputStream is, OutputStream os, Map<String, Object> model) throws IOException{
Context context = new Context();
if (model != null) {
for (String key : model.keySet()) {
context.putVar(key, model.get(key));
}
}
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
Transformer transformer = jxlsHelper.createTransformer(is, os);
JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator)transformer.getTransformationConfig().getExpressionEvaluator();
Map<String, Object> funcs = new HashMap<String, Object>();
// funcs.put("utils", new JxlsUtils()); //添加自定义功能
// evaluator.getJexlEngine().setFunctions(funcs);
jxlsHelper.processTemplate(context, transformer);
}
public static void exportExcel(File xls, File out, Map<String, Object> model) throws FileNotFoundException, IOException {
exportExcel(new FileInputStream(xls), new FileOutputStream(out), model);
}
public static void exportExcel(String templateName, OutputStream os, Map<String, Object> model) throws FileNotFoundException, IOException {
File template = getTemplate(templateName);
if(template!=null){
exportExcel(new FileInputStream(template), os, model);
}
}
//获取jxls模版文件
public static File getTemplate(String name){
String templatePath = JxlsUtils.class.getClassLoader().getResource(TEMPLATE_PATH).getPath();
File template = new File(templatePath, name);
if(template.exists()){
return template;
}
return null;
}
// 日期格式化
public String dateFmt(Date date, String fmt) {
if (date == null) {
return "";
}
try {
SimpleDateFormat dateFmt = new SimpleDateFormat(fmt);
return dateFmt.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
// if判断
public Object ifelse(boolean b, Object o1, Object o2) {
return b ? o1 : o2;
}
}
setDeleteTemplateSheet(true)删除模板源码
JxlsHelper中只有这两个方法才会调用删除模板的方法【在你在设置setDeleteTemplateSheet(true)前提下】
JxlsHelper.getInstance().setDeleteTemplateSheet(true).processTemplateAtCell(is, os, context,"A1");
jxls JxlsHelper方法文档
http://jxls.sourceforge.net/