Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法

Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法

实现代码:

import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; 

import org.apache.poi.POIXMLException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.ss.usermodel.Cell;
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; 

/**
 * excel 导入功能
 * @author lyq 20150312
 * @version 1.0
 */
public class ExcelUtils { 

  public List<Object[]> importExcel(String filePath) throws Exception{
    List<Object[]> list=new ArrayList<Object[]>();
    String fileType=filePath.substring(filePath.lastIndexOf(".")+1);
    try {
      if("xls".equalsIgnoreCase(fileType)){
        list= importExcel03(filePath);
      }else{
        list= importExcel07(filePath);
      }
    } catch(OfficeXmlFileException e){//通过手动修改文件名 引起的异常 比如 3.xlsx 重命名 3.xls 其实际文件类型为xlsx
      list=importExcel07(filePath);
    } catch(POIXMLException e){//通过手动修改文件名 引起的异常 比如 3.xls 重命名 3.xlsx 其实际文件类型为xls
      list=importExcel03(filePath);
    }
    return list;
  }
  public List<Object[]> importExcel03(String filePath) throws IOException{
    FileInputStream in=new FileInputStream(filePath);
    List<Object[]> list=new ArrayList<Object[]>();
    HSSFWorkbook wb=new HSSFWorkbook(in);
    HSSFSheet sheet = wb.getSheetAt(0);
    int rows = sheet.getPhysicalNumberOfRows();
    HSSFRow row=sheet.getRow(0);
    int cells=row.getLastCellNum();
    Object[] csr=null;
    for(int i=1;i<rows;i++){
      row=sheet.getRow(i);
      csr=new String[cells];
      for(int j=0;j<cells;j++){
        HSSFCell cell=row.getCell(j);
        Object obj=null;
        if(cell!=null){
          obj=getValue(cell);
        }
        csr[j]=obj;
      }
      list.add(csr);
    }
    if(in!=null)in.close();
    return list;
  }
  public List<Object[]> importExcel07(String filePath) throws IOException{
    List<Object[]> list=new ArrayList<Object[]>();
    FileInputStream in=new FileInputStream(filePath);
    XSSFWorkbook wb=new XSSFWorkbook(in);
    XSSFSheet sheet = wb.getSheetAt(0);
    int rows = sheet.getPhysicalNumberOfRows();
    XSSFRow row=sheet.getRow(0);
    int cells=row.getLastCellNum();
    Object[] csr=null;
    for(int i=1;i<rows;i++){
      row=sheet.getRow(i);
      csr=new String[cells];
      for(int j=0;j<cells;j++){
        XSSFCell cell=row.getCell(j);
        Object obj=null;
        if(cell!=null){
          obj=getValue(cell);
        }
        csr[j]=obj;
      }
      list.add(csr);
    }
    if(in!=null)in.close();
    return list;
  }
  @SuppressWarnings("static-access")
  public String getValue(Cell cell){
    int type=cell.getCellType();
    String s="";
    if(type==cell.CELL_TYPE_NUMERIC){
      if(HSSFDateUtil.isCellDateFormatted(cell)){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        s=sdf.format(cell.getDateCellValue());
      }else {
        BigDecimal db = new BigDecimal(cell.getNumericCellValue());
        s=String.valueOf(db);
      }
    }else if(type==cell.CELL_TYPE_STRING){
      s=cell.getStringCellValue();
    }else if(type==cell.CELL_TYPE_BOOLEAN){
      s=cell.getBooleanCellValue()+"";
    }else if(type==cell.CELL_TYPE_FORMULA){
      s=cell.getCellFormula();
    }else if(type==cell.CELL_TYPE_BLANK){
      s=" ";
    }else if(type==cell.CELL_TYPE_ERROR){
      s=" ";
    }else{ 

    }
    return s.trim();
  }
  /**
   * @param args
   */
  public static void main(String[] args) {
    ExcelUtils ex=new ExcelUtils();
    try {
      List<Object[]> list=ex.importExcel("D:\\3.xls");
      for(Object[] ss:list){
        for(Object s:ss){
          System.out.print(s+"\t");
        }
        System.out.println();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  } 

}

注意:

jdk使用版本(影响excel07)

所使用的核心jar如下

poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
xmlbeans-2.3.0.jar

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • java使用POI批量导入excel数据的方法

    一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二.所需jar包: 三.简单的一个读取excel的demo 1.读取文件方法 /** * 读取出filePath中的所有数据信息 * @param filePath excel文件的绝对路径 * */ public static void getDataFromExcel(String filePath) { //String fileP

  • Java使用poi将word转换为html

    使用poi将word转换为html,支持doc,docx,转换后可以保持图片.样式. 1.导入Maven包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.a

  • JAVA使用POI获取Excel的列数与行数

    前言 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序进行Excel中列数和行数的读取. 方法如下 //获取指定行,索引从0开始 hssfRow=hssfSheet.getRow(1); //获取指定列,索引从0开始 hssfCell=hssfRow.getCell((short)6); //获取总行数 //int rowNum=hssfSheet.ge

  • java使用POI操作excel文件

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

  • java的poi技术读取和导入Excel实例

    报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序进行Excel的读取和导入. 项目结构: java_poi_excel 用到的Excel文件: xls XlsMain .java 类 //该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取Excel(2003版) import java.io.FileInputStream; impor

  • java 中 poi解析Excel文件版本问题解决办法

    poi解析Excel文件版本问题解决办法 poi解析Excel文件时有两种格式: HSSFWorkbook格式用来解析Excel2003(xls)的文件 XSSFWorkbook格式用来解析Excel2007(xlsx)的文件 如果用HSSFWorkbook解析Excel2007(xlsx)时就会报异常:" The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that d

  • Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法

    Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法 实现代码: import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.apache.poi.POIXMLExc

  • Java中easypoi导入excel文件列名相同的处理方案

    Easypoi是什么 Easypoi 功能如同名字easy,主打的功能就是容易,让一个没接触过poi的人员,就可以方便的写出Excel导出.Excel模板导出.Excel导入.Word模板导出,通过简单的注解和模板语言(熟悉的表达式fe语法),完成以前复杂的写法 开源地址:https://gitee.com/lemur/easypoi 独特的功能 基于注解的导入导出,修改注解就可以修改Excel 支持常用的样式自定义 基于map可以灵活定义的表头字段 支持一堆多的导出,导入 支持模板的导出,一些

  • java 使用poi 导入Excel数据到数据库的步骤

    由于我个人电脑装的Excel是2016版本的,所以这地方我使用了XSSF 方式导入 . 1 先手要制定一个Excel 模板 把模板放入javaWeb工程的某一个目录下如图: 2 模板建好了后,先实现模板下载功能 下面是页面jsp代码在这里只贴出部分代码 <!-- excel 导入小模块窗口 --> <div id="importBox" class="" style="display: none;"> <form i

  • Java用POI导入导出Excel实例分析

    1.异常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException 解决方法: 使用的poi的相关jar包一定版本一定要相同!!!!! 2.maven所使用jar包,没有使用maven的话,就用poi-3.9.jar和poi-ooxml-3.9.jar(这个主要是用于Excel2007以后的版本)两个jar包就行() <dependency> <groupId>org.apache.po

  • java中静态导入机制用法实例详解

    java中静态导入机制用法实例详解 这里主要讲解了如何使用Java中静态机制的用法,这里提供了简单实例大家可以参考下. 静态常量类 在java开发中,我们会经常用到一些静态常量用于状态判断等操作.为了能够在多个地方复用这些常量,通常每个模块都会加一个常量类,举个简单的列子: import com.sky.OrderMouleConsstants; /** * Created by gantianxing on 2017/4/21. */ public class Test { public vo

  • Java使用POI导出大数据量Excel的方法

    今天需要写一个导出的Excel的功能,但是发现当数据量到3万条时,列数在23列时,内存溢出,CPU使用100%,测试环境直接炸掉.在本地测试时发现,导出3000条左右的数据的时候,堆内存瞬间升高500M左右.然后发现了 SXSSFWorkbook 这个类. 简介 SXSSFWorkbook 需要 poi-ooxml 包 3.8 及以上开始支持,我这边适使用的是 3.9 版本,本质是一个 XSSFWorkbook 类( Excel2007 ),它使用的方式是采用 硬盘空间 来大幅降低 堆内存 的占

  • Java中EasyPoi导出复杂合并单元格的方法

    前言: 上星期做了一个Excel的单元格合并,用的是EasyPoi,我之前合并单元格都是原生的,第一次使用EasyPoi合并也不太熟悉,看着网上自己套用,使用后发现比原生的方便些,贡献一下,也给其他用到合并而且用的是EasyPoi的小伙伴节省下时间. 导出模板: 坐标: 版本号,自己来定,可以去官网查看:EasyPoi官网 <!-- easypoi 导入包 --> <dependency> <groupId>cn.afterturn</groupId> &l

  • java中javamail发送带附件的邮件实现方法

    本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输,JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载.目前最新版本是JavaMail1.5.0,下面我们来看看javamail发送带附件的邮件实例 mail.java 代码: 复制代码 代码如下: package mail;

  • Java中checkbox实现跨页多选的方法

    最近要实现一个功能,就是checkbox跨页多选,在网上看了一下,资料很少,而且大多是不完全的.不过经过我的努力,终于做出来了. JSP页面: 1,定义三个Hidden变量: <INPUT type="hidden" name="all_selected"> <INPUT type="hidden" name="now_selected"> <INPUT type="hidden&quo

  • java中利用反射调用另一类的private方法的简单实例

    我们知道,Java应用程序不能访问持久化类的private方法,但Hibernate没有这个限制,它能够访问各种级别的方法,如private, default, protected, public. Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectDemo {

随机推荐