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

 

posted on 2021-01-15 18:05  七七2020  阅读(1275)  评论(0编辑  收藏  举报

导航