- 浏览: 681617 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
shappy1978:
自己踩死自己了,我还是有远见的嘛
该死的微软,该死的IE -
calosteward:
I know Zxing and shopsavvy, bot ...
[trans]COMPARISON OF MOBILE BARCODE SCANNERS -
qq690388648:
唉……四年前的Bug,现在还没改,Apache也有不足的地方啊 ...
POI解析Word表格备忘 -
shappy1978:
Now I get to say that every met ...
Jailbreak Detection on iOS -
hebeixiaolei:
你好,我想问一下,用poi如何往word文档里插入超链接呀!
POI读取Word文档总结
刚刚接触XWPF,之前总算对HWPF摸得比较熟了,在POI对word2007摸索的过程中却发现不少问题。网上对POI的有用资料本来也不多,对于XWPF的几乎没有,这里做一点总结:
1 解析word2007需要7个包,poi,poi-scratchpad,poi-ooxml,poi-ooxml-schemas,xmlbeans,dom4j,geronimo-stax-api,缺少的话会运行时保错,暂未发现JDK版本的冲突。
2 XWPF似乎是自成体系,没有从HWPF继承已有的一些对象,不知道是原来的架构没做好还是两种word文件格式相差太大,这对于我原来的程序需要兼容多个版本word造成不少麻烦。
3 从已有的情况看,XWPF似乎是不支持isInTable的判断,检查XWPFWordExtractor解析getText的代码,居然是解析了文本,再解析表格,狂晕,作者还没找到定位table表格位置的方法?而且表格的内容似乎不再存于paragraph中了
由于XWPF采用openxml解析xml,并把所有同类的标签都分类解析,所以导出为文字时已经无法区分顺序了,实际上在docx中是顺序存放的,但是解析后把段落和表格分开存放,同时也就丢失了两者的位置关系,在Extractor就只能分别输出了,无语的半成品阿。
4 cell中居然可以支持多个段落,但是不再试用getParagraph方法,或者说只能获取一个段落getParagraph,必须用另外的方法读取。
5 从测试用例的程序可以看出,附件(如图片)是可以读出的,超链接应该也是可以的,没有详细查看。
6 cell居然无法获得宽度,郁闷,表格的问题相当多。看看它连getText都没来得及做可知完成的多么仓促
public String getText() { //TODO return null; }
7 优势方面,理论上来说已经可以区分修订的添加或者删除内容了(虽然Extractor还是同样全部输出),但是和表格同一个德行,添加和删除的内容被分类读取出来了,同样无法判断顺序,于是Extractor按照一般、删除和插入的顺序输出文字,无语...
protected XWPFParagraph(CTP prgrph, XWPFDocument docRef) { this.paragraph = prgrph; this.document = docRef; if (!isEmpty()) { // All the runs to loop over // TODO - replace this with some sort of XPath expression // to directly find all the CTRs, in the right order ArrayList<CTR> rs = new ArrayList<CTR>(); rs.addAll(Arrays.asList(paragraph.getRArray())); for (CTSdtRun sdt : paragraph.getSdtArray()) { CTSdtContentRun run = sdt.getSdtContent(); rs.addAll(Arrays.asList(run.getRArray())); } for (CTRunTrackChange c : paragraph.getDelArray()) { rs.addAll(Arrays.asList(c.getRArray())); } for (CTRunTrackChange c : paragraph.getInsArray()) { rs.addAll(Arrays.asList(c.getRArray())); }
8 (2-5)今天发现ooxml解析还存在一个bug,没有解析下面的标签
<w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="place"> <w:r> <w:rPr> <w:rFonts w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312" w:hAnsi="宋体" w:cs="宋体"/> <w:b/> <w:bCs/> <w:kern w:val="0"/> <w:szCs w:val="21"/> </w:rPr> <w:t>Para</w:t> </w:r> </w:smartTag>
smallTag的标签不知道有什么意义,是word文档自己生成的,从word中看,标签中的内容和其他文字样式上没有任何不同,但是ooxml不会解析这个标签,导致文字丢失。
目前而言,感觉XWPF完成的相当粗糙,例子很少,只有两个编辑的例子,文档则几乎没有,文档格式为xml,哪怕自己解析估计也不必POI差多少,不推荐使用。
9 宏替换标签直接把内容并入文本,导致缺少标志性标志(前缀和后缀),这样勉强替换可能误改正文,不过也没法子了。checkbox的例子,用了<w:instrText xml:space="preserve">标签,你可以看出word文档有多么繁琐。
<w:r w:rsidRPr="00E7434E"> <w:rPr> <w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/> <w:kern w:val="0"/> <w:szCs w:val="21"/> </w:rPr> <w:instrText xml:space="preserve">MACROBUTTON UncheckIt</w:instrText> </w:r> <w:r w:rsidRPr="00E7434E"> <w:rPr> <w:rFonts w:ascii="宋体" w:hAnsi="Wingdings" w:cs="宋体" w:hint="eastAsia"/> <w:kern w:val="0"/> <w:szCs w:val="20"/> </w:rPr> <w:sym w:font="Wingdings" w:char="F0FE"/> </w:r> <w:r w:rsidRPr="00E7434E"> <w:rPr> <w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/> <w:kern w:val="0"/> <w:szCs w:val="21"/> </w:rPr> <w:fldChar w:fldCharType="end"/> </w:r> <w:r w:rsidRPr="00E7434E"> <w:rPr> <w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/> <w:kern w:val="0"/> <w:szCs w:val="21"/> </w:rPr> <w:t xml:space="preserve"></w:t> </w:r> <w:r w:rsidRPr="00157D2C"> <w:rPr> <w:rFonts w:hint="eastAsia"/> </w:rPr> <w:t>固定资产</w:t> </w:r>
//*********************************************************
XWPF比较详细一点的介绍 http://hi.baidu.com/zrzx/blog/item/dde3bc31b9e248a15fdf0e36.html
费了很多功夫总算补充了POI无法定位表格位置和读取对象属性的问题,庆贺一个先。
发表评论
-
Image Filter on Java
2016-08-25 15:24 295Image Filter on Java: http:// ... -
SMB protocol in Java
2016-08-24 16:19 324http://www.du52.com/text.php?i ... -
Image Process in Java
2016-07-29 17:46 0http://www.javaworld.com/artic ... -
Source Tree - ssl certificate problem unable to get local issuer certificate
2016-05-23 14:23 1210Meet error while iput url htt ... -
[Trans]java实现RSA加密 .
2015-03-03 10:22 717http://blog.csdn.net/wxyfighti ... -
"algid parse error, not a sequence" on initialize private key of RSA
2015-03-02 14:52 937You get this error because yo ... -
Verify Signature(iText)
2015-03-02 10:54 536http://www.berthou.com/us/2009 ... -
Sample of iText
2015-01-26 17:59 605http://rensanning.iteye.com/ ... -
PDF Password
2015-01-26 16:24 621In Acrobat if the PDF is set ... -
iText - Chinese Font
2015-01-26 15:39 1605iText中输出中文,有三种方式: 1、使用iTextAs ... -
iText Relative jar
2015-01-26 15:39 707链接 说明 iT ... -
[trans] Integrate Tomcate with Appach
2013-03-28 12:07 788http://www.ibm.com/developerw ... -
SSH+mysql中文乱码问题
2012-03-03 21:56 1120网上讨论上述问题的有很多,这次其实我项目的配置都对,但是con ... -
MyEclipse8.5 for Mac installation log
2012-02-28 15:15 2272重操旧业了啊 //****************** ... -
mysql odbc不认192.168.1.22
2011-07-14 15:45 1564今天用power designer反向mysql数据库,发现m ... -
[trans]修改webRoot目录
2011-07-13 15:48 1566已经存在的项目,必须删除.setting目录并重新配置,测 ... -
[trans]在CentOS 5上安装FFMPEG
2011-07-13 15:34 948接手一个前期的Web项目,当时是用MyEclipse建立的,用 ... -
调用Runtime.getRuntime().exec后等待命令处理完毕的问题
2011-07-06 11:36 1779try{ String command = ... -
[转]Runtime.getRuntime().exec执行阻塞问题解决
2011-06-28 15:11 2698上篇博文中CallMaxentThreadPoolTask ... -
tomcat for mac start fail
2011-06-03 17:52 1121在执行./startup.sh,或者./shutdown. ...
相关推荐
收集了poi3.6跟poi3.7解析excel2007用到的包
poi3.6 兼容office 2003,2007
利用poi3.6 解析excel2003文件的程序代码.
poi3.6官方帮助文档 poi3.6官方帮助文档 poi3.6官方帮助文档
poi-3.6-20091214.jar
poi 3.6 zuixinde API chm格式
网上找了很久 poi3.6 excel2007操作 使用event api的例子
POI解析word2007文本及图片(已测试).doc
poi-3.6-20091214.jar poi-contrib-3.6-20091214.jar poi-examples-3.6-20091214.jar poi-ooxml-3.6-20091214.jar poi-ooxml-schemas-3.6-20091214.jar poi-scratchpad-3.6-20091214.jar xmlbeans-2.3.0.jar
excel poi3.6 excel poi3.6 excel poi3.6
java使用poi实现excel导入导出功能,详细描述并带有jar包
poi api 3.6.chm,poi最新版本chm格式api文档
POI-3.6 poi解析Excel(2003\2010)的jar集合,支持office2003\2010
附件包含一个web项目,是一个简单的解析excel和word的例子,项目中包含jar poi解析excel、word2007,2010等版本
ApachePOI项目是一个对微软文档格式进行读写的开源JAVA库软件。现在已更新到了3.6版本。新的版本提供了更少的内存消耗以及在改善对电子表格格式的处理性能。根据开发者,相比先前版本,POI3.6在处理电子表格数据时...
poi-3.6 poi-ooxml-3.6 poi-ooxml-schemas-3.6 poi-scratchpad-3.6
用于java导出生成excel,excel导出jsp的图片
poi 3.6 api文档 chm格式可以方便快捷的查询Java操纵office的api文档
poi-tl解析Word文档,包含表格类型的也可以
这是一个POI读取word 2003 和 word 2007的例子 是一个Eclipse工程 下载后直接导入工程 运行 src 目录下的 Test java 类即可 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包 也有需要读取的 ...