java-jxls根据模板导出excel

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会报错,目前未解决。

原文地址:https://www.cnblogs.com/webttt/p/14283481.html