`
fengsky491
  • 浏览: 30821 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

POI3.5读取Excel2007

    博客分类:
  • java
阅读更多

环境和所需包:

       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);
		
		
	}

}
 
分享到:
评论

相关推荐

    poi3.5API文档

    POI 3.5 API文档是该库的一个版本,提供了开发者在Java环境中读取、写入和操作这些文件的接口和类的详细说明。这个API文档包含了对类、方法、接口和异常的描述,帮助开发者理解如何有效地使用Apache POI。 在POI ...

    poi3.5的jar包

    POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 结构:  HSSF - 提供读写Microsoft Excel格式档案的功能。  XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。  HWPF - 提供读写...

    poi3.5.jar

    "poi3.5.jar"是一个Java库,主要用来处理Microsoft Office相关的文件,特别是Word和Excel。这个库由Apache POI项目提供,它是一个开源的Java API,允许开发人员创建、修改和显示MS Office格式的文件。Apache POI 3.5...

    poi最新3.5API

    POI 3.5版本是该库的一个重要里程碑,提供了许多改进和新功能,使得开发人员能够更高效地读取、写入和操作这些文件。在本篇文章中,我们将深入探讨POI 3.5 API中的关键知识点,以及如何利用这些功能来优化你的Java...

    poi-bin-3.5-beta4-20081128.zip_POI 3.5 beta_poi 3_poi-3_poi-bin-

    在描述中提到的“支持Office2007的功能”,这意味着用户可以使用Apache POI 3.5来创建、读取和修改Office 2007及更高版本的文件。例如,开发者现在可以用Java代码生成复杂的Excel工作簿,包含多个工作表、公式、图表...

    Poi3.8 与3.5的所有的包文件 以及POI EXCEL 模板导入导出

    集合了所有的POI3.8的包和POI3.5的包,主要用于java poi excel模板的读取

    POI3.5_HSSF_和XSSF_Excel操作快速入门手册.zip

    通过学习POI提供的API,你可以实现读取Excel数据,进行数据处理,以及生成新的Excel报告等一系列任务。这在数据分析、报表生成、自动化测试等领域都有广泛的应用。了解并熟练掌握POI,将极大地提升你在处理Excel文档...

    POI-3.5(很不错的共两部分)

    - **HSSF(Horrible Spreadsheet Format)**: 这是POI项目中处理旧版Excel文件(.xls格式,97-2007版)的部分。HSSF提供了一系列的类和接口,可以用来创建工作簿、工作表、单元格,并进行数据的读写操作。例如,你...

    POI3.5_HSSF_和XSSF_Excel操作快速入门手册

    由于Maven目前只支持到POI的3.1版本,对于3.5版本不提供支持,因此用户可以直接从Apache官网下载POI 3.5版本,作为reference library加入到项目中。这样做的目的主要是为了兼容新的文件格式和提供更多的功能。通过在...

    POI-3.5(2)(很不错的,共两部分)

    POI提供了一组API,允许开发者在Java环境中创建、修改和读取Excel文件。例如,HSSFWorkbook类用于处理.xls格式,而XSSFWorkbook类则用于处理.xlsx格式。以下是一些关键知识点: 1. **工作簿(Workbook)**: 工作簿...

    poi 最新3.5jar

    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

    poi-3.5-FINAL-20090928.jar 支持读取word/excel 2007

    POI 3.5源码

    这个"POI 3.5源码"是Apache POI项目的源代码版本,发布于2009年09月28日,它提供了对Office文档格式的低级和高级API,使得开发者可以在Java环境中读取、写入和操作这些文件。 在POI 3.5源码中,我们可以深入理解...

    java poi读取Excel需要导入的所有包

    Java POI 是一个开源库,...因此,为了确保Java POI能够顺利读取Excel文件,开发者必须确保项目配置中包含了上述所有必要的库文件。同时,根据项目需求,可能还需要更新到最新版本的POI库,以获得更好的性能和兼容性。

    poi jar包 3.5——3.7

    - **3.5**:增加了对Office 2007 OpenXML格式的支持,如XSSF和XWPF。 - **3.6**:增强了性能和稳定性,修复了一些已知问题,提供了更多API功能。 - **3.7**:进一步完善了OpenXML格式的支持,包括更多的样式和...

    POI读取word和excel的3.5和3.8架包

    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版本架包

    poi-解析excel的jar包

    - 图表和图像:可以创建、修改或读取Excel中的图表和嵌入图像。 - 样式和格式:可以设置单元格的字体、颜色、对齐方式、边框等样式属性。 - 数据格式化:可以控制数字、日期等数据的显示格式。 - 条件格式:支持...

    poi-3.5源码.zip

    这个是用java读取excel,word文件内容的apache的api

    java 读取Excel的包和方法

    在描述中提到的问题,可能是因为缺少了必要的依赖包,导致在尝试使用POI读取Excel2007(.xlsx)文件时出现了异常。 Apache POI 提供了多种API来处理Excel文件,其中主要的有HSSF和XSSF。HSSF用于读写旧版的BIFF8格式...

Global site tag (gtag.js) - Google Analytics