jxls2.4.x 解决导出多sheet时多出模板sheet问题

最近一直在研究jxls导出问题,目前用的版本是2.4.3,标签都是写在批注中,很方便;

最近做的项目需要用到导出多个sheet,导出方法很简单,但是始终会多出一个模板sheet,于是去官网找了例子查看,也都是带有一个Template的sheet,没有说明怎样去掉;

找了api,方法jxlsHelper.setDeleteTemplateSheet(true)没有起作用;方法transformer.deleteSheet("Template")会把这个模板sheet删掉,但是后面根据Template创建sheet时候失败,导致导出文件失效;

又去网上一遍又一遍的搜索,没有一个能给出答案,有人也发现了这个问题,比如..;

于是只能研究源码,找到了问题,下面把方法分享出来,供大家参考;

如下是测试时候的导出,可以看出是用processTemplate方法,如下:

public static void exportExcel(String templatePath,String destPath, Map<String,Object> params)
                throws IOException {
            Context context = new Context();
            if (params != null) {
                for (String key : params.keySet()){
                    context.putVar(key, params.get(key));
                }
            }
            InputStream in = new FileInputStream(templatePath);
            OutputStream out = new FileOutputStream(destPath);
            JxlsHelper.getInstance().setDeleteTemplateSheet(true).processTemplate(in,out,context);
        }

进去jar包,找到类JxlsHelper,可以看到方法jxlsHelper.setDeleteTemplateSheet(true)起作用是在调用processTemplateAtCell()跟方法processGridTemplateAtCell(),而且第一个sheet还不能删除,由此可见,jxlsHelper.setDeleteTemplateSheet(true)删不掉模板Sheet;如下:



所以只能改processTemplate方法;如下图:


原理:在生成sheet后且写出流之前,把模板sheet删除;

步骤:在官网下载对应的版本,把JxlsHelper.java改完后编译,然后放到jar包中,测试用新jar包导出,导出结果中没有了模板sheet,一切OK。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值