java-jxls根据模板导出excel(一)
说明:本文是jxls根据模板生成Excel表格到指定目录,之后调用方法下载。
使用版本:jxls V2.4.7
excel模板版本:97-2003版本
jxls官网地址:https://jxls.sourceforge.net/index.html
1、pom引入
<dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> <version>2.4.7</version> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-poi</artifactId> <version>1.0.16</version> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-jexcel</artifactId> <version>1.0.7</version> </dependency>
2、创建excel管理工具类
public class JxlsUtils { /** * 根据模板生成excel,新文件放入download文件夹下 * @param templateFileName 模板文件名 * @param newFileName 新文件名 * @param model 填充数据 * @return 新文件名 * @throws IOException */ public static String exportExcel(String templateFileName,String newFileName, Map<String, Object> model) throws IOException{ // 获取模板文件 InputStream is = new FileInputStream(new File("E://"+templateFileName)); // 输出 OutputStream os = new FileOutputStream(RuoYiConfig.getDownloadPath() +newFileName); Context context = PoiTransformer.createInitialContext(); if (model != null) { for (String key : model.keySet()) { context.putVar(key, model.get(key)); } } JxlsHelper jxlsHelper = JxlsHelper.getInstance(); Transformer transformer = jxlsHelper.createTransformer(is, os); //获得配置 JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator)transformer.getTransformationConfig().getExpressionEvaluator(); //设置静默模式,不报警告 evaluator.getJexlEngine().setSilent(true); //函数强制,自定义功能 Map<String, Object> funcs = new HashMap<String, Object>(); funcs.put("utils", new JxlsUtils()); //添加自定义功能 evaluator.getJexlEngine().setFunctions(funcs); //必须要这个,否则表格函数统计会错乱 jxlsHelper.setUseFastFormulaProcessor(false).processTemplate(context, transformer); return newFileName; } }
3、controller中调用方法
public void exportExcel(){ // 绑定数据 Map<String, Object> model = new HashMap<String, Object>(); String fileName="test.xls"; model.put("yearT", 2021);//年份 model.put("monthT", 1);//月份 JxlsUtils.exportExcel(fileName, fileName, model);//根据模板生成excel }
4、创建excel模板
(注意:如果你是用的office 2007生成的excel模板,要另存为97-2003版本的。看网上说的。)
jxls官网:http://jxls.sourceforge.net/getting_started.html
创建时注意增加批注:例子
(lastCell的范围要大于等于填充数据的最右下角单元格,增加批注的位置是变量开始的单元格。)
5、遇到的问题
a.m³单位输入可以使用输入法汉语模式下,输入“立方米”,然后选中m³。
b.10的几次方输入模板后导出的excel会报错,目前未解决。