使用Jxls进行强大、快速、可视化的Excel模板导出
使用Jxls进行强大、快速、可视化的Excel模板导出
对后端来说,使用 poi 包进行Excel文件的读取比较常用,但是如果时用poi包来进行Excel表格的导出,就十分难受了,因为要一个、一个单元格进行读写,需要控制行、列坐标,实在太难受。更为难受的是,如果产品突然要在中间插入一个单元格,那改动就十分大了
Jxls
Jxls
工具包有以下特性:
- 可视化。只需要在Excel里面书写类似
jsp
语法,jxls
就可以识别并进行数据的填充。同时你可以进行模板的美化,比如填充红色、加粗字体等。 - 修改方便。因为
jxls
类似于 模板引擎,添加、删除字段只需要修改 excel模板即可,不影响数据的填充 - 支持自定义函数。笔者认为是非常强大的功能,就是在模板渲染的时候,可以调用 java函数,这就可以实现很多灵活的转换了,比如常见的
ifelse
、日期转 字符串、0、1转是、否等操作。 - 自动处理
null
值,如果为null
则不显示,不像freemarker
一样,需要自行处理空值以及日期转换。 - 原生。打开就是Excel表格,不像
freemarker
一样有个警告框。
Jxls 常见语法
- 指定模板内容的范围,需要在模板内容最右上角的单元格添加批注(快捷键:
Shift+F2
):jx:area(lastCell="有效范围右下角的单元格")
,G3
就是上面图片所示的模板右下角的单元格。 - 遍历、循环语法:
jx:each(items="list" var= "item" lastCell="G3")
item: 就是java变量名,var就是遍历时的单个元素的名字,lastCell 就是这个遍历影响的范围。
更多语法,请参见 链接
导出工具类
注意事项
获取模板文件的时候,在 IDE 开发时可以通过 指定文件相对/绝对路径(如/templates/xxx
)从而获取到文件,但是项目上线打包成 jar 包时,相对路径会失效,从而导致导出失败,请参考 工具类里面的 JxlsExportExcelUtils.java
中的 getInputStreamByTemplateName
方法来读取文件——但这种方式则不支持本地IDE开发