Java Word Xml 03/07

来源:互联网 发布:淘宝网店代理 编辑:程序博客网 时间:2024/06/03 09:26

最近有需求需要支持导出03版的word功能,原有的是07的,使用apache poi实现的。由于接过别人的代码去实现功能,于是把整个导出逻辑理了一遍,模仿07的逻辑去覆盖了原来的代码。03版的用的是poi的另外一个包,API是hwpf,代码实现中发现03版的用法有好多不一样,网上搜索好多都是xwpf的实现方式,hwpf的少之又少,于是想着去google中看看,发现也是没有相关的示例,于是硬着头皮写下去看,在实现列合并和行合并这块,胡乱写了一些貌似正确API,可是写到列表中插入图片这个功能时,写不下去了,不知道怎么去实现,官网上的关于POI的SVN测试用例也没有看到相关的使用方法。折腾了很久,在百度搜索中发现了一个方法,使用XML+freeMarker去实现03版的word的导出。这个实现起来也很简单,主要是把word另存为2003的xml,然后用freeMarker语法去实现里面的逻辑,然后java代码中用freeMarker结合数据去匹配这个配置好的xml。觉得可行,再一搜索发现存在好多这样的例子。于是按照这个思路去实现,顺利的写完了一版。(至于怎么实现的,网上的教程一大把)


在这里总结下遇到的一些问题,比如在word中用task.node去占位,然后在xml中写freeMarker表达式: ${task.node},后一步操作是在xml中去完成的,我想偷懒,直接在word中写表达式为${task.node},然后转成word,发现导出后我要的效果并没有出来,该替换的数据没有替换,于是又按照示例一步一步来写,发现又可以了。对比xml发现两种写法中偷懒的一种把${task.node}给分开了,分为$,task.node,}这三部分,感叹:这是个神奇的xml。还有一个问题,在列表中嵌入图片时,按照网上的写法我一直没有得到效果,于是我按照自己的想法,去实现了,并且是可行的,在我的电脑上都能正常打开,但是我把导出的文档发给其他同事,用真正的03版word去打开,打开后显示的全是xml。。。这一下感觉奇怪了,怎么xml用07的打开正常,03版的打开又不正常了?难道xml还分03和07?带着这个疑问,我觉得我要装一个03版的word去转换为xml了,转完后发现xml部分关键代码和网上的示例是一模一样的,就是我之前用07导出的xml实现的时候一直行不通的地方,我又觉得尴尬了。。换了思路,继续实现03版的。终于,大功告成。总结: 当发现与示例不同的时候,一定要停下来思考,是不是方向不对,别花了大把的时间,结果还的重头来。