- 浏览: 853673 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
在以前的Excel解析時候,我們通常需要編寫Excel解析只能解析一種格式03版或者07版。現在POI3.5以後可以解析兩種格式。我們知道在07的excel是基於xml格式的文件。
POI3.5以後的API包括如下幾個方面:
The Apache POI Project's mission is to create and maintain Java APIs for manipulating various file formats based upon the Office Open XML standards (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2). In short, you can read and write MS Excel files using Java. In addition, you can read and write MS Word and MS PowerPoint files using Java. Apache POI is your Java Excel solution (for Excel 97-2008). We have a complete API for porting other OOXML and OLE2 formats and welcome others to participate.
OLE2 files include most Microsoft Office files such as XLS, DOC, and PPT as well as MFC serialization API based file formats. The project provides APIs for the OLE2 Filesystem (POIFS) and OLE2 Document Properties (HPSF) .
Office OpenXML Format is the new standards based XML file format found in Microsoft Office 2007 and 2008. This includes XLSX, DOCX and PPTX. The project provides a low level API to support the Open Packaging Conventions using openxml4j .
For each MS Office application there exists a component module that attempts to provide a common high level Java api to both OLE2 and OOXML document formats. This is most developed for Excel workbooks (SS=HSSF+XSSF ) . Work is progressing for Word documents (HWPF+XWPF ) and PowerPoint presentations (HSLF+XSLF) .
HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.
HSSF and XSSF provides ways to read spreadsheets create, modify, read and write XLS spreadsheets. They provide:
- low level structures for those with special needs
- an eventmodel api for efficient read-only access
- a full usermodel api for creating, reading and modifying XLS files
使用前提條件:
1.POI的版本必須高於等於3.5.
2.JDK的版本必須高於等於1.5.
本文重點代碼講述一下:
針對讀取03和07版本的excel的公共方法如下:
/** * 根據文件的路徑創建Workbook對象 * @param filePath */ private Workbook getExcelWorkBook(String filePath) { InputStream ins = null; Workbook book = null; try { ins=new FileInputStream(new File(filePath)); //ins= ExcelService.class.getClassLoader().getResourceAsStream(filePath); book = WorkbookFactory.create(ins); ins.close(); return book; } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (ins != null) { try { ins.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; }
/** * 以Map的格式存儲數�? * 讀取Excel文件的數�? * @param filePath excel 文件的 * @param headTitle * @return */ public Map<String,List<Map<String,Object>>> readEXCELMap(String filePath,String[] headTitle){ //獲取workbook對象 Workbook workbook=getExcelWorkBook(filePath); //獲取sheet頁數 int sheetNum=workbook.getNumberOfSheets(); //存儲excel相關的數�? Map<String,List<Map<String,Object>>> excelData=new HashMap<String,List<Map<String,Object>>>(); //遍曆相關sheet頁面獲取相關的數�? if(sheetNum>0){ for (int index = 0; index < sheetNum; index++) { //創建sheet Sheet sheet=workbook.getSheetAt(index); //獲取sheet的名�? String sheetName=workbook.getSheetName(index); //獲取相關的數�? List<Map<String,Object>> sheetData=getExcelMapData(sheet, headTitle); excelData.put(sheetName, sheetData); } } return excelData; }
/** * 獲取sheet表中的數�? * @param sheet * @return�?eadTitle 格式�?.1.2....列標做为key */ private List<Map<String,Object>> getExcelMapData(Sheet sheet,String[] headTitle){ //獲取�?��和結束行 int startRow=sheet.getFirstRowNum(); int lastRow=sheet.getLastRowNum(); List<Map<String,Object>> allRowMapData=new ArrayList<Map<String,Object>>(); if(startRow!=lastRow){ //忽略第一行數�? startRow=startRow+1; //獲取行數�? for(int indexRow=startRow;indexRow<lastRow;indexRow++){ Row row=sheet.getRow(indexRow); if(row==null){ continue; } int firstCellNum=row.getFirstCellNum(); int lastCellNum=row.getLastCellNum(); Map<String,Object> RowDataMap=new HashMap<String,Object>(); //遍曆相關的列數據 for (int indexCol = firstCellNum; indexCol <lastCellNum; indexCol++) { Cell cell=row.getCell(indexCol); String cellKey=headTitle[indexCol-firstCellNum]; if(cell==null){ continue; } //獲取列的數據的信�? Object cellValue = getCellValue(cell); RowDataMap.put(cellKey, cellValue); } allRowMapData.add(RowDataMap); } } return allRowMapData; }
/** * * 以Bean的方式存儲bean對象 * 讀取Excel文件的數�? * @param filePath excel 文件的路 * @param headTitle * @param clazz * @return */ public Map<String,List<T>> readEXCELBean(String filePath,String[] headTitle,Class<T> clazz){ //獲取workbook對象 Workbook workbook=getExcelWorkBook(filePath); //獲取sheet頁數 int sheetNum=workbook.getNumberOfSheets(); //存儲excel相關的數�? Map<String,List<T>> excelData=new HashMap<String,List<T>>(); //遍曆相關sheet頁面獲取相關的數�? if(sheetNum>0){ for (int index = 0; index < sheetNum; index++) { //創建sheet Sheet sheet=workbook.getSheetAt(index); //獲取sheet的名�? String sheetName=workbook.getSheetName(index); //獲取相關的數�? List<T> sheetData=getExcelBeanData(sheet, headTitle,clazz); excelData.put(sheetName, sheetData); } } return excelData; }
/** * 獲取sheet表中的數�? * @param sheet * @param sheet�?eadTitle bean每列對應的屬性數�? * @param clazz bean對應的類 * @throws InstantiationException */ @SuppressWarnings("unused") private List<T> getExcelBeanData(Sheet sheet,String[] headTitle,Class<T> clazz) { //獲取�?��和結束行 int startRow=sheet.getFirstRowNum(); int lastRow=sheet.getLastRowNum(); List<T> allRowMapData=new ArrayList<T>(); if(startRow!=lastRow){ //忽略第一行數�? startRow=startRow+1; //獲取行數�? for(int indexRow=startRow;indexRow<lastRow;indexRow++){ Row row=sheet.getRow(indexRow); if(row==null){ continue; } int firstCellNum=row.getFirstCellNum(); int lastCellNum=row.getLastCellNum(); T bean=null; try { bean = clazz.newInstance(); //遍曆相關的列數據 for (int indexCol = firstCellNum; indexCol <lastCellNum; indexCol++) { Cell cell=row.getCell(indexCol); //indexCol=11 firstCellNum 0 lastCellNum=11 //System.out.println("indexCol="+indexCol+"firstCellNum "+firstCellNum+" lastCellNum="+lastCellNum+" headTitle.length"+headTitle.length); String cellKey=headTitle[indexCol-firstCellNum]; if(cell==null){ continue; } //獲取列的數據的信�? Object cellValue = getCellValue(cell); try { BeanUtils.setProperty(bean, cellKey, cellValue); } catch (InvocationTargetException e) { e.printStackTrace(); } } allRowMapData.add(bean); } catch (InstantiationException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } } } return allRowMapData; }
发表评论
-
eclispe 实用插件大全
2016-03-31 10:17 836在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的 ... -
单点登录 SSO Session
2016-03-14 16:56 4052单点登录在现在的 ... -
通用权限管理设计 之 数据库结构设计
2016-01-26 13:22 2952通用权限管理设计 之 ... -
分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
2016-01-26 13:22 1493分享一个基于ligerui的系统应用案例ligerRM V2 ... -
通用权限管理设计 之 数据权限
2016-01-26 13:20 739通用权限管理设计 之 数据权限 阅读目录 前 ... -
使用RSA进行信息加密解密的WebService示例
2015-12-28 10:30 874按:以下文字涉及RS ... -
防止网站恶意刷新
2015-10-22 10:55 705import java.io.IOExcept ... -
单点登录
2015-10-19 14:24 763Cas自定义登录页面Ajax实现 博客分类: ... -
session如何在http和https之间同步
2015-09-14 09:25 2254首先说下 http>https>http ... -
基于 Quartz 开发企业级任务调度应用
2015-08-17 11:17 836Quartz 是 OpenSy ... -
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
2015-08-17 11:17 876今天来点实际工 ... -
Java加密技术(十)——单向认证
2015-08-13 10:13 679在Java 加密技术(九)中,我们使 ... -
Java加密技术(九)——初探SSL
2015-08-13 10:12 884在Java加密技术(八)中,我们模拟 ... -
Java加密技术(八)——数字证书
2015-08-13 10:12 889本篇的主要内容为Java证书体系的实 ... -
Java加密技术(七)——非对称加密算法最高级ECC
2015-08-13 10:12 972ECC ECC-Elliptic Curv ... -
Java加密技术(六)——数字签名算法DSA
2015-08-13 10:11 1057接下来我们介绍DSA数字签名,非对称 ... -
Java加密技术(五)——非对称加密算法的由来DH
2015-08-12 16:13 868接下来我们 ... -
Java加密技术(四)——非对称加密算法RSA
2015-08-12 16:11 1093接下来我们介绍典型的非对称加密算法—— ... -
Java加密技术(三)——PBE算法
2015-08-12 16:10 957除了DES,我们还知道有DESede( ... -
Java加密技术(二)——对称加密算法DES&AES
2015-08-12 16:09 718接下来我们介绍对称加密算法,最常用的莫 ...
相关推荐
6. **库依赖**:虽然标题中提到了poi3.8,但现代项目可能需要更新版本的Apache POI,因为它包含了更多的功能和错误修复。同时,如果要处理2007及更高版本的文件,还需要引入XSSF和XWPF库。 7. **其他工具和库**:...
这里的"poi-3.8组件"指的是Apache POI项目的3.8版本,这是一个稳定且广泛使用的版本,为开发者提供了在Java环境中读写Microsoft Office文档的能力。 Apache POI的主要知识点包括: 1. **组件结构**:Apache POI...
11. **poi3.8版本.rar**:这可能是整个Apache POI 3.8的源码或附加资源,方便开发者进行深入研究或定制开发。 使用这些库,开发者可以创建Java应用程序来导入和导出Excel文件,例如,创建新的工作簿,添加工作表,...
标题 "POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析" 提到了Apache POI库的一个高级话题,主要关注的是如何使用XSSF(XML Spreadsheet Formatting Streams)和SAX(Simple API for XML)的Event ...
在POI3.8中,最重要的组件包括HSSF(Horrible Spreadsheet Format)和XSSF(Extensible Spreadsheet Format),分别用于处理老版的BIFF8格式(.xls)和新的OOXML格式(.xlsx)。HSSF提供了对Excel 97-2003工作簿的...
这个压缩包包含的6个jar文件是POI 3.8版的核心组件,每个都有特定的功能: 1. **poi-3.8-20120326.jar**:这是Apache POI的主要库,包含了处理二进制Excel文件(.xls)的基本功能。你可以通过这个库创建、读取和...
标题中的"poi3.8jar包"指的是Apache POI项目的3.8版本的Java库,这个库以JAR(Java Archive)文件的形式提供,便于Java开发者在他们的应用中集成对Office文档的支持。 Apache POI的主要功能: 1. **Excel处理**: ...
POI 3.8和3.9版本是该库的两个稳定版本,它们包含了一系列API,使得开发人员可以轻松地与微软的Office格式进行交互。 在POI 3.8和3.9的API中,主要涵盖以下几个关键知识点: 1. **HSSF和XSSF**:这是POI用来处理...
标题中的“POI 3.8 Beta5”指的是Apache POI项目的一个版本,这是一个流行的开源Java库,用于读取、写入和修改Microsoft Office格式的文件,尤其是Excel工作簿。在POI 3.8 Beta5这个版本中,开发者可以利用它来处理...
在本文中,我们将深入探讨Apache POI 3.8版本中的Event API,特别是针对HSSF(Horizontally Sparse File Format)的事件解析。Apache POI是一个流行的Java库,它允许开发人员处理Microsoft Office格式的文件,如...
标题中的"POI3.8以及3.9的API"指的是这两个版本的API接口文档,是开发者理解和使用POI库的关键资源。API文档详尽地列出了各种类、方法和接口,使得开发者能够有效地利用POI进行文件操作。 在POI 3.8和3.9中,主要...
标题“读写Excel2007 POI3.8”涉及的是使用Apache POI库的3.8版本处理Microsoft Excel 2007文件的方法。Apache POI是Java的一个开源项目,专门用于读取、创建和修改Microsoft Office格式的文件,特别是Excel文件。在...
Apache POI是一个强大的Java库,专门用于处理微软的OLE2组件文档格式,如Microsoft Excel、Word、PowerPoint等。这个库使得在Java环境中创建、读取和修改这些文件变得非常容易,无需依赖于微软的Office套件。"POI ...
总结一下,Apache POI 3.8是一个适用于JDK 1.6和1.7的Java库,它提供了对微软Office文档的强大处理能力,包括创建、读取和修改Excel、Word和PowerPoint文件。通过理解和掌握POI的API,开发者可以方便地进行Office...
JAVA POI 3.8 JAR ALL 是一个包含Java库的集合,主要用于处理Microsoft Office格式的文件,特别是Excel、Word和PowerPoint文档。这个压缩包提供了POI项目3.8版本的所有核心组件以及相关的XML schema定义,使得Java...
这个压缩包中包含的文件是Apache POI 3.8版本的组件,允许开发者在Java环境中读取、写入和修改这些Office文档。 1. **POI-3.8.jar**:这是主POI库的核心JAR文件,包含了处理Excel(HSSF和XSSF)、Word(HWPF和XWPF...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个资源包含了Apache POI 3.8 - beta4版本的所有开发所需的JAR包,使得Java开发者能够轻松地在他们的应用中实现...
在这个压缩包中,你将会找到六个名为"poi-3.8-20120326"的JAR文件,这很可能是Apache POI库的不同组件或模块。JAR(Java Archive)是Java平台的标准打包格式,用于收集多个类文件和其他资源文件,便于部署和分发。这...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)和PowerPoint(.ppt、.pptx)。这个“poi-src-3.8”源码库是Apache POI 3.8版本的源代码,它包含...