jxls2.x 模板导出 excel

      这段时间因为公司业务需求,需要每天、每周为运营人员做个数据统计,需要按照给定的模板,定时将数据导出并发送给指定的人,如果纯粹用POI去做的话,生成指定模板格式的excel会很复杂,所以在玩网上搜了一下,看看有没有好的现成的工具,结果让我发现的一个非常好用又非常简单的工具,那就是jxls,刚开始用的jxls1.x,但是功能还不能满足我的所有要求,所以后来升级换成了现在使用的jxls2.x版本,现在将jxls2.x的使用通过博客记录下来,以后如果还需要用到,直接看自己写的博客就可以了。

       jxls使用非常简单,只需要事先做好需要生成的excel样式,再加入jxls的指令和表达式即可做成模板文件,根据模板文件可以原样输出excel文件,特别是对于复杂样式的模板,简直不要太爽~~~

jxls官网地址:http://jxls.sourceforge.net/index.html

       最开始是按照李狐同学的博客:https://blog.csdn.net/sinat_15769727/article/details/78898894 完成的第一版,但是没有合并单元格的功能,之后找到 lnktoking 写的开源jxls 增强版 jxlsshttps://gitee.com/lnkToKing/jxlss,将其中新功能之一的合并单元格功能整合到自己的项目中,非常感谢两位大神的贡献。

话不多说,接下来直接上代码

首先导入jxls的依赖:

<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls</artifactId>
    <version>2.4.6</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-poi</artifactId>
    <version>1.0.12</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-jexcel</artifactId>
    <version>1.0.6</version>
</dependency>

使用的jxls的版本是2.4.6,jxls-poi的版本是1.0.12,有了这两个依赖就可以完成excel的导出了,但是如果需要动态合并单元格的话就需要导入jxls-jexcel的依赖

站在巨人的肩膀上,导出使用的封装工具类:

package com.xixi.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.jxls.common.Context;
import org.jxls.expression.JexlExpressionEvaluator;
import org.jxls.transform.Transformer;
import org.jxls.transform.poi.PoiTransformer;
import org.jxls.util.JxlsHelper;

public class JxlsUtils{
    
	static{ 
		//添加自定义指令(可覆盖jxls原指令) 
		//合并单元格(模板已经做过合并单元格操作的单元格无法再次合并)
		XlsCommentAreaBuilder.addCommandMapping("merge", MergeCommand.class); 
	}
	
    public static void exportExcel(InputStream is, OutputStream os, Map<String, Object> 
 model) throws IOException{
        Context context = PoiTransformer.createInitialContext();
        if (model != null) {
        	for (Map.Entry<String, Object> entry : model.entrySet()){
        		context.putVar(entry.getKey(), entry.getValue());
        	}
        }
        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
        Transformer transformer  = jxlsHelper.createTransformer(is, os);
        //获得配置
        JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator)transformer.getTransformationConfig().getExpressionEvaluator();
        //设置静默模式,不报警告
        evaluator.getJexlEngine().setSilent(true);
        //函数强制,自定义功能
        Map<String, Object> funcs = new HashMap<String, Object>();
        funcs.put("jx", new JxlsUtils());    //添加自定义功能
    
  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值