- 浏览: 7337971 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析
针对Event API事件解析仅仅支持excel97~03版本的excel,然而基于XSSF and SAX (Event API)事件的解析仅仅支持excel2007解析方式:同时需要创建SAX处理器继承自SAXHandler对象。
采用XSSF and SAX (Event API) 方式解析Excel2007
excel2007是一个标准xml所以可以采用sax解析的模式。
优点:1.效率比较高。
缺点: 2.只能支持excel2007,针对97~2003格式的excel非标准的xml不支持
针对SAX的解析处理器对象:
package com.easyway.excel.events.sax; import org.apache.poi.xssf.model.SharedStringsTable; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * 创建SAX解析处理器必须继承自 * org.xml.sax.helpers.DefaultHandler * 实现响应的方法。 * @Title: * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-6-17 * @author longgangbai * @version 1.0 */ public class ExcelSheetSAXHandler extends DefaultHandler { private SharedStringsTable sst; private String lastContents; private boolean nextIsString; public ExcelSheetSAXHandler(SharedStringsTable sst) { this.sst = sst; } public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { // c => cell if(name.equals("c")) { // Print the cell reference System.out.print(attributes.getValue("r") + " - "); // Figure out if the value is an index in the SST String cellType = attributes.getValue("t"); if(cellType != null && cellType.equals("s")) { nextIsString = true; } else { nextIsString = false; } } // Clear contents cache lastContents = ""; } public void endElement(String uri, String localName, String name) throws SAXException { // Process the last contents as required. // Do now, as characters() may be called more than once if(nextIsString) { int idx = Integer.parseInt(lastContents); lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString(); nextIsString = false; } // v => contents of a cell // Output after we've seen the string contents if(name.equals("v")) { System.out.println(lastContents); } } public void characters(char[] ch, int start, int length) throws SAXException { lastContents += new String(ch, start, length); } }
针对HSSF+SAX的类:
package com.easyway.excel.events.sax; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.openxml4j.opc.Package; import org.apache.poi.xssf.eventusermodel.XSSFReader; import org.apache.poi.xssf.model.SharedStringsTable; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; /** * 采用XSSF and SAX (Event API) 方式解析Excel2007 * * excel2007是一个标准xml所以可以采用sax解析的模式。 * 优点:1.效率比较高。 * 缺点: 2.只能支持excel2007,针对97~2003格式的excel非标准的xml不支持 * * @Title: * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-6-17 * @author longgangbai * @version 1.0 */ public class SAXHandlerEventUserModel { /** * 处理excel中只有一个sheet的方法 * @param filename * @throws Exception */ public void processOneSheet(String filename) throws Exception { @SuppressWarnings("deprecation") Package pkg = Package.open(filename); //创建excel2007的阅读器对象 XSSFReader r = new XSSFReader( pkg ); SharedStringsTable sst = r.getSharedStringsTable(); XMLReader parser = fetchSheetParser(sst); // rId2 found by processing the Workbook // Seems to either be rId# or rSheet# InputStream sheet2 = r.getSheet("rId2"); InputSource sheetSource = new InputSource(sheet2); parser.parse(sheetSource); sheet2.close(); } /** * 处理excel中有多个sheet的格式的 * @param filename * @throws Exception */ public void processAllSheets(String filename) throws Exception { Package pkg = Package.open(filename); XSSFReader r = new XSSFReader( pkg ); SharedStringsTable sst = r.getSharedStringsTable(); XMLReader parser = fetchSheetParser(sst); //获取多个sheet的输入流对象 Iterator<InputStream> sheets = r.getSheetsData(); while(sheets.hasNext()) { System.out.println("Processing new sheet:\n"); InputStream sheet = sheets.next(); InputSource sheetSource = new InputSource(sheet); parser.parse(sheetSource); sheet.close(); System.out.println(""); } } /** * 设置xml阅读器的解析器对象 * @param sst * @return * @throws SAXException */ public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException { //通过放射方式获取xml阅读器对象 XMLReader parser = XMLReaderFactory.createXMLReader( "org.apache.xerces.parsers.SAXParser" ); //创建相关的xml解析器对象 ContentHandler handler = new ExcelSheetSAXHandler(sst); //设置解析器对象 parser.setContentHandler(handler); return parser; } }
测试方法如下:
package com.easyway.excel.events.sax; /** * * * @Title: 测试SAX方式解析Excel * @Description: 实现TODO * @Copyright:Copyright (c) 2011 * @Company:易程科技股份有限公司 * @Date:2012-6-17 * @author longgangbai * @version 1.0 */ public class SAXEventUserModel { public static void main(String[] args) throws Exception { System.out.println("开始采用SAX解析Excel !"); SAXHandlerEventUserModel howto = new SAXHandlerEventUserModel(); howto.processOneSheet("C:\\station2stationone.xlsx"); System.out.println("单独一个sheet解析完毕!"); howto.processAllSheets("C:\\station2stationmany.xlsx"); System.out.println("单独多个个sheet解析完毕!"); System.out.println("采用SAX解析Excel 完毕!"); } }
测试所需的两个excel文件:
- station2station.zip (27.1 KB)
- 下载次数: 97
评论
3 楼
上树的猪
2014-12-15
clgoogle 写道
但是这种方式比 一次性读到内存中的慢很多
慢了4倍左右,
14万数据(只有一列),文件大小只有1M,直接读到内存的方式,只要6s
sax这种方式需要27s
这个不知道你们有解决过
慢了4倍左右,
14万数据(只有一列),文件大小只有1M,直接读到内存的方式,只要6s
sax这种方式需要27s
这个不知道你们有解决过
大哥 内存操作肯定快啊,但是你内存能加载多大数据?
2 楼
clgoogle
2012-12-18
但是这种方式比 一次性读到内存中的慢很多
慢了4倍左右,
14万数据(只有一列),文件大小只有1M,直接读到内存的方式,只要6s
sax这种方式需要27s
这个不知道你们有解决过
慢了4倍左右,
14万数据(只有一列),文件大小只有1M,直接读到内存的方式,只要6s
sax这种方式需要27s
这个不知道你们有解决过
1 楼
qingyezhu
2012-09-23
请问,用poi3.8中的wordtohtmlconver类将doc转化为html,其中doc中含有表格(表格很宽)时,在网页中显示不正常,怎么解决呀?谢谢!
发表评论
-
【转】Django resources
2014-01-23 14:35 10825Django resources This page li ... -
使用国内镜像源来加速python pypi包的安装
2014-01-16 11:16 197837pipy国内镜像目前有: http://pypi.d ... -
[转 ]vagrant使用简介
2014-01-10 13:53 257471> 简介: vagrant提供了易于配置,重复性 ... -
[转]在Java中调用Python
2014-01-07 13:08 9218在执行之前都需要把jython对应的包加载进去,这个是必须的 ... -
[转]Jython初探
2014-01-07 11:19 2408转载自: ... -
[转]Eclipse配置PyDev插件
2014-01-02 14:25 2839安装python解释器 安装PyDev: 首 ... -
RestFuse的研究(五) Http请求的封装
2014-06-14 15:50 3642在RestFuse中封装了Http请 ... -
RestFuse的研究(四) Junit的Statement的分析
2013-12-06 11:46 1673在RestFuse提供了多种单 ... -
RestFuse的研究(三) Junit的Rule的使用和分析
2013-12-06 11:01 2238在junit中定义一些可以公用的规则(R ... -
RestFuse的研究(二) Junit的Runner的分类和模式
2013-12-06 10:40 1604在Junit4中的调用JunitCore可以采 ... -
RestFuse的研究(一) HttpJunitRunner的实现
2013-12-06 10:11 1747在RestFuse是一种针对Rest We ... -
[转]An open-source JUnit extension to test HTTP/REST APIs
2013-12-06 09:57 1100http://developer.eclipsesource ... -
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3355TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51583文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14191最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8694TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2714TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2809TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2454TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2783TestNG官方网站: http://testng.or ...
相关推荐
由于是源代码压缩包,其中的"poi-3.8-beta5"很可能包含了Apache POI项目的全部源代码文件。开发者可以深入研究源码,理解其内部工作原理,进行二次开发或定制化需求。源代码可能包括以下几个部分: 1. **src**: ...
标题中的"poi-ooxml-schemas-3.8,poi-3.8,poi-ooxml jar包合集"指的是Apache POI项目中用于处理Microsoft Office格式文件的Java库,特别是针对Excel(XLS和XLSX)文档的处理。Apache POI是一个流行的开源库,允许...
在"poi-3.8-POI-HSSF和POI-XSSF和SXSSF.rar"这个压缩包中,主要涵盖了POI项目对Excel文件处理的三个关键组件:HSSF、XSSF和SXSSF。 1. HSSF (Horrible Spreadsheet Format):这是POI项目早期开发的一个API,用于...
为了使用POI,开发者需要将提供的"poi-3.8-beta3-20110606.jar"添加到项目的类路径中,然后就可以通过调用相应的API来操作Office文件了。同时,通过学习和参考"poi-examples-3.8-beta3-20110606"中的代码,可以加快...
- **poi-3.8-20120326.jar**:核心库,提供了对HSSF(用于旧版Excel .xls)和XSSF(用于新版Excel .xlsx)的支持。 - **poi-ooxml-schemas-3.8-20120326.jar**:包含了Office Open XML的XML模式,用于解析和创建...
java中读取word文档需要引用apache的poi开源项目...为方便下载提供6个jar包,其中包含:poi-3.8.jar;poi-ooxml-3.8.jar;poi-ooxml-schemas-3.8.jar;poi-scratchpad-3.8.jar;xmlbeans-2.3.0.jar;dom4j-1.6.1.jar。
在本文中,我们将深入探讨Apache POI 3.8版本中的Event API,特别是针对HSSF(Horizontally Sparse File Format)的事件解析。Apache POI是一个流行的Java库,它允许开发人员处理Microsoft Office格式的文件,如...
这个压缩包“POI包最新版3.8-beta4-20110826”包含了POI项目的3.8-beta4版本,发布于2011年8月26日。此版本在当时的POI开发历史中扮演了重要角色,提供了对Office文档更全面和稳定的支持。 1. **POI项目介绍** - ...
poi-3.8-20120326-6个jar包: poi-3.8-20120326.jar poi-examples-3.8-20120326.jar poi-excelant-3.8-20120326.jar poi-ooxml-3.8-20120326.jar poi-ooxml-schemas-3.8-20120326.jar poi-scratchpad-3.8-20120326....
1. **poi-3.8-20120326.jar**:这是Apache POI的主要库,提供了对Excel(HSSF和XSSF)、Word(HWPF和XWPF)和PowerPoint(HSLF和XSLF)的基本支持。 2. **poi-scratchpad-3.8-20120326.jar**:此库包含了POI项目中...
Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java开发中,POI库被广泛用于读取、写入和修改这些文档。提供的jar包分别是3.8、3.10和3.11版本,每个版本都有其...
"poi-bin-3.8-beta4-20110826"是一个特定版本的POI库的二进制发行包,发布于2011年8月26日,属于3.8 beta 4版本。这个版本包含了处理Office文档所需的类和资源文件。 POI项目的核心组件包括以下几个部分: 1. **...
这个"poi-examples-3.8-beta5-sources.jar.zip"文件包含的是Apache POI 3.8 Beta 5版本的源代码示例。源代码对于开发者来说是极其宝贵的资源,它能帮助我们理解库的内部工作原理,调试问题,以及根据需求自定义功能...
在给定的文件中,"poi-3.8-20120326.jar" 和 "poi-excelant-3.8-20120326.jar" 是Apache POI库的特定版本,主要用于Java环境下读取和写入Excel文件。 Apache POI的核心功能: 1. **Excel文件处理**:Apache POI ...
poi-3.8-final-jdk1.4-20120520-rc1.jar
导入excel需要的poi-ooxml-3.8-20120326.jar
赠送原API文档:poi-ooxml-4.1.2-javadoc.jar; 赠送源代码:poi-ooxml-4.1.2-sources.jar; 赠送Maven依赖信息文件:poi-ooxml-4.1.2.pom; 包含翻译后的API文档:poi-ooxml-4.1.2-javadoc-API文档-中文(简体)版....
内部包括poi-3.8-20120326.jar、poi-ooxml-3.8-20120326.jar、poi-ooxml-schemas-3.8-20120326.jar 测试可用版本,有些下载的不能用
导入excel需要的\poi-ooxml-schemas-3.8-20120326.jar