您好,登錄后才能下訂單哦!
本篇內容介紹了“如何實現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文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。