JXLS导出

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/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值