如何实现jxls多模板多sheet导出excel文件

本篇内容介绍了“如何实现jxls多模板多sheet导出excel文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联2013年开创至今,是专业互联网技术服务公司,拥有项目网站制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元增城做网站,已为上家服务,为增城各地企业和个人服务,联系电话:18980820575

1.工具类

public static boolean exportMultSheetExcel(InputStream is, OutputStream os, Map model, Map sheet) {
        Context context = PoiTransformer.createInitialContext();
        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
        Transformer transformer = jxlsHelper.createTransformer(is, os);
        AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
        if (model != null) {
            for (String key : model.keySet()) {
                context.putVar(key, model.get(key));
            }
        }
        try {
            //获得配置
            JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig().getExpressionEvaluator();
            Map functionMap = new HashMap();
            functionMap.put("utils", new JxlsUtils());
            evaluator.getJexlEngine().setFunctions(functionMap);
            List xlsAreaList = areaBuilder.build();
            if (sheet != null) {
                for (Integer index : sheet.keySet()) {
                    Area xlsArea = xlsAreaList.get(index);
                    xlsArea.applyAt(new CellRef(sheet.get(index) + "!A1"), context);
                }
            }
            transformer.write();
            is.close();
        } catch (Exception e) {
            log.error("批量写文件错误", e);
            return false;
        }
        return true;
    }

2.接口调用

// 获取模板文件
                String tplfileName = "multi_sheet_tpl.xlsx";
                String tmpFileName = FileUtil.getTmpFileName(cName+"与"+gName);
                String tmpFilePath = FileUtils.getTempDirectoryPath() + File.separator + tmpFileName;
                // 写目标文件
                log.info("开始写目标文件tplfileName:{},tmpFileName:{}", tplfileName, tmpFileName);
                OutputStream os = new FileOutputStream(tmpFilePath);
                InputStream inputStream = FileUtil.getFileTplInputStream(tplfileName);
                if (os != null && tplfileName != null) {
                    Map model = new HashMap();
                    //sheet1
                    model.put("cGasOrders", list);

                    //sheet2
                    model.put("cName", cName);

                    Map sheet = new HashMap<>();
                    sheet.put(0, "对账函");
                    sheet.put(1, "对账明细");

                    JxlsUtils.exportMultSheetExcel(inputStream, os, model, sheet);
                    os.close();
                }

3.area的构建

jXLS使用AreaBuilder接口构建Area,jXLS提供了两个实现类:XmlAreaBuilder和XlsCommentAreaBuilder。

XmlAreaBuilder是基于XML配置文件构建Area,XlsCommentAreaBuilder是基于Excel模板中的单元格注释构建Area。默认,jXLS使用XlsCommentAreaBuilder构建Area。可以通过JxlsHelper.setAreaBuilder()方法切换构建Area的方式。其实,这两种构建方式都是基于解析各自的配置使用Java API构建Area。

4.总结

该实现最重要的点就是工具类的书写,写出工具类之后后面的直接调用即可,多模板主要是在单模板的基础上多了area划分,每一个sheet下不同模板不同的区域划分,写好后直接往里传数据就实现了多模板多sheet导出。

“如何实现jxls多模板多sheet导出excel文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网页标题:如何实现jxls多模板多sheet导出excel文件
当前路径:http://scjbc.cn/article/jgscho.html

其他资讯