`
max1487
  • 浏览: 103495 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

JAVA解析Excel文件的两种方式 --Poi技术

    博客分类:
  • java
阅读更多

目前有两种比较主流的技术解析Excel文件,这里我讲解的是Poi技术的实现。
话不多话,Poi包里有4个主要的类,包括:

Workbook------工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取,

Sheet------------表格,Workbook实例的getSheetAt(int num)方法获取,

Row--------------行,Sheet实例的getRow(int num)方法获取,

Cell--------------单元格,Row实例的getCell(int num)方法获取,

最后通过Cell实例根据数据类型调用对应的方法获取单元格的值。

下面是我做的一个实例。

excel文件内容:包含字符串、日期、数值、公式等数值类型



 

解析类代码:

 

public class Poi {
	
  
    private Sheet sheet;	//表格类实例
    LinkedList[] result;	//保存每个单元格的数据 ,使用的是一种链表数组的结构

    //读取excel文件,创建表格实例
    private void loadExcel(String filePath) {
        FileInputStream inStream = null;
        try {
            inStream = new FileInputStream(new File(filePath));
            Workbook workBook = WorkbookFactory.create(inStream);
           
            sheet = workBook.getSheetAt(0);         
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(inStream!=null){
                    inStream.close();
                }                
            } catch (IOException e) {                
                e.printStackTrace();
            }
        }
    }
    //获取单元格的值
    private String getCellValue(Cell cell) {
        String cellValue = "";
        DataFormatter formatter = new DataFormatter();
        if (cell != null) {
        	//判断单元格数据的类型,不同类型调用不同的方法
            switch (cell.getCellType()) {
            	//数值类型
                case Cell.CELL_TYPE_NUMERIC:
                	//进一步判断 ,单元格格式是日期格式 
                    if (DateUtil.isCellDateFormatted(cell)) {
                        cellValue = formatter.formatCellValue(cell);
                    } else {
                    	//数值
                        double value = cell.getNumericCellValue();
                        int intValue = (int) value;
                        cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);
                    }
                    break;
                case Cell.CELL_TYPE_STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case Cell.CELL_TYPE_BOOLEAN:
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                    //判断单元格是公式格式,需要做一种特殊处理来得到相应的值
                case Cell.CELL_TYPE_FORMULA:{
                	try{
                		cellValue = String.valueOf(cell.getNumericCellValue());
                	}catch(IllegalStateException e){
                		cellValue = String.valueOf(cell.getRichStringCellValue());
                	}
                	
                }
                    break;
                case Cell.CELL_TYPE_BLANK:
                    cellValue = "";
                    break;
                case Cell.CELL_TYPE_ERROR:
                    cellValue = "";
                    break;
                default:
                    cellValue = cell.toString().trim();
                    break;
            }
        }
        return cellValue.trim();
    }



    //初始化表格中的每一行,并得到每一个单元格的值
    public  void init(){
    	int rowNum = sheet.getLastRowNum() + 1;
    	result = new LinkedList[rowNum];
    	for(int i=0;i<rowNum;i++){
    		Row row = sheet.getRow(i);
    		//每有新的一行,创建一个新的LinkedList对象
    		result[i] = new LinkedList();
    		for(int j=0;j<row.getLastCellNum();j++){
    			Cell cell = row.getCell(j);
    			//获取单元格的值
    			String str = getCellValue(cell);
    			//将得到的值放入链表中
    			result[i].add(str);
    		}
    	}
    }
    //控制台打印保存的表格数据
    public void show(){
    	for(int i=0;i<result.length;i++){
    		for(int j=0;j<result[i].size();j++){
    			System.out.print(result[i].get(j) + "\t");
    		}
    		System.out.println();
    	}
    }
    public static void main(String[] args) {
        Poi poi = new Poi();
        poi.loadExcel("jxl.xls");
        poi.init();
        poi.show();
    }
	
}

控制台输出结果:

 



 

 

备注:上述的代码只能解析xls格式 的文件,对于xlsx格式则需要另外几个类解析,XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell,其实方法和思路是一样,相应的改改类名而已,不是很复杂。

0
3
分享到:
评论
3 楼 cgs1999 2016-05-16  
http://cgs1999.iteye.com/blog/1525665
2 楼 cgs1999 2016-05-16  
关于Excel的处理,几年前已经有统一的方案了
1 楼 kingcs2008 2016-05-16  
不错   

相关推荐

    poi-ooxml-schemas-3.8,poi-3.8,poi-ooxml jar包合集

    标题中的"poi-ooxml-schemas-3.8,poi-3.8,poi-ooxml jar包合集"指的是Apache POI项目中用于处理Microsoft Office格式文件的Java库,特别是针对Excel(XLS和XLSX)文档的处理。Apache POI是一个流行的开源库,允许...

    poi解析excel文件

    总结,Apache POI 3.8提供了一个强大的工具集,允许开发者在Java环境中方便地读取和解析Excel文件,无论是老版的.xls还是新版的.xlsx。通过理解其核心组件和API,你可以有效地操作Excel数据,进行数据分析、数据导入...

    poi 解析excel文件内容demo

    在这个"poi 解析excel文件内容demo"中,我们主要关注如何使用Apache POI库来读取和解析Excel文件,无论它们是2003版的.XLS还是2007以后的.XLSX格式。 首先,Apache POI提供了两种主要的接口来处理Excel文件:HSSF...

    Java Poi 解析EXCEL数据

    Poi库支持这两种格式,并提供了丰富的API来读取、写入和修改Excel数据。 **解析Excel数据的基本步骤如下:** 1. **添加依赖**:首先,在你的项目中引入Poi库。如果你使用Maven,可以在pom.xml文件中添加以下依赖:...

    导入poi jar包实现使用Beanshell读写Excel文件

    这通常意味着将poi-*.jar、poi-ooxml-*.jar和poi-ooxml-schemas-*.jar文件放入JMeter的lib目录下。 2. 在BeanShell Sampler中编写Java代码,创建Workbook对象,然后打开指定的Excel文件。例如: ```java import org....

    POI java解析EXCEL

    【描述】:POI Java解析EXCEL框架是Apache软件基金会的一个开源项目,主要提供了API来处理Microsoft Office的文件格式。这里的“jar”指的是POI的Java库文件,它包含了处理Excel所需的所有类和方法,可以集成到Java...

    Excel解析工具POI.jar

    Apache POI支持这两种格式,允许开发者读取和写入这两种类型的Excel文件。对于BIFF格式,POI使用HSSF(Horrible Spreadsheet Format)接口;而对于XML格式,则使用XSSF(eXtremely SpreadSheet Format)接口。 三、...

    java解析excel表格

    总结来说,"java解析excel表格"的实例是基于Apache POI库实现的,它展示了如何在Java环境中读取、处理和输出Excel文件的内容。这对于需要处理Excel数据的Java开发者来说是一个基础且实用的教程。通过深入学习和实践...

    java解析excel文件源码

    Java解析Excel文件是Java开发中常见的任务,尤其在数据处理、报表生成或数据分析等领域。Excel文件通常使用两种主要格式:老式的`.xls`(BIFF8格式)和较新的`.xlsx`(OOXML格式)。本示例关注的是`.xls`格式,因为...

    poi-scratchpad-3.12-20150511和poi-3.12-20150511包

    在本例中,我们关注的是与处理PowerPoint文件相关的部分,即"poi-scratchpad-3.12-20150511"和"poi-3.12-20150511"这两个jar包。 Apache POI项目主要分为几个组件,包括: 1. **POI-OOXML**: 这个组件处理基于Open...

    poi-3.10-FINAL.jar 解析excel用

    解析Excel文件主要有两种类型:老版的.BIFF8格式(.xls)和较新的.OpenXML格式(.xlsx)。Apache POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(eXtended Spreadsheet Format)两个API来处理这两种格式。 1...

    java解析excel并做数据有效性校验

    1. **Java解析Excel库** 在Java中,有多个库可以用来解析Excel文件,如Apache POI、JExcelAPI、SimpleExcel等。Apache POI是目前最广泛使用的库,支持`.xls`和`.xlsx`格式,功能强大且稳定。我们将主要讨论使用...

    java解析excel文件 2003 2007

    总的来说,Java解析Excel文件涉及的关键点包括选择合适的API(HSSF或XSSF)、理解文件格式以及利用库提供的功能进行数据操作。在实际项目中,根据文件大小、性能需求和功能复杂性,选择最佳的处理策略至关重要。

    java解析Excel(xls、xlsx两种格式)所需要的所有jar

    在标题和描述中提到的“java解析excel所需要的jar包”,指的是Apache POI项目中的相关依赖,这些jar文件包含了处理Excel(xls、xlsx两种格式)所需的所有核心组件。下面将详细介绍这些jar文件的功能及其在解析Excel...

    java解析excel源码

    Java解析Excel源码主要涉及到的是使用Java处理Microsoft Excel文件的技术,这一技术在数据处理、数据分析以及报表生成等场景中非常常见。在这个过程中,我们通常会使用Apache POI库,这是一个强大的开源API,专为...

    java解析Excel的POI框架

    【Java解析Excel的POI框架】是Apache Jakarta项目的一个组件,专门用于处理OLE2对象,尤其是Microsoft Excel文件。它的核心接口HSSF(Horrible Spreadsheet Format)提供了读取、写入和修改Excel文件的能力,使...

    基于DOM4j和POI实现的XML文件转换为XLS(即标准EXCEL)的JAVA程序

    Java编程语言提供了丰富的库来处理这两种格式,如DOM4j和Apache POI。本项目就是关于如何使用DOM4j解析XML文件,并利用Apache POI将其转换为标准的XLS(Excel)文件。 首先,DOM4j是Java中一个灵活且功能强大的XML...

    POI解析Excel文档

    【标题】"POI解析Excel文档"涉及到的主要技术是Apache POI库,它是一个用于读取和写入Microsoft Office格式档案的开源Java API。在Java编程环境中,使用POI库可以方便地处理Excel(.xlsx和.xls)文件,进行数据的...

    Apache poi 操作 excel 文件压缩包

    在Apache POI中,xmlbeans被用来解析和生成OOXML格式的Excel文件,因为OOXML本质上是一种基于XML的文件格式。 4. **dom4j**: 这是一个强大的Java XML API,用于读写XML文档。在处理XML数据时,POI可能会用到dom4j来...

Global site tag (gtag.js) - Google Analytics