`
mymobile
  • 浏览: 182996 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

poi读取Excel(兼容2003和2007)

阅读更多

前段时间做项目时,碰到了要导入Excel文件中的数据的需求,网上查了下,用的比较多的是jxl和apache的poi。刚开始用的是jxl(当时感觉它比较小巧)可是它貌似只能处理Excel2003及其以下版本的文件,而且在处理单元格前后的有全角空格时会出现乱码问题所以在处理时还得去掉首尾空格,最后跟客户沟通说是他们公司用的最多的是2007,果断放弃jxl,改用poi,毕竟是一百多人支持开发了10年的的开源项目,处理文件类型几乎囊括了微软的所有办公软件。。但是在用poi处理数据的时候出现了这样和那样的问题:如它把数字类型的值都按照double类型来处理了,而且如果是数字列有空单元格的话,它是算做是字符串类型的。。我把我写的处理代理拷贝过来,方便以后使用。。。嘿嘿...

 

package com.study.poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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;

import com.study.entity.Emp;

public class PoiExcelTest {
    public static void main(String[] args) {
        Class[] clazz=new Class[]{Integer.class,String.class,String.class,Integer.class,Date.class,Double.class,Double.class,Integer.class};
        List<Emp> list=null;
        DecimalFormat df=new DecimalFormat("0.00");
        try {
            list = readExcel("d:"+File.separator+"test.xls",clazz);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        for (Iterator<Emp> iter=list.iterator(); iter.hasNext();) {
            Emp emp=iter.next();
            System.out.println("Emp:"+emp.getEmpno()+"\t"+emp.getEname()+"\t"+df.format(emp.getSal())+"\t"+df.format(emp.getComm())+"\t"+new SimpleDateFormat("yyyy-MM-dd").format(emp.getHiredate())+"\t"+emp.getDeptno());
        }
    }
    private static int version2003=2003;
    private static int version2007=2003;
    private static int version=version2003;
    private static Workbook wb;
    private static Sheet sheet;
    private static Row row;
    private static Cell cell;
    public static List<Emp> readExcel(String excelFilePath,Class[] clazz) throws ParseException{
        List<Emp> list=new ArrayList<Emp>();
        Emp emp;
        version=(excelFilePath.endsWith(".xls")?version2003:version2007);
        if(version==2003){
            try {
                InputStream stream=new FileInputStream(new File(excelFilePath));
                wb=new HSSFWorkbook(stream);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else if(version==2007){
            try {
                wb=new XSSFWorkbook(excelFilePath);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        sheet=wb.getSheetAt(0);
        int rows=sheet.getLastRowNum();
        int cells=sheet.getRow(0).getPhysicalNumberOfCells();
        for (int i = 0; i < rows; i++) {
            row=sheet.getRow(i+1);
            emp=new Emp();
            for (int j = 0; j < cells; j++) {
                cell=row.getCell(j);
                Object obj=getCellValue(cell, clazz[j]);
                switch (j) {
                case 0:
                    emp.setEmpno((Integer)obj);
                    break;
                case 1:
                    emp.setEname((String)obj);
                    break;
                case 2:
                    emp.setJob((String)obj);
                    break;
                case 3:
                    emp.setMgr((Integer)obj);
                    break;
                case 4:
                    emp.setHiredate(new SimpleDateFormat("yyyy-MM-dd").parse(obj.toString()));
                    break;
                case 5:
                    emp.setSal((Double)obj); 
                    break;
                case 6:
                    emp.setComm((Double)obj);
                    break;
                case 7:
                    emp.setDeptno((Integer)obj);
                    break;
                default:
                    break;
                }
            }
            list.add(emp);
        }
        return list;
    }
    public static Object getCellValue(Cell cell,Class clazz){
        String name=clazz.getSimpleName();
        if("String".equals(name)){
            return cell.getStringCellValue();
           
        }else if("Double".equals(name)){
            try {
                double valued=cell.getNumericCellValue();
                return valued;
            } catch (Exception e) {
                return 0.0;
            }
        }else if("Integer".equals(name)){
            try {
                int valuei=(int)cell.getNumericCellValue();
                return valuei;
            } catch (Exception e) {
                return 0;
            }
           
        }else if("Date".equals(name)){
            if(HSSFDateUtil.isCellDateFormatted(cell)){
                Date date=cell.getDateCellValue();
                if(date==null){
                    return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
                }else{
                    return new SimpleDateFormat("yyyy-MM-dd").format(date);
                }
            }
        }
        return null;
    }
}

 

 

下载地址:http://poi.apache.org/download.html

分享到:
评论
2 楼 qingfengde 2015-10-13  
这么傻逼的判断方法,不知道你博主怎么想的,改后缀就有问题了
1 楼 tianshi1017 2011-12-03  
判断03和07的excel版本这里貌似就不用了吧
这样一个是不太准确
另外一个是poi里面自动提供了03和07版本的兼容处理工厂“workbookfactory”
如:
  is = new FileInputStream("d://456.xlsx");

  is = new FileInputStream("d://456.xls");

  Workbook wb = WorkbookFactory.create(is);

会对应起来的。

相关推荐

    poi读取excel2007和2003兼容工具例子

    在这个"poi读取excel2007和2003兼容工具例子"中,我们将探讨如何使用POI来读取不同版本的Excel文件,特别是Excel 2003(.xls)和Excel 2007及更高版本(.xlsx)。 1. **Apache POI库**:Apache POI是Apache软件基金...

    poi读取excel文件实例(兼容excel2007)

    在“poi读取excel文件实例”中,我们将讨论如何使用Apache POI API来读取和操作Excel 2007文件。以下是一些关键知识点: 1. **创建工作簿对象**:首先,你需要通过`WorkbookFactory`类的`create()`方法打开或创建一...

    POI兼容读取Excel2003和Excel2007

    在本文中,我们将深入探讨如何使用Apache POI库来兼容读取Excel2003(.xls)和Excel2007及以上版本(.xlsx)的文件。 首先,Apache POI提供了两个主要的API来处理Excel文件:HSSF(Horrible Spreadsheet Format)...

    通过POI统一读取Excel文件(兼容97-2003和2007+两种格式)

    这篇博客“通过POI统一读取Excel文件(兼容97-2003和2007+两种格式)”正是介绍了如何使用Apache POI库来处理不同版本的Excel文件。 Apache POI 提供了两个主要的API来处理Excel文件:HSSF(Horrible Spreadsheet ...

    poi读取excel文件

    标题提到的"poi读取excel文件",指的是使用Apache POI库来处理Excel数据。在最新的版本中,POI引入了更高效和强大的功能,使得处理Excel文件变得更加方便。 描述中提到了"最新版poi相关的6个jar包",这些jar包是...

    POI兼容Excel2003和2007

    在本文中,我们将重点讨论如何使用POI库来实现对Excel 2003和2007文件的兼容性操作。Excel 2003使用的是.BIFF(Binary Interchange File Format)格式,而Excel 2007及以上版本则引入了新的.OpenXML(.xlsx)格式,...

    android POI 读取excel 精简jar

    在Android平台上,使用Apache POI库来读取Excel文件是一种常见的解决方案。Apache POI是一个流行的开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。在这个“android ...

    POI读取EXCEL教程

    读取Excel文件使用HSSF的usermodel API非常直观。首先,你需要创建一个`InputStream`,然后实例化`HSSFWorkbook`: ```java InputStream myxls = new FileInputStream("workbook.xls"); HSSFWorkbook wb = new ...

    ExcelUtil借助反射和POI对Excel读取,省略了以往读取Excel的繁琐步骤

    兼容03/07版Excel的功能意味着ExcelUtil支持两种主要的Excel文件格式:.xls(97-2003版本)和.xlsx(2007及以上版本)。这得益于Apache POI库的广泛支持。 总的来说,ExcelUtil通过结合反射和Apache POI库,极大地...

    java读取excel(兼容2003和2007)

    以下是一个使用Apache POI读取Excel文件的基本步骤: 1. **添加依赖**:首先,在项目中引入Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

    java 读取Excel兼容2003,2007项目

    通过以上知识点的学习和实践,你可以掌握在Java中读取Excel文件,包括对Excel 2003和2007格式的兼容性处理。在实际应用中,可以根据需求进一步扩展功能,如写入Excel、合并单元格、格式化数据等。

    java读取excel(兼容2003和2007)[定义].pdf

    【Java读取Excel兼容2003和2007】 在Java中处理Excel文件时,我们需要确保代码能够兼容Microsoft Office的两个主要版本:2003和2007。这两个版本的Excel文件格式有所不同,2003使用的是.BIFF8格式(HSSF),而2007及...

    poi3.9读写excel兼容03和07版本

    "poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...

    java中poi读写excel封装工具类(兼容office2003和2007等版本)

    它不仅支持旧版的Excel文件格式(.xls,用于Office 2003及更早版本),还支持新版本的Excel文件格式(.xlsx,自Office 2007起)。以下是对"java中poi读写excel封装工具类"这一主题的详细解释。 1. **Apache POI介绍...

    poi读取excel的jar包

    标题中的"poi读取excel的jar包"指的是Apache POI库的一个版本,它包含了读取Excel 2007文件所需的类和方法。在Java程序中,引入这个jar包后,开发者可以编写代码来处理.xlsx文件,无论是读取数据、解析工作表还是...

    java 读取 Excel兼容2003,2007

    这个"TestExcel"类可能包含了上述的示例代码,用于演示如何在Java中使用Apache POI读取Excel文件。通过这个项目,你可以学习到如何在实际开发中实现类似的功能,同时也可以根据需求扩展其功能,比如支持多工作表读取...

    java 读取 Excel 读取 兼容2003,2007

    下面是如何使用POI读取Excel文件的基本步骤: 1.1 引入依赖 在Maven项目中,需要添加Apache POI依赖到pom.xml文件: ```xml &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;version&gt;4.1.2 &lt;groupId&gt;org.apache....

    POI兼容2003 和 2007

    ### POI兼容2003 和 2007 #### 概述 Apache POI 是一个用于读写Microsoft Office格式文件(如Excel、Word等)的Java API库。随着Office版本的更新,POI也提供了不同的API来支持不同版本的文件格式。本篇文章将深入...

    POI 读取Excel文件

    - POI 不支持读取 .xls 文件(Excel 97-2003 格式),除非使用 HSSFWorkbook 类,但不推荐,因为 .xlsx 格式更现代且兼容性更好。 - 处理大型文件时,要特别注意内存管理,避免因数据量过大导致 OutOfMemoryError...

    POI导入excel大数据处理,支持excel2003,2007

    标题提到的“POI导入excel大数据处理”是指利用Apache POI进行大量Excel数据的导入操作,同时它兼容Excel 2003(.xls格式)和2007以上版本(.xlsx格式)的文件。 POI库的主要优点包括: 1. **多格式支持**:不仅...

Global site tag (gtag.js) - Google Analytics