java导出word模板

网上也有各种各样的实现方法,我也参考了一些,现将整个实现思路与过程与大家分享一下:

1、将word模板后缀名改为.vm,然后保存,这个时候打开会发现是一堆代码,其实也就是velocity脚本,这个脚本就是实现这个功能的关键。

      可能这个时候很多人会想,我没听过velocity,根本不会!其实,我当初也是这样想的,其实,不然!仔细看一下这些脚本,你会发现,只要有过CSS基础,有编程的一些经验就完全可以操作这种脚本。比如:

  <p class=3DMsoNormal align=3Dcenter style=3D'text-align:center;mso-pagina=
tion:widow-orphan;
  mso-element:frame;mso-element-frame-hspace:9.0pt;mso-element-wrap:around;
  mso-element-anchor-vertical:paragraph;mso-element-anchor-horizontal:page;
  mso-element-left:107.25pt;mso-element-top:20.75pt;mso-height-rule:exactly=
'><span
  lang=3DEN-US>$cutLinePlatform</span><span lang=3DEN-US style=3D'font-size=
:14.0pt;
  font-family:FangSong_GB2312'><o:p></o:p></span></p>


 

这一段,跟HTML,CSS很相似,要改字体了,直接加个style=“”,至于$cutLinePlatform,则是你需要存放到word中的参数,这个下面在讲。

2、struts配置文件注意问题:

      action中 result的type属性需要写velocity,跳转路径则是你的VM文件路径,如

<action name="NetWorkPortOutAction" class="cn.com.starit.local.web.localView.NetWorkPortOutAction">

<result name="SUCCESS" type="velocity">/localView/nwreport.vm</result>

</action>

 

3、具体的action类,也就是上一步配置的NetWorkPortOutAction

(1)将需要放入word文档的内容写成一个个属性,并添加get()和set方法(),一定要添加,这一步很重要!如果需要存放的不止一个参数,可以放在一个集合中,在vm中通过循环显示。

 (2)需要重写execute()方法

 (3)获取每一个属性的值,具体怎么获取是你的事,在通过set(“值”)传递到vm文件中

 (4)如果有中文汉字的,则需要进行转码,这边提供一种方法:
/**
  * 解决乱码的方法
  * @param str
  * @return
  */
 public String encode2HtmlUnicode(String str)
 {
    
     if(str == null) return "";
    
     StringBuilder sb = new StringBuilder(str.length() * 2);
     for (int i = 0; i < str.length(); i++)
     {
         sb.append(encode2HtmlUnicode(str.charAt(i)));
     }
     return sb.toString();
 }

 (5)当所有的属性都set值之后,就可以导出了:
response.setHeader("Content-disposition", "attachment; filename="
     + URLEncoder.encode("network.doc",
       "UTF-8"));

4、VM文件的处理

光有上面那些步骤是不够的,还需要对VM文件进行操作。
  将需要传的参数都在word文档中对应位置写好,具体为 $cutLinePlatform,其中cutLinePlatform就是第三步中的属性,然后再次生成VM文件。
  值得一提的是vm文件中集合遍历的处理,如:
#foreach($bean2 in $faultTypeIdList)
#if(${bean2.bus_count} != 0)
<span style=3D'font-s=
ize:
16.0pt;font-family:FangSong_GB2312'>        本周发生${bean2.businname}专业故障</span>
<span
lang=3DEN-US ><span style=3D'font-size:14.0pt;font-family:FangSong_GB2312'>${bean2.bus_count}次</span></span>
<span
lang=3DEN-US><o:p></o:p></span></span></p>
 #end
#end

这段代码中,通过#foreach遍历集合,集合中的值需要展示的时候,则不能像普通的属性一样用$XXX了,而是${bean2.bus_count},bean2为#foreach中定义的名称,就像java中的增强for循环,sus_count为集合中的元素,这样就可以遍历集合显示在word文档中了(这些集合中的元素不需要写在action类中的属性,action中有这个集合的属性就OK)。
  接下来就会发现能够导出你需要的word文档了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值