由于excel模板是客户提供的,并且较复杂,所以采用freemarker导出会轻松很多。

客户需要的模板如图:

第一次用freemarker按照网上教程(我用的是WPS):

参考资料

1、先用excel画好模板然后另存为xml。这里用wps轻松搞定,用office则需要自己写xml模板然后映射到excel上面。

2、把.xml改成.ftl。ftl是freemarker模板的格式。

3、往模板里头写数据,写完后在把 ftl 改回 xls 或者 xlsx,完成。

就这样很顺利的写了好几个导出excel功能,用wps也能正常打开,没多想就更新上去了,结果收到用户反馈office打不开。

编辑excel一堆xml代码,稍微看得懂,但是不知道哪个地方导致office解析不了,一头雾水,只好逐块删代码测试。

总结如下:

1、如果 ss:ExpandedRowCount 这边设置的行数值小于实际行数则报错,相应的 ss:ExpandedColumnCount  列数一样,可以

通过传参设置大小(比如ss:ExpandedRowCount="${dataList?size + 10}")。

2、<cell> 里头的 <data>设置类型时如果 百分比数据不小心设置成 ss:Type="Number",则会报错,改为String 可以解决。

3、涉及到列合并时,行是动态增加的,此时合并列后面的那些列需要加上 ss:Index=""用于指定列的位置,否则会报错,比如这样子就是正常的

<Cell ss:StyleID="s60"><Data ss:Type="String">${data.bzsbl}</Data>
</Cell>
<#if data_index+1=1><Cell ss:StyleID="s59" ss:MergeDown="${listSize}"><Data ss:Type="String">${data.hotel1}</Data></Cell><Cell ss:StyleID="s61" ss:MergeDown="${listSize}"><Data ss:Type="String">${data.hotel2}</Data></Cell><Cell ss:StyleID="s61" ss:MergeDown="${listSize}"><Data ss:Type="String">${data.hotel3}</Data></Cell>
</#if>
<Cell ss:StyleID="s62" ss:Index="16"><Data ss:Type="String">${data.szcnt}</Data>
</Cell>

4、ss:ExpandedColumnCount="" 这边设置的列数要跟<Column/>个数一至,否则会报错,比如这样子就是正常的

<pre name="code" class="html"><Table ss:ExpandedColumnCount="10" ss:ExpandedRowCount="104"x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54"ss:DefaultRowHeight="13.5"><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="91.5" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="125.25" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="93" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="81" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="83.25" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="87" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="84.75" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="85.5" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="95.25" /><Column ss:StyleID="s64" ss:AutoFitWidth="0" ss:Width="140.25" />

20171012补充:

第一次写blog,一年过去了,没想到有人看,还被转载了。为了更好的帮助有需要的人,补充一下内容。

刚开始我也是各种网上搜索,但是没能解决问题,于是决定自己摸索解决。

解决办法 跟以前做数学题一样,用排除法,将不相干的代码一点点排除,从而找到问题代码。

xml 代码结构大概是这样的:表头 + 内容 + 尾巴。

表头和尾巴一般都是固定的,比如我这个,前5行是表头,最后2行是尾巴。介于头尾的内容不固定,一般是通过循环生成。

1、我用 notepad++ 打开 xlsx文件,之所以打的开 是因为是 ftl 格式的,只是名称改成 xlsx ,本质还是 xml 内容。

2、头尾之间的内容占了主要代码量,先从这边开始删。可以把循环去掉,只留1行,然后保存,接着分别用wps、office打开文件是否成功。

3、若第2步骤office依旧报错,说明问题不在删掉的代码,那么就接着删,比如删表头,删完后继续用wps、office打开文件,检测是否正常。

重复上面步骤,很快就能找到问题代码了,嗯,我是这么解决问题的。

freemarker导出excel时office报错而wps不会相关推荐

  1. freemarker导出excel,office打不开的问题

    最近在用freemarker模板导出excel表格,实现过程就不多说了,但是用office打不开,用wps就可以用正常打开. 经过仔细摸索和查阅有关资料,得出几点方法: 1 office打开excel ...

  2. esaypoi导出excel后office打开报错

    ** esaypoi导出excel后office打开报错 ** 使用esaypoi导出excel后office打开报错,提示 "Excel 无法打开文件"导出表格 (1).xlsx ...

  3. C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535)

    C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0-65535) 一:报错 Invalid row n ...

  4. 关于MVC控制器导出Excel时MemoryStream流已关闭的问题

    在MVC控制器导出Excel时遇到一个问题,当我关闭流时,无法导出Excel文件 代码: MemoryStream ms = bll.GetOrdersExcel(info, ul, filePath ...

  5. Microsoft word/Excel/PPT打开报错问题

    很多时候我们会发现我们辛辛苦苦从网上.论坛或QQ群等地下载下来的文档.表格.PPT竟然打不开,许多人以为是文件的问题,直接删除了,而身边很多朋友会将此类问题发于我让我一一解答,其实这些问题,网上都有相 ...

  6. excel php 数字科学计数_PHP导出excel时数字变为科学计数的解决方法

    在数据导出到excel时数字格式不对,一般分为以下两种情况. 1.excel单元格设置长度不够 解决方法: $objActSheet = $objPHPExcel->getActiveSheet ...

  7. 打开WPS时出现报错窗口提示

    打开WPS时,会弹出报错窗口 WPS安装office自定义项安装期间出错 从: file:///C:/Users/asus/Desktop/RainClassroom/Vsto/rain_classr ...

  8. POI导出Excel时下拉列表值超过255的问题(String literals in formulas can‘t be bigger than 255 characters ASCII)

    一.简单的描述问题:(记录问题) 首先说一下我们导出的这个Excel表,我们是通过POI来生成一个Excel表,然后在Excel表中添加了下拉列表,然后将数据库中取出的数据放到下拉列表中,这样每次导出 ...

  9. MATLAB生成Excel后写入报错问题

    MATLAB生成Excel后写入报错问题 在我存取输出结果时,报错如图. 搜索解决办法过程中看到不同的说法. 解决办法一**:修改com设置,适用于电脑com端口被占用.** https://blog ...

最新文章

  1. 正则表达式re模块使用介绍
  2. 我看过的数据库方面的好文章
  3. ERPLAB中文教程:高级EvenList选项
  4. 服务器市场步步为营:Intel发布新款至强Xeon E5-4600v4四路处理器
  5. Disk Quota磁盘配额
  6. 文件怎么更新_iOS13屏蔽更新描述文件失效了怎么办?iOS13屏蔽系统更新教程
  7. 剑指 Offer II 056 二叉搜索树中两个节点之和
  8. 微信抢号软件_快来抢微信靓号!微信小商店正式上线
  9. 基于javaEE的网上商城购物系统
  10. RescuePRO Deluxe(闪迪数据恢复) v6.0.3.1中文破解版
  11. Python+OpenCv实现摄像头人脸识别
  12. 职业定位测试/职业能力倾向测试
  13. java上传文件怎么设置成777权限,777权限的改法是怎样的 将文件权限修改为777图文教程...
  14. 测试人员绩效考核KPI指标
  15. php实现微博话题 功能,PHP实现微博的@好友和话题功能
  16. java 对象查找_Java如何从数组中查找对象元素?
  17. swift学习资料2022
  18. 万字夜里爆肝,熬夜倾情奉献 Hive最最基础应用
  19. linux修改sda3时间,Linux服务器磁盘占满问题解决(/dev/sda3 满了)
  20. 用友BIP 安装配置专业脚手架开发工具(图文)

热门文章

  1. Kali + Win10双系统下的grub问题
  2. 第一个Flutter demo——实现无限循环列表
  3. 苹果cms重复采集重名视频解决方法
  4. 村路安防工程建设展开 未来投入将进一步加大
  5. 字节跳动大数据开发面试题-附答案
  6. ios系统脚本服务器加速,让iOS系统加速飞起来 speed intensifier插件让iOS系统加速
  7. 在苹果 M1 上运行 Linux 虚拟机变得容易了
  8. 基于JSP的电影院售票系统
  9. uniapp 生成商品海报并分享保存
  10. 计算机系统概论(原书第2版)部分课后习题答案(第四章)