- 浏览: 700251 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 332Image Filter on Java: http:// ... -
SMB protocol in Java
2016-08-24 16:19 357http://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 1273Meet error while iput url htt ... -
[Trans]java实现RSA加密 .
2015-03-03 10:22 766http://blog.csdn.net/wxyfighti ... -
"algid parse error, not a sequence" on initialize private key of RSA
2015-03-02 14:52 992You get this error because yo ... -
Verify Signature(iText)
2015-03-02 10:54 574http://www.berthou.com/us/2009 ... -
Sample of iText
2015-01-26 17:59 640http://rensanning.iteye.com/ ... -
PDF Password
2015-01-26 16:24 652In Acrobat if the PDF is set ... -
iText - Chinese Font
2015-01-26 15:39 1661iText中输出中文,有三种方式: 1、使用iTextAs ... -
iText Relative jar
2015-01-26 15:39 746链接 说明 iT ... -
[trans] Integrate Tomcate with Appach
2013-03-28 12:07 823http://www.ibm.com/developerw ... -
SSH+mysql中文乱码问题
2012-03-03 21:56 1150网上讨论上述问题的有很多,这次其实我项目的配置都对,但是con ... -
MyEclipse8.5 for Mac installation log
2012-02-28 15:15 2326重操旧业了啊 //****************** ... -
mysql odbc不认192.168.1.22
2011-07-14 15:45 1596今天用power designer反向mysql数据库,发现m ... -
[trans]修改webRoot目录
2011-07-13 15:48 1618已经存在的项目,必须删除.setting目录并重新配置,测 ... -
[trans]在CentOS 5上安装FFMPEG
2011-07-13 15:34 979接手一个前期的Web项目,当时是用MyEclipse建立的,用 ... -
调用Runtime.getRuntime().exec后等待命令处理完毕的问题
2011-07-06 11:36 1810try{ String command = ... -
[转]Runtime.getRuntime().exec执行阻塞问题解决
2011-06-28 15:11 2749上篇博文中CallMaxentThreadPoolTask ... -
tomcat for mac start fail
2011-06-03 17:52 1161在执行./startup.sh,或者./shutdown. ...
相关推荐
"poi3.7 poi3.6解析excel2007全jar包"指的是包含了Apache POI 3.7和3.6版本中用于解析Excel 2007 (.xlsx)文件的所有必需的JAR库。 Apache POI 3.6 和 3.7 版本之间的主要区别可能在于修复了一些已知的bug,增加了新...
在本示例中,我们将重点关注如何使用Apache POI 3.6版本解析Excel 2003(.xls)文件。Excel 2003文件使用的是HSSF(Horrible Spreadsheet Format)API,它是POI项目早期版本支持的老式Excel格式。 Apache POI 提供...
"poi3.6_docs(English)"是针对Apache POI 3.6版本的英文官方帮助文档,它包含了详细的API参考、用户指南和示例代码,帮助开发者更好地理解和使用这个强大的工具。 1. **API参考**:这部分文档详细介绍了POI提供的各...
Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在本文中,我们将深入探讨如何使用Apache POI(POI-3.6.jar版本)来实现Excel的导入和导出功能。这是一项关键...
而这里的重点是"poi3.6 event api",它指的是XSSFEventUserModel API,这是一种低内存占用的读取Excel文件的方法,特别适合处理大型工作簿。 XSSFEventUserModel API是基于事件驱动模型的,与传统的XSSFUserModel ...
标题提到的是POI-3.6版本,这是一个较早的版本,但仍广泛应用于对Excel 2003、2010格式的支持。 **Apache POI 知识点** 1. **POI 概述**: Apache POI 是Apache软件基金会的一个项目,它的主要目标是使Java开发者...
- `poi-scratchpad-3.6-20091214.jar`:此库包含了一些实验性的和未稳定的功能,例如对Word和PowerPoint的支持。 - `poi-ooxml-3.6-20091214.jar`:这个库提供了与OOXML文件交互的功能,如处理.xlsx、.docx和.pptx...
在描述中提到的"当你试图解析word文档时,此包必不可少",意味着这个Apache POI版本特别适用于读取和写入Word文档。POI提供了HWPF(Horrible Word Processor Format)组件来处理老版本的Word文档(.doc),以及XWPF...
1. `poi-ooxml-schemas-3.6-20091214.jar`: 包含了微软Office Open XML(OOXML)的XML模式定义,这些模式用于解析和生成OOXML文件,如Word的`.docx`文档。 2. `xmlbeans-2.3.0.jar`: 这是一个XML处理库,Apache POI...
### 使用Apache POI导出Excel 2007并避免内存溢出问题 #### 背景介绍 在处理大量数据时,使用Java导出Excel文件可能会遇到内存溢出的问题,尤其是在导出Excel 2007(.xlsx格式)时更为常见。这是因为传统的`...
HSSF和HWPF分别用于处理老版本的BIFF格式(Excel 97-2007)和Word 97-2007格式,而XSSF和XWPF则用于处理Office Open XML(OOXML)格式的新版Excel和Word文件。 2. `poi-ooxml-3.16.jar`:这个库提供了对OOXML格式的...
例如,POI-3.6版本可以很好地处理Excel 2003和Excel 2007文件。 - 在处理大量数据时,要注意内存占用问题,可以通过设置JVM参数如`-Xms256m-Xmx512m-XX:PermSize=128M-XX:MaxPermSize=256M`来调整堆内存大小。 - ...
POI的OOXML库包含SXSSF(Streaming Usermodel API)和XSSF(XML Spreadsheet Format),前者用于处理大量数据,可以避免内存消耗过大,后者则是对XML格式的Excel文档的完全解析模型。 3. **poi-ooxml-schemas**:此...
当你试图解析word文档时,此包必不可少!!1
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个资源包包含了POI项目的源代码、相关文档以及示例,可以帮助开发者深入理解如何使用POI来操作Excel文件。 一...
本文将详细介绍如何利用给定的两个jar包——mpxj.jar和poi-3.6-20091214.jar来解析MPP文件。 首先,`mpxj.jar`是一个专门用于处理Microsoft Project文件的Java库。它提供了丰富的API,可以读取和写入MPP文件,包括...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel(.xlsx、.xls)、Word(.docx、.doc)和PowerPoint(.pptx、.ppt)。在Java环境中,Apache POI 提供了一套API,使得开发者能够方便地读取、...
在这个项目中,POI被用来读取Word文档的内容,并将其渲染为图像。以下是如何使用POI进行转换的基本步骤: 1. 引入poi-3.6-20091214.jar库。 2. 创建`HWPFDocument`对象来加载Word文档。 3. 使用`Pictures`类来获取...
4. poi-3.6-20091214.dll:这是Apache POI库的一个版本,用于处理Microsoft Office文件格式,尤其是Excel(XLS和XLSX)。尽管MPP文件不是Excel格式,但POI库可能被用作解析MPP内部结构的一部分,因为MPP文件可以包含...
1. poi-ooxml-schemas-3.6-20091214.jar、poi-3.6-20091214.jar、poi-scratchpad-3.6-20091214.jar:Apache POI 是一个用于处理Microsoft Office格式文件的Java库,如Excel(.xls 和 .xlsx)和Word(.doc 和 .docx)...