重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
本篇內(nèi)容介紹了“如何實現(xiàn)jxls多模板多sheet導(dǎo)出excel文件”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元增城做網(wǎng)站,已為上家服務(wù),為增城各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
1.工具類
public static boolean exportMultSheetExcel(InputStream is, OutputStream os, Mapmodel, 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.接口調(diào)用
// 獲取模板文件 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) { Mapmodel = 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的構(gòu)建
jXLS使用AreaBuilder接口構(gòu)建Area,jXLS提供了兩個實現(xiàn)類:XmlAreaBuilder和XlsCommentAreaBuilder。
XmlAreaBuilder是基于XML配置文件構(gòu)建Area,XlsCommentAreaBuilder是基于Excel模板中的單元格注釋構(gòu)建Area。默認,jXLS使用XlsCommentAreaBuilder構(gòu)建Area。可以通過JxlsHelper.setAreaBuilder()方法切換構(gòu)建Area的方式。其實,這兩種構(gòu)建方式都是基于解析各自的配置使用Java API構(gòu)建Area。
4.總結(jié)
該實現(xiàn)最重要的點就是工具類的書寫,寫出工具類之后后面的直接調(diào)用即可,多模板主要是在單模板的基礎(chǔ)上多了area劃分,每一個sheet下不同模板不同的區(qū)域劃分,寫好后直接往里傳數(shù)據(jù)就實現(xiàn)了多模板多sheet導(dǎo)出。
“如何實現(xiàn)jxls多模板多sheet導(dǎo)出excel文件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!