日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

瀏覽:55日期:2023-04-27 16:11:19

在項目持續集成的過程中,有時候需要實現報表導出和文檔導出,類似于excel中這種文檔的導出,在要求不高的情況下,有人可能會考慮直接導出csv文件來簡化導出過程。但是導出xlsx文件,其實過程相對更復雜。解決方案就是使用poi的jar包。使用源生的poi來操作表格,代碼冗余,處理復雜,同時poi的相關聯的依賴還會存在版本兼容問題。所以直接使用poi來實現表格導出,維護成本大,不易于拓展。

我們需要學會站在巨人的肩膀上解決問題,jxls-poi這個就很好解決這個excel表格導出的多樣化的問題。類似jsp和thymealf的模板定義,使得表格導出變得簡單可控。

不多BB上代碼

1.引入關鍵依賴包

<!-- jxls-api依賴 --><dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>1.0.15</version></dependency><dependency><groupId>org.jxls</groupId><artifactId>jxls</artifactId><version>2.4.6</version></dependency>

這里只需要兩個依賴便操作excel表格了。

2.定義模板文件

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

新建一個excel文件,后綴名為.xlsx,在resources目錄下新增一個jxls的文件夾,把模板文件放在這個文件夾下,便于后續的spring-boot的集成。

3.導出工具類

/** * @author machenike */public class ExcelUtils { /*** * excel導出到response * @param fileName 導出文件名 * @param templateFile 模板文件地址 * @param params 數據集合 * @param response response */ public static void exportExcel(String fileName, InputStream templateFile, Map<String, Object> params, HttpServletResponse response) throws IOException { response.reset(); response.setHeader('Accept-Ranges', 'bytes'); OutputStream os = null; response.setHeader('Content-disposition', String.format('attachment; filename='%s'', fileName)); response.setContentType('application/octet-stream;charset=UTF-8'); try { os = response.getOutputStream(); exportExcel(templateFile, params, os); } catch (IOException e) { throw e; } } /** * 導出excel到輸出流中 * @param templateFile 模板文件 * @param params 傳入參數 * @param os 輸出流 * @throws IOException */ public static void exportExcel(InputStream templateFile, Map<String, Object> params, OutputStream os) throws IOException { try { Context context = new Context(); Set<String> keySet = params.keySet(); for (String key : keySet) {//設置參數變量context.putVar(key, params.get(key)); } Map<String, Object> myFunction = new HashMap<>(); myFunction.put('fun', new ExcelUtils()); // 啟動新的jxls-api 加載自定義方法 Transformer trans = TransformerFactory.createTransformer(templateFile, os); JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) trans.getTransformationConfig().getExpressionEvaluator(); evaluator.getJexlEngine().setFunctions(myFunction); // 載入模板、處理導出 AreaBuilder areaBuilder = new XlsCommentAreaBuilder(trans); List<Area> areaList = areaBuilder.build(); areaList.get(0).applyAt(new CellRef('sheet1!A1'), context); trans.write(); } catch (IOException e) { throw e; } finally { try {if (os != null) { os.flush(); os.close();}if (templateFile != null) { templateFile.close();} } catch (IOException e) {throw e; } } } /** * 格式化時間 */ public Object formatDate(Date date) { if (date != null) { SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss'); String dateStr = sdf.format(date); return dateStr; } return '--'; } /** * 設置超鏈接方法 */ public WritableCellValue getLink(String address, String title) { return new WritableHyperlink(address, title); }}

這個工具類中我定義兩個導出用的方法一個是直接是HttpServletResponse 導出在線下載文件一個使用輸入流導出同時模板中還支持方法傳入。

4.定義導出服務類

全局配置jxls模板的基礎路徑

#jxls模板的基礎路徑jxls.template.path: classpath:jxls/

定義服務接口

/** * excel用service */public interface ExcelService { /** * 導出excel,寫入輸出流中 * @param templateFile * @param params * @param os * @return */ boolean getExcel(String templateFile,Map<String,Object> params, OutputStream os); /** * 導出excel,寫入response中 * @param templateFile * @param fileName * @param params * @param response * @return */ boolean getExcel(String templateFile,String fileName, Map<String,Object> params, HttpServletResponse response); /** * 導出excel,寫入文件中 * @param templateFile * @param params * @param outputFile * @return */ boolean getExcel(String templateFile, Map<String,Object> params, File outputFile);}

excel導出用服務實現類

/** * excel用serviceImpl */@Servicepublic class ExcelServiceImppl implements ExcelService { private static final Logger logger = LoggerFactory.getLogger(ExcelServiceImppl.class); /** * 模板文件的基礎路徑 */ @Value('${jxls.template.path}') private String templatePath; @Override public boolean getExcel(String templateFile, Map<String, Object> params, OutputStream os) { FileInputStream inputStream = null; try { //獲取模板文件的輸入流 inputStream = new FileInputStream(ResourceUtils.getFile(templatePath + templateFile)); //導出文件到輸出流 ExcelUtils.exportExcel(inputStream, params, os); } catch (IOException e) { logger.error('excel export has error' + e); return false; } return true; } @Override public boolean getExcel(String templateFile, String fileName, Map<String, Object> params, HttpServletResponse response) { FileInputStream inputStream = null; try { //獲取模板文件的輸入流 inputStream = new FileInputStream(ResourceUtils.getFile(templatePath + templateFile)); //導出文件到response ExcelUtils.exportExcel(fileName,inputStream,params,response); } catch (IOException e) { logger.error('excel export has error' + e); return false; } return true; } @Override public boolean getExcel(String templateFile, Map<String, Object> params, File outputFile) { FileInputStream inputStream = null; try { //獲取模板文件的輸入流 inputStream = new FileInputStream(ResourceUtils.getFile(templatePath + templateFile)); File dFile = outputFile.getParentFile(); //文件夾不存在時創建文件夾 if(dFile.isDirectory()){if(!dFile.exists()){ dFile.mkdir();} } //文件不存在時創建文件 if(!outputFile.exists()){outputFile.createNewFile(); } //導出excel文件 ExcelUtils.exportExcel(inputStream, params, new FileOutputStream(outputFile)); } catch (IOException e) { logger.error('excel export has error' + e); return false; } return true; }}

如上,服務類提供了,三種導出的實現方法

導出excel寫入response中 導出excel寫入輸出流中 導出excel寫入文件中

這三種方法足以覆蓋所有的業務需求

5.編輯jxls模板

這里為方便導出最好定義與模板匹配的實體類,便于數據的裝載和導出

public class UserModel { private Integer id; private String name; private String sex; private Integer age; private String remark; private Date date; private String link; }

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

插入標注定義模板,定義迭代對象jx:each

jx:each(items='list' var='item' lastCell='G3')

上面G3 模板中迭代的結束位置,然后用類似EL表達式的方式填充到模板當中

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

填寫范圍jx:area

jx:area(lastCell='G3')

模板編輯完成后保存即可,

6.代碼測試使用

導出為本地文件

@SpringBootTestclass BlogJxlsApplicationTests { @Autowired ExcelService excelService; @Test void contextLoads() { Map<String, Object> params = new HashMap(); List<UserModel> list = new ArrayList<>(); list.add(new UserModel(1, 'test01', '男', 25, 'tttttttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(2, 'test02', '男', 20, 'tttttttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(3, 'test04', '女', 25, 'ttttddddasdadatttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(4, 'test08', '男', 20, 'ttttttdasdatttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(5, 'test021', '女', 25, 'ttttdatttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(7, 'test041', '男', 25, 'ttdadatttttttt',new Date(),'htpp://wwww.baidu.com'));params.put('list', list); excelService.getExcel('t1.xlsx', params, new File('D:test05.xlsx')); }}

導出成功

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

在線導出文件

@RestControllerpublic class TestController { @Autowired ExcelService excelService; @RequestMapping('test') public void testFile(HttpServletResponse response){ Map<String, Object> params = new HashMap(); List<UserModel> list = new ArrayList<>(); list.add(new UserModel(1, 'test01', '男', 25, 'tttttttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(2, 'test02', '男', 20, 'tttttttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(3, 'test04', '女', 25, 'ttttddddasdadatttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(4, 'test08', '男', 20, 'ttttttdasdatttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(5, 'test021', '女', 25, 'ttttdatttttt',new Date(),'htpp://wwww.baidu.com')); list.add(new UserModel(7, 'test041', '男', 25, 'ttdadatttttttt',new Date(),'htpp://wwww.baidu.com')); params.put('list', list); excelService.getExcel('t1.xlsx',System.currentTimeMillis()+'.xlsx', params,response); }}

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

導出成功

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

源碼地址https://github.com/DavidLei08/BlogJxls.git

到此這篇關于SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)的文章就介紹到這了,更多相關SpringBoot集成jxls-poi內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩伊人| 免费精品视频在线| 日韩欧美网址| 91高清一区| 免费人成精品欧美精品| 日韩一区二区中文| 91看片一区| 亚洲一级影院| 99久久九九| 五月天激情综合网| 免费不卡中文字幕在线| 卡一卡二国产精品| 久久伊人国产| 欧美国产小视频| 成人精品久久| 色狠狠一区二区三区| 综合五月婷婷| 国产aⅴ精品一区二区三区久久| 久久精品99国产精品| 国产视频网站一区二区三区| 免费国产自久久久久三四区久久 | 99国产精品久久久久久久| 六月婷婷综合| 日韩av资源网| 久久高清免费| а√在线中文在线新版| 亚洲激情五月| 99国产精品免费视频观看| 国产剧情一区| 国产麻豆一区二区三区 | 免费在线观看不卡| 久久久91麻豆精品国产一区| 蜜桃久久久久久| 国产精品99久久免费| 久久精品观看| 午夜精品影视国产一区在线麻豆| 老牛国产精品一区的观看方式| 欧美激情三区| 午夜精品久久久久久久久久蜜桃| 免费一二一二在线视频| 欧美三级精品| 精品国产不卡| 国产欧美丝祙| 欧美aa一级| 999久久久免费精品国产| 97久久中文字幕| 日韩电影免费网站| 欧美日韩18| 亚洲精品亚洲人成在线观看| 91大神在线观看线路一区| 精品免费视频| 日本不卡一区二区| 中文字幕日韩亚洲| 精品久久久网| 好看不卡的中文字幕| 丝瓜av网站精品一区二区| 欧美日韩尤物久久| 午夜精品一区二区三区国产| 9色精品在线| 国产视频一区在线观看一区免费| 国产a亚洲精品| 国产二区精品| 一区久久精品| 免费人成网站在线观看欧美高清| 久久不射中文字幕| 欧美日韩中文| 91超碰国产精品| 国产精品久久久久久妇女| 麻豆精品av| 视频一区二区三区在线| 国产欧美日韩一区二区三区在线| 免费精品视频最新在线| 日韩精品一页| 国产66精品| 国产精品九九| 久久久久久久久成人| 国产精品宾馆| 人人精品亚洲| 国产日韩电影| 精品亚洲免a| 国产精品蜜月aⅴ在线| 精品国产欧美日韩| 色欧美自拍视频| 欧美激情网址| 色老板在线视频一区二区| 欧美日韩精品免费观看视频完整| 日本国产欧美| 日韩av在线播放网址| 少妇精品久久久一区二区| 视频精品一区| 欧美香蕉视频| 久久久亚洲欧洲日产| 日韩一区免费| 日韩福利一区| 亚洲午夜电影| 久久香蕉精品| 色综合视频一区二区三区日韩 | 国产亚洲电影| 午夜在线视频观看日韩17c| 免费一区二区视频| 999国产精品视频| 夜鲁夜鲁夜鲁视频在线播放| 精品五月天堂| 天堂中文av在线资源库| 久久婷婷一区| 天堂网在线观看国产精品| 日韩电影免费在线观看| 亚洲激情中文| 男人的天堂亚洲一区| 日韩在线观看一区二区| 亚洲日本在线观看视频| 日韩在线一区二区| 一区二区国产在线| 午夜一级久久| 日韩精品一区二区三区免费视频| 视频一区欧美精品| 国产精品xxx在线观看| 欧美91在线|欧美| 欧美精品日日操| 综合亚洲自拍| 欧美网站在线| 每日更新成人在线视频| 日本国产一区| 亚洲伊人精品酒店| 日本成人精品| 国产精品试看| 亚洲深深色噜噜狠狠爱网站| 日韩精品免费一区二区在线观看| 欧美日韩91| 欧美伊人影院| 久久精品福利| 美女视频一区在线观看| 激情婷婷亚洲| 国产精品永久| 91久久中文| 精品视频国产| 最近国产精品视频| 色在线视频观看| 日韩成人精品一区二区三区 | 亚洲自啪免费| 91国语精品自产拍| 国产亚洲精品v| 欧美国产日韩电影| 日韩精品成人| 国产在线一区不卡| 香蕉久久久久久久av网站| 日韩激情精品| 少妇精品导航| 鲁大师影院一区二区三区| 亚洲国产专区| 美女毛片一区二区三区四区| 日韩福利视频网| 欧洲精品一区二区三区| 国产亚洲毛片| 婷婷综合激情| 亚洲成人国产| 日韩伦理福利| 亚洲人www| 亚州av乱码久久精品蜜桃| 亚洲区国产区| 91精品精品| 欧美日韩国产高清| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 97精品视频在线看| 亚州欧美在线| 亚洲青青久久| 久久成人一区| a日韩av网址| 亚洲黄页一区| 99国产精品私拍| 91精品一区二区三区综合| 免费看的黄色欧美网站| 98精品久久久久久久| 蜜桃av.网站在线观看| 国产午夜久久av| 国产精品分类| 久久三级毛片| 综合日韩av| 日韩一区二区免费看| 精品日韩毛片| 久久精品影视| 欧美一级精品| 日本精品不卡| 91tv亚洲精品香蕉国产一区| 91精品国产福利在线观看麻豆| 久久高清一区| 色一区二区三区| 九九99久久精品在免费线bt| 日韩精选在线| 天堂精品久久久久| 日韩三级一区| 五月天久久777| 亚洲电影在线| 中文字幕系列一区| 日韩大片在线观看| | 亚洲一区成人| 亚洲欧美日本视频在线观看| 久久一级电影| 狠狠色综合网|