使用POI读取Microsoft Office格式档案

前言

Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。

1.读取文档前,我们需要知道excel是 03 版的还是07版的,因为版本不一样,读取方式也不一样,

下面提供几点看版本的方式
  • 可以看文件的扩展名,.xls是2003的,.xlsx是2007的。
    这里写图片描述
  • 打开后按住ctrl键不放,再狂按向下的箭头,直到最后一行,查看最后一行的行标,如果是65536就是2003的。如果是1048576就是2007的。
    这里写图片描述

如果感兴趣的话,可以百度,还有很多种查看版本的方式,这里就不提供了,

创建一个代码查看版本的方法
   //读取版本的方法
    public static String getVersion(File file){

        //获取文件全名称
        String name = file.getName();

        //获取文件名后缀
        String suffix = name.substring(name.lastIndexOf("."));

        //.xls是2003的,.xlsx是2007的
        if(".xls".equals(suffix)){
            return "2003";
        } else if(".xlsx".equals(suffix)) {
            return "2007";
        } else{
            return "excel版本不支持";
        }


    }

读取03版的方法

首先需要导入poi相关jar包,

jar包下载地址

这里写图片描述

导入上面的jar包即可实现读取,

编写代码
 public static void main(String[] args) throws IOException {
        File file = new File("D:\\区域导入测试数据.xls");
        String version = getVersion(file);

        if (version == "2003") {
            //创建03版读取类
            HSSFWorkbook work = new HSSFWorkbook(new FileInputStream(file));

            HSSFSheet sheetAt = work.getSheetAt(0);//读取sheetAt

            for (Row row : sheetAt) {
                if (row.getRowNum() == 0){
                    //如果是第一行,标题,那么就不打印
                    continue;
                }

                System.out.print("数据1="+row.getCell(0)+"   ");  //第一列的数据
                System.out.print("数据2="+row.getCell(1)+"   ");  //第二列的数据
                System.out.print("数据3="+row.getCell(2)+"   ");  //第三列的数据
                System.out.println("数据4="+row.getCell(3));  //第四列的数据
            }

            work.close();
        }

    }

数据打印如下
这里写图片描述

07版读取代码如下
  //07版本
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\学习资料_框架学习\\bos需求文档\\02-BOS2.0\\速运快递项目-day04\\资料\\03_区域测试数据\\区域导入测试数据.xlsx");
        String version = getVersion(file);
        if(version == "2007"){
             XSSFWorkbook work = new XSSFWorkbook(new FileInputStream(file));
            XSSFSheet sheetAt = work.getSheetAt(0);
            for (Row row : sheetAt) {
                if (row.getRowNum() == 0){
                    //如果是第一行,标题,那么就不打印
                    continue;
                }

                System.out.print("数据1="+row.getCell(0)+"   ");  //第一列的数据
                System.out.print("数据2="+row.getCell(1)+"   ");  //第二列的数据
                System.out.print("数据3="+row.getCell(2)+"   ");  //第三列的数据
                System.out.println("数据4="+row.getCell(3));  //第四列的数据
            }
            work.close();
        }
    }

数据打印如下
这里写图片描述

看代码我们可以发现,其中的代码相似读大的惊人,所以我们可以抽取公共代码

首先我们来看体系结构

这里写图片描述
我们可以发现,WorkBook是HSSFWOrkBook跟XSSFWorkBook的父类

这里写图片描述
Sheet也是如此,那么我们就可以上塑造型来实现抽取

 public static void main(String[] args) throws IOException {
        File file = new File("D:\\学习资料_框架学习\\bos需求文档\\02-BOS2.0\\速运快递项目-day04\\资料\\03_区域测试数据\\区域导入测试数据.xls");
        String version = getVersion(file);

        Workbook work;
        Sheet sheetAt;
        if(version == "2007"){
             work = new XSSFWorkbook(new FileInputStream(file));
             sheetAt = work.getSheetAt(0);
        }else if(version == "2003"){
            work = new HSSFWorkbook(new FileInputStream(file));
            sheetAt = work.getSheetAt(0);//读取sheetAt
        } else {
            throw new RuntimeException("不支持该格式文件!");
        }

        for (Row row : sheetAt) {
            if (row.getRowNum() == 0){
                //如果是第一行,标题,那么就不打印
                continue;
            }

            System.out.print("数据1="+row.getCell(0)+"   ");  //第一列的数据
            System.out.print("数据2="+row.getCell(1)+"   ");  //第二列的数据
            System.out.print("数据3="+row.getCell(2)+"   ");  //第三列的数据
            System.out.println("数据4="+row.getCell(3));  //第四列的数据
        }

         work.close();
    }

使用07版excel测试
这里写图片描述

使用03版excel测试
这里写图片描述

以上就是poi读取的代码,是不是很简单呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值