package org.ian.webutil;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
 
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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 ReadExcel {
 
    private static final Log log = LogFactory.getLog(ReadExcel.class);
 
     
    /**
     * 判断后缀分批入
     */
    private static void parseSUCCEXX(String realPath,String fileName){
         
        String [] pfix= fileName.split("\\.");
        String suffix = pfix[pfix.length -1];
         
        if( suffix!=null&&!suffix.equals("")&&suffix.equals("xls")){
             
            System.out.println("xls");
            // jxl方法可读取.xls格式
            jlxExcel(realPath,fileName);
        }else if(suffix .equals("xlsx")){
             
            System.out.println("xlsx");
            // poi方法可读取Excel2007即.xlsx格式
            poiExcel(realPath,fileName);
        }
    }
     
    /**
     * 读取 xls JXL
     * @param realPath
     * @param fileName
     */
    private static void jlxExcel(String realPath,String fileName){
            //===============jlx方法=================
            try{
            File fileDes = new File(realPath);
            InputStream str = new FileInputStream(fileDes);
            // 构造Workbook(工作薄)对象
            Workbook rwb=Workbook.getWorkbook(str);
            Sheet rs=rwb.getSheet(0);//获取第一张工作表
            int rsRows=rs.getRows();//获取Sheet表中所包含的总行数
            int rsCols=rs.getColumns();//获取Sheet表中所包含的总列数
            log.info("========行========"+rsRows+"=====列========"+rsCols);
            for(int i=1;i<rsRows;i++){//读取行
                log.info("========执行第========"+i+"行");
                for(int j=0;j<rsCols;j++){
                    log.info("========执行第========"+j+"列");
                    Cell coo=rs.getCell(j, i);//单元格定位列,再定位行
                    log.info("========coo========"+coo);
                    String strc=coo.getContents();//读取内容
                    log.info("========读取内容strc========"+strc);
                    System.out.println("文件"+fileName+"的内容为:"+strc);
                }
            }
            rwb.close(); 
            }catch (FileNotFoundException e) {  
                 e.printStackTrace();  
            } catch (BiffException e) {  
             e.printStackTrace();  
            } catch (IOException e) {  
             e.printStackTrace();  
            }  
                 
            //==========读取excel文件内容=结束=====================
             
    }
     
    /**
     * POI读取   xlsx
     * @param realPath
     * @param fileName
     */
    private static void poiExcel(String realPath,String fileName){
        try{
            File fileDes = new File(realPath);
            InputStream str = new FileInputStream(fileDes);
            XSSFWorkbook xwb = new XSSFWorkbook(str);  //利用poi读取excel文件流
            XSSFSheet st = xwb.getSheetAt(0);  //读取sheet的第一个工作表
            int rows=st.getLastRowNum();//总行数
            int cols;//总列数
            log.info("========行========"+rows);
            for(int i=0;i<rows;i++){
                XSSFRow row=st.getRow(i);//读取某一行数据
                if(row!=null){
                    //获取行中所有列数据
                    cols=row.getLastCellNum();
                    log.info("========行========"+rows+"=====列========"+cols);
                for(int j=0;j<cols;j++){
                    XSSFCell cell=row.getCell(j);
                    if(cell==null){
                        System.out.print("   "); 
                    }else{
                    //判断单元格的数据类型
                    switch (cell.getCellType()) { 
                        case XSSFCell.CELL_TYPE_NUMERIC: // 数字 
                            System.out.print(cell.getNumericCellValue() + "   "); 
                            break
                        case XSSFCell.CELL_TYPE_STRING: // 字符串 
                            System.out.print(cell.getStringCellValue() + "   "); 
                            break
                        case XSSFCell.CELL_TYPE_BOOLEAN: // Boolean 
                            System.out.println(cell.getBooleanCellValue() + "   "); 
                            break
                        case XSSFCell.CELL_TYPE_FORMULA: // 公式 
                            System.out.print(cell.getCellFormula() + "   "); 
                            break
                        case XSSFCell.CELL_TYPE_BLANK: // 空值 
                            System.out.println(""); 
                            break
                        case XSSFCell.CELL_TYPE_ERROR: // 故障 
                            System.out.println("故障"); 
                            break
                        default
                            System.out.print("未知类型   "); 
                            break
                        
                }
                }
                }
            }
        }catch(IOException e){
            e.printStackTrace();  
        }
         
    }
 
     
    /**
     * test
     * @param args
     */
    public static void main(String[] args) {
        String fileName = "banShot.xlsx";
        String realPath = "d:/"+fileName;
         
        parseSUCCEXX(realPath, fileName);
         
    }
 
}

POI操作Excel详解,读取xls和xlsx格式的文件的更多相关文章

  1. POI操作Excel详解,HSSF和XSSF两种方式

    package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundException; ...

  2. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  3. POI操作Excel(xls、xlsx)

    阿帕奇官网:http://poi.apache.org/ POI3.17下载:http://poi.apache.org/download.html#POI-3.17 POI操作Excel教程(易百教 ...

  4. java使用Apache POI操作excel文件

    官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...

  5. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  6. 自己的包poi操作Excel工具

    在前面的文章<使用poi读写Excel>中分享了一下poi操作Excel的简单演示样例.这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完毕的功能是:读取Excel.汇总E ...

  7. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  8. 利用Apache POI操作Excel

    最近在做接口,有个功能是利用Excel导入汽车发动机所需零件信息到线上系统中.简单回顾一下之前学过的用java操作Excel. 1.maven配置Apache POI pom.xml中配置POIjar ...

  9. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

随机推荐

  1. SSE图像算法优化系列二十一:基于DCT变换图像去噪算法的进一步优化(100W像素30ms)。

    在优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码) 一文中,我们曾经优化过基于DCT变换的图像去噪算法,在那文所提供的Demo中,处理一副1000*1000左右的灰度噪音图像耗时 ...

  2. 每天一个linux命令:chown

    1.命令简介         chown(Change owner) 用来改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组.用户可以是用 ...

  3. alibaba的springcloud孵化器项目

    Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式 ...

  4. Docker+Nginx+Keepalived实现架构高可用

    一.背景 通过keepalived实现nginx高可用,由于在家不想弄多台主机来搞,所以将运行环境用docker封装来模拟跨主机 docker基础镜像:centos 说之前,简单介绍一下: Keepa ...

  5. hive SQL COALESCE 函数

    COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值.如果所有的表达式都是空 ...

  6. 阿里云oss缩略图如何产生读取 超简单 不看后悔(转)

    OSS是使用通过URL尾部的参数指定图片的缩放大小 图片路径后面拼接如下路径: ?x-oss-process=image/[处理类型],x_100,y_50[宽高等参数] ?x-oss-process ...

  7. Protobuf3 序列化

    在message_lite.h中定义了SerializeToString ,SerializeToArray ,SerializeToCodedStream ,SerializeToZeroCopyS ...

  8. 判断回文字符串、回文链表、回文数(python实现)

    所谓回文字符串,就是正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串.即是对称结构 判断回文字符串 方法一: def is_palin ...

  9. Scratch 可能能帮你找到学习编程的初心

    Scratch 是MIT 出品的一款少儿编程软件,基于Adobe Air开发,这个运行环境在如今已经显得有些过时,但只要这个软件有用,软件本身就不会过时. 编程的本质大致是调用计算机的指令编写一系列任 ...

  10. Spring配置动态数据源-读写分离和多数据源

    在现在互联网系统中,随着用户量的增长,单数据源通常无法满足系统的负载要求.因此为了解决用户量增长带来的压力,在数据库层面会采用读写分离技术和数据库拆分等技术.读写分离就是就是一个Master数据库,多 ...