环境和所需包:
1,JDK1.5
2,poi-3.5-FINAL-20090928.jar,
poi-contrib-3.5-FINAL-20090928.jar,
poi-ooxml-3.5-FINAL-20090928.jar,
poi-scratchpad-3.5-FINAL-20090928.jar,
log4j-1.2.13.jar,
commons-logging-1.1.jar,
junit-3.8.1.jar,
dom4j-1.6.1.jar,
geronimo-stax-api_1.0_spec-1.0.jar,
ooxml-schemas-1.0.jar,
xmlbeans-2.3.0.jar
注意
:
1,可能有些包不需要,没有测试,因为有些包项目中已经存在了
2,我开始少了最后2个包,报:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
Java代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class POIExcelDemo {
public static void read(String fileName) throws Exception {
XSSFWorkbook wb = new XSSFWorkbook(fileName);
read(wb);
}
public static void read(InputStream is) throws Exception {
XSSFWorkbook wb = new XSSFWorkbook(is);
read(wb);
}
public static void read(XSSFWorkbook xwb) throws Exception {
try {
for (int k = 0; k < xwb.getNumberOfSheets(); k++) {
XSSFSheet sheet = xwb.getSheetAt(k);
int rows = sheet.getPhysicalNumberOfRows();
for (int r = 0; r < rows; r++) {
// 定义 row
XSSFRow row = sheet.getRow(r);
if (row != null) {
int cells = row.getPhysicalNumberOfCells();
for (short c = 0; c < cells; c++) {
XSSFCell cell = row.getCell(c);
if (cell != null) {
String value = null;
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_FORMULA:
value = "FORMULA ";
break;
case XSSFCell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)){
value = "DATE value="
+ cell.getDateCellValue();
}else{
value = "NUMERIC value="
+ cell.getNumericCellValue();
}
break;
case XSSFCell.CELL_TYPE_STRING:
value = "STRING value="
+ cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
value = "BOOLEAN value="
+ cell.getBooleanCellValue();
cell.getDateCellValue();
break;
default:
}
System.out.println(value);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f = new File("d:/Test.xlsx");
FileInputStream is = new FileInputStream(f);
System.out.println(f.getName());
read(is);
}
}
写完之后完把文件改成读取test.xls(Excel2003),发现出现Exception in thread "main" org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'C:\DOCUME~1\CHENXI~1\LOCALS~1\Temp\poifiles\poi-ooxml-1966473540.tmp'
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:102)
所以为了兼容读取2003,我把代码给成如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class POIExcelDemo {
/**
*
* @param fileName 文件路径
* @param flag 是2003还是2007 true:2003,false:2007
* @throws Exception
*/
public static void read(String fileName,boolean flag) throws Exception {
Workbook wb = null;
if(flag){//2003
File f = new File(fileName);
FileInputStream is = new FileInputStream(f);
POIFSFileSystem fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
is.close();
}else{//2007
wb = new XSSFWorkbook(fileName);
}
read(wb);
}
/**
*
* @param is 输入流
* @param flag 是2003还是2007 true:2003,false:2007
* @throws Exception
*/
public static void read(InputStream is,boolean flag) throws Exception {
Workbook wb = null;
if(flag){//2003
wb = new HSSFWorkbook(is);
}else{//2007
wb = new XSSFWorkbook(is);
}
read(wb);
}
/**
* 具体读取Excel
* @param wb
* @throws Exception
*/
public static void read(Workbook wb) throws Exception {
try {
for (int k = 0; k < wb.getNumberOfSheets(); k++) {
//sheet
Sheet sheet = wb.getSheetAt(k);
int rows = sheet.getPhysicalNumberOfRows();
for (int r = 0; r < rows; r++) {
// 定义 row
Row row = sheet.getRow(r);
if (row != null) {
int cells = row.getPhysicalNumberOfCells();
for (short c = 0; c < cells; c++) {
Cell cell = row.getCell(c);
if (cell != null) {
String value = null;
switch (cell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
value = "FORMULA value=" + cell.getCellFormula();
break;
case Cell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)){
value = "DATE value="
+ cell.getDateCellValue();
}else{
value = "NUMERIC value="
+ cell.getNumericCellValue();
}
break;
case Cell.CELL_TYPE_STRING:
value = "STRING value="
+ cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BOOLEAN:
value = "BOOLEAN value="
+ cell.getBooleanCellValue();
cell.getDateCellValue();
break;
default:
}
System.out.println(value);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f = new File("d:/test.xlsx");
FileInputStream is = new FileInputStream(f);
System.out.println(f.getName());
read(is,false);
}
}
分享到:
相关推荐
POI 3.5 API文档是该库的一个版本,提供了开发者在Java环境中读取、写入和操作这些文件的接口和类的详细说明。这个API文档包含了对类、方法、接口和异常的描述,帮助开发者理解如何有效地使用Apache POI。 在POI ...
"poi3.5.jar"是一个Java库,主要用来处理Microsoft Office相关的文件,特别是Word和Excel。这个库由Apache POI项目提供,它是一个开源的Java API,允许开发人员创建、修改和显示MS Office格式的文件。Apache POI 3.5...
POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 结构: HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。 HWPF - 提供读写...
POI 3.5版本是该库的一个重要里程碑,提供了许多改进和新功能,使得开发人员能够更高效地读取、写入和操作这些文件。在本篇文章中,我们将深入探讨POI 3.5 API中的关键知识点,以及如何利用这些功能来优化你的Java...
在描述中提到的“支持Office2007的功能”,这意味着用户可以使用Apache POI 3.5来创建、读取和修改Office 2007及更高版本的文件。例如,开发者现在可以用Java代码生成复杂的Excel工作簿,包含多个工作表、公式、图表...
集合了所有的POI3.8的包和POI3.5的包,主要用于java poi excel模板的读取
通过学习POI提供的API,你可以实现读取Excel数据,进行数据处理,以及生成新的Excel报告等一系列任务。这在数据分析、报表生成、自动化测试等领域都有广泛的应用。了解并熟练掌握POI,将极大地提升你在处理Excel文档...
- **HSSF(Horrible Spreadsheet Format)**: 这是POI项目中处理旧版Excel文件(.xls格式,97-2007版)的部分。HSSF提供了一系列的类和接口,可以用来创建工作簿、工作表、单元格,并进行数据的读写操作。例如,你...
由于Maven目前只支持到POI的3.1版本,对于3.5版本不提供支持,因此用户可以直接从Apache官网下载POI 3.5版本,作为reference library加入到项目中。这样做的目的主要是为了兼容新的文件格式和提供更多的功能。通过在...
POI提供了一组API,允许开发者在Java环境中创建、修改和读取Excel文件。例如,HSSFWorkbook类用于处理.xls格式,而XSSFWorkbook类则用于处理.xlsx格式。以下是一些关键知识点: 1. **工作簿(Workbook)**: 工作簿...
1. poi-3.5-FINAL-20090928.jar:这是Apache POI的主要库,包含了处理HSSF(旧版Excel文件格式,.xls)和XSSF(新版Excel文件格式,.xlsx)的核心类。 2. poi-scratchpad-3.5-FINAL-20090928.jar:这个库包含了实验...
poi-3.5-FINAL-20090928.jar 支持读取word/excel 2007
这个"POI 3.5源码"是Apache POI项目的源代码版本,发布于2009年09月28日,它提供了对Office文档格式的低级和高级API,使得开发者可以在Java环境中读取、写入和操作这些文件。 在POI 3.5源码中,我们可以深入理解...
Java POI 是一个开源库,...因此,为了确保Java POI能够顺利读取Excel文件,开发者必须确保项目配置中包含了上述所有必要的库文件。同时,根据项目需求,可能还需要更新到最新版本的POI库,以获得更好的性能和兼容性。
- **3.5**:增加了对Office 2007 OpenXML格式的支持,如XSSF和XWPF。 - **3.6**:增强了性能和稳定性,修复了一些已知问题,提供了更多API功能。 - **3.7**:进一步完善了OpenXML格式的支持,包括更多的样式和...
2.4.0.jar,xmlbeans-2.3.0.jar,poi-scratchpad-3.8-20120326.jar,poi-ooxml-schemas-3.8-20120326.jar,poi-ooxml-3.8-20120326.jar,poi-3.8-20120326.jar,dom4j-1.6.1.jar等等,这些3.8版本架包和3.5版本架包
- 图表和图像:可以创建、修改或读取Excel中的图表和嵌入图像。 - 样式和格式:可以设置单元格的字体、颜色、对齐方式、边框等样式属性。 - 数据格式化:可以控制数字、日期等数据的显示格式。 - 条件格式:支持...
这个是用java读取excel,word文件内容的apache的api
在描述中提到的问题,可能是因为缺少了必要的依赖包,导致在尝试使用POI读取Excel2007(.xlsx)文件时出现了异常。 Apache POI 提供了多种API来处理Excel文件,其中主要的有HSSF和XSSF。HSSF用于读写旧版的BIFF8格式...