Springboot使用jxls實現(xiàn)同sheet多個列表展示
更新時間:2024年08月15日 10:37:25 作者:專注寫bug
這篇文章主要介紹了Springboot使用jxls實現(xiàn)同sheet多個列表展示,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
前言
在之前的文章中Springboot——使用jxls實現(xiàn)excel模板導出excel,具體說明了jxls框架的基本使用。
除了最簡單的單列表展示外,jxls還具有同sheet
頁展示多個列表的能力,接下來一起繼續(xù)探究。
制定模板
1、限定模板數(shù)據(jù)的范圍
采取下面的批注,指定需要渲染顯示的報表范圍。
這里的范圍只考慮第一行的范圍!
命令如下所示:
jx:area(lastCell=”H15”)
2、設定報表展示項
報表一,只顯示單條數(shù)據(jù)。
報表二,進行列表展示,并設置批注,如下所示:
jx:each(items="dataList2" var="item" lastCell="C8")
報表三,與報表二中的批注一樣,只是接收參數(shù)變量名不同。
批注如下所示:
jx:each(items="dataList3" var="item" lastCell="C12")
編寫測試類
1、將xls模板文件放于 resource 下的 doc文件夾中
2、導入依賴文件
<!-- excel 填充 --> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>net.sf.jxls</groupId> <artifactId>jxls-core</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-poi</artifactId> <version>2.8.1</version> </dependency>
3、編寫接口和導出邏輯
@RequestMapping("/ss") public void download(HttpServletRequest request,HttpServletResponse response) throws Exception { Map<String, Object> map = new HashMap(); map.put("name1","xiangjiao"); map.put("age1","10"); map.put("are1","中國"); // 報表二 List<Map<String, Object>> dataList = new ArrayList(); for (int i = 0; i < 10; i++) { Map<String, Object> params = new HashMap<>(); params.put("name2","1_"+i); params.put("age2","xj_"+i); params.put("are2",22); dataList.add(params); } // ${item.num} map.put("dataList2",dataList); // 報表三 List<Map<String, Object>> dataList3 = new ArrayList(); for (int i = 0; i < 10; i++) { Map<String, Object> params = new HashMap<>(); params.put("name2","1_"+i); params.put("age2","xj_"+i); params.put("are2",22); dataList3.add(params); } // ${item.num} map.put("dataList3",dataList3); export(map,"test.xls","666.xls",response); } public static void export(Map<String, Object> dataMap, String reportName,String fileName, HttpServletResponse response) throws IOException { Resource resource = new ClassPathResource("/doc" +File.separator+ reportName); InputStream in = resource.getInputStream(); // 這里的context是jxls框架上的context內容 Context context = PoiTransformer.createInitialContext(); context.toMap().putAll(dataMap); Workbook workbook = WorkbookFactory.create(in); // Changing name of the first sheet workbook.setSheetName(0, "sheet1"); PoiTransformer transformer = PoiTransformer.createTransformer(workbook); OutputStream out = response.getOutputStream(); transformer.setOutputStream(out); // 文件名 - 解決中文亂碼問題 String filename = URLEncoder.encode(fileName, "UTF-8"); // 設置響應編碼 response.setCharacterEncoding("UTF-8"); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", "attachment;filename=" + filename); JxlsHelper.getInstance().processTemplate(context, transformer); in.close(); out.flush(); out.close(); }
效果預覽
結論
jxls能夠完美的實現(xiàn)樣式自定義
、單數(shù)據(jù)
、多報表
集成。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Servlet+JavaBean+JSP打造Java Web注冊與登錄功能
比作MVC的話,控制器部分采用Servlet來實現(xiàn),模型部分采用JavaBean來實現(xiàn),而大部分的視圖采用Jsp頁面來實現(xiàn),接下來我們就來詳細看看如何用Servlet+JavaBean+JSP打造Java Web注冊與登錄功能2016-05-05