温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-12 11:47:15 来源:亿速云 阅读:588 作者:iii 栏目:编程语言

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

1.工具类

public static boolean exportMultSheetExcel(InputStream is, OutputStream os, Map<String, Object> model, Map<Integer, String> 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<String, Object> functionMap = new HashMap<String, Object>();
            functionMap.put("utils", new JxlsUtils());
            evaluator.getJexlEngine().setFunctions(functionMap);
            List<Area> 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<String, Object> model = new HashMap<String, Object>();
                    //sheet1
                    model.put("cGasOrders", list);

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

                    Map<Integer, String> 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文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI