jxls根据模板导出Excel(二)
说明:本文是jxls根据模板导出Excel直接下载。
使用版本:jxls V2.10.0
excel模板版本:.xlsx格式
jxls官网地址:https://jxls.sourceforge.net/index.html
1、pom引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | < dependency > < groupId >org.jxls</ groupId > < artifactId >jxls</ artifactId > < version >2.10.0</ version > </ dependency > < dependency > < groupId >org.jxls</ groupId > < artifactId >jxls-poi</ artifactId > < version >2.10.0</ version > </ dependency > < dependency > < groupId >org.jxls</ groupId > < artifactId >jxls-jexcel</ artifactId > < version >1.0.8</ version > </ dependency > < dependency > < groupId >org.apache.commons</ groupId > < artifactId >commons-jexl</ artifactId > < version >2.1.1</ version > </ dependency > |
2、Controller调用方法
1 2 3 4 5 6 7 | @PostMapping ( "/export" ) public AjaxResult export(HttpServletResponse response, Data data) throws IOException { String fileName = "test.xlsx" ; Map<String, Object> model = dataService.getExportData(data,fileName); //拼接需要导出的内容 response.addHeader( "Content-Disposition" , "attachment; filename=\"" + fileName + "\"" ); return JxlsUtils.exportExcelWithOS(response.getOutputStream(),fileName, model); } |
3、拼接数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public Map<String, Object> getExportData(Data data,String fileName) { Map<String, Object> model = new HashMap<String, Object>(); // 绑定数据 try { //可绑定单个参数,Excel模板中单元格直接用${test1}获取 model.put( "test1" , "ttt" ); //可绑定list,使用${item.参数名}获取,需在列表首个单元格中增加批注 List<Data1> taskItems = new ArrayList<Data1>(); //Data1为某个数据类 for ( int i= 0 ;i< 5 ;i++) { Data1 d= new Data1; //d.setA("111"); taskItems.add(d); } model.put( "taskItems" , taskItems); } catch (Exception ex){ logger.error(ex.getMessage()); System.out.println(ex.getMessage()); } return model; } |
4、Excel导出方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import org.apache.commons.jexl3.JexlBuilder; import org.apache.commons.jexl3.JexlEngine; import org.jxls.builder.xls.XlsCommentAreaBuilder; import org.jxls.common.Context; import org.jxls.expression.JexlExpressionEvaluator; import org.jxls.transform.Transformer; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.JxlsHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.util.HashMap; import java.util.Map; public class JxlsUtils { static { } /** * 根据模板生成文件,直接下载 * @param os 流数据 * @param templateFileName 模板文件名称 * @param model 填充数据 * @throws IOException */ public static AjaxResult exportExcelWithOS(OutputStream os , String templateFileName, Map<String, Object> model) throws IOException{ // 获取模板文件 InputStream is = new FileInputStream( new File(模板文件路径地址 + templateFileName)); try { // 输出 Context context = PoiTransformer.createInitialContext(); if (model != null ) { for (String key : model.keySet()) { context.putVar(key, model.get(key)); } } JxlsHelper.getInstance().setUseFastFormulaProcessor( false ).setEvaluateFormulas( true ).processTemplate(is, os, context); } catch (Exception ex){ System.out.println(ex.getMessage()); logger.error(ex.getMessage()); return AjaxResult.error(ex.getMessage()); } finally { is.close(); } return AjaxResult.success(); } } |
5、Excel模板,创建xlsx格式模板
添加批注,第一个单元格添加范围批注,jx:area(lastCell="K3")
list列表增加jx:each(items="taskItems" var="item" lastCell="K3")
之前写过另一种方法,先根据模板生成Excel,然后调用方法导出,可参考:https://www.cnblogs.com/webttt/p/14283481.html
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2019-06-20 c# 获取月份的天数
2018-06-20 laravel excel导出调节列宽度,对某列中数据颜色处理