温馨提示×

温馨提示×

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

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

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

发布时间:2021-10-12 11:47:15 来源:亿速云 阅读:682 作者: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