freemarker的使用方法
- 先用word/excel写一个模板文件,然后另存为xml
- 在线格式化,方便查看。将需要替换的位置用
${}
替换 - 将xml后缀修改为
ftl
,用于Freemarker处理 - 执行程序,使用map传入对应变量。最后生成doc或xls文件
word表格处理,只支持一行一行的数据处理
<<w:tbl>> 表格
<w: tr> 一行
<w: tc> 一列
ftl中的列表形式
<#list users as user>
<p>${user}
</#list>
1.excel导出xml工作簿不包含任何xml映射
选择导出为Xml电子表格 .xml ,如下图所示。成功转化为xml形式
2.freemarker导出excel使用office打不开的解决办法(查看excel错误日志,修改对应错误)
第一步将excel后另存为xml格式后,再将xml后缀改为ftl,
导出功能做好后发现使用office打开excel报错,但是WPS正常打开,
查看excel错误日志(打开excel报错后会提示错误日志路径,你直接按路径去找是找不到的,直接C盘搜索日志名字就好)
原因可能为:
1、做模板的excel文件不是wps和office通用的版本,所以生成的excel文件office无法识别
2、模板文件为xml格式的时候,里面有些字段在office中无法识别。参考office报错日志信息修改
具体错误如下:
格式识别错误
在 表 出现 XML 错误
原因: 无效值
文件: ~\abc.xls
组: Table
标志: Row
ATTRIB: Index
值: 6
据查:是无法识别index和numberformat,暂时无法解决。只有先使用WPS打开,再另存为xls后,excel打开不会报错
报错显示工作簿设置错误
原因:ss:ExpandedRowCount
数值过小,Excel会检查设置的行数,如超过设置行数就会报错,把该值增大即可。或者动态监控:
比如:ss:ExpandedRowCount="${dataList?size + 10}"
dataList为数据集合
数据类型的错误:
<Data ss:Type="Number">序号</Data>1类型为数字,给的值却是字符串,也会导致office打不开
将Number改为String即可解决:<Data ss:Type="String">序号</Data>
参考文档
官方文档
freemarker生成excel、word、html、xml实例教程
freemarker导出excel时office报错而wps不会