必威体育Betway必威体育官网
当前位置:首页 > IT技术

使用Java解析excel

时间:2019-10-02 16:42:11来源:IT技术作者:seo实验室小编阅读:70次「手机版」
 

excl

使用java解析excel

由于工作原因需要解析Excel表格内容。于是,我决定利用Apache POI的支持库,用java程序解析Excel表。

本文将讲解解析一个excel的一些基本方法,并附带简单一个的demo程序

首先下载POI相关jar包,传送门在这里 : Apache POI - Download Release Artifacts,然后将包导入工程,将以下包导入依赖库

导入依赖包

POI中主要的几个EXCEL对象

excel对象

  • workbook对象:

    每一个excel文件将会被解析为一个workbook对象,其中Workbook接口有两个实现 类,分别是解析2003版".xls"文件的HSSFWorkbook类,解析2007版".xlsx"文件的XSSFWorkbook类。

  • sheet对象:

    excel中每一个sheet页都会被解析为一个sheet对象,可以使用workbook对象中的getSheetAt(int i)方法来获得第i个sheet页。(注意:i从第0个开始)

  • row对象:

    excel中每一行数据将会被解析为一个row对象,采用迭代器Iterator可以将sheet解析为row的迭代器容器,然后就可以进行遍历,获得每个row对象。

  • cell对象:

    excel中的每个单元格将会被解析为一个cell对象,可以使用row对象中的getCell(int i)方法来获得第i(从0开始)个单元格对象。

demo程序:解析简单一个的excel表格

该excel表是一个员工的人员信息表 “test2.XLSX”,如下图:

这里写图片描述

我们首先建一个Employee类来接收解析出来的每行数据

Employee类:

package excelDemo;

/**
 * Created by
 * User:Hewei
 * Time: 2018/8/11.
 */
public class Employee {
    //序号
    private int rank;
    //员工编号
    private String number;
    //姓名
    private String name;
    //部门
    private String department;
    //职位
    private String position;
    //邮箱
    private String email;
    //电话号码
    private String telNum;
    //学校
    private String university;
    //专业
    private String major;
    //指导师傅
    private String teacher;

   // Getters and  setters ...
    ... ...
    ... ...
    ... ...

    public void info(){
        System.out.println("序号:"+rank);
        System.out.println("员工编号:"+number);
        System.out.println("姓名:"+name);
        System.out.println("部门:"+department);
        System.out.println("职位:"+position);
        System.out.println("邮箱:"+email);
        System.out.println("电话号码:"+telNum);
        System.out.println("学校:"+university);
        System.out.println("专业:"+major);
        System.out.println("指导师傅:"+teacher);
    }

程序入口:

package excelDemo;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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 java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Created by
 * User:Hewei
 * Time: 2018/8/11.
 */
public class POITest {
    public static void main(String[] args) throws IOException {
        //String filePath1="src\\excelDemo\\testEXCEL.XLSX";

        String filePath="src\\excelDemo\\test2.XLSX";

        //创建输入流
        File file=new File(filePath);
        InputStream in=new fileinputstream(file);

        //获得excel文件对应对象
        Workbook workbook;

        // 根据后缀,得到不同的Workbook子类,即HSSFWorkbook或XSSFWorkbook
        if(filePath.endsWith("XLSX")) {
            workbook = new XSSFWorkbook(in);
        }else {
            workbook = new HSSFWorkbook(in);
        }

        //获得sheet对应对象
        Sheet sheet=workbook.getSheetAt(0);

        //创建人员对象容器
        List<Employee> employeeList =new ArrayList<>();
        Employee employee;

        //创建表头容器
        List<String>  headers=new ArrayList<>();

        //解析sheet,将获得多行数据,并放入迭代器中
        Iterator<Row> ito=sheet.iterator();
        int count=0;

        Row row;
        while(ito.hasNext()) {
            row = ito.next();

            //由于第一行是标题,因此这里单独处理
            if (count == 0) {
                for(int i=0;i<10;i++){
                    headers.add(row.getCell(i).toString());
                }
            } else {
                //其它行都在这里处理

                employee =new Employee();
                employee.setRank(count);
                employee.setNumber(row.getCell(1).toString());
                employee.setName(row.getCell(2).toString());
                employee.setDepartment(row.getCell(3).toString());
                employee.setPosition(row.getCell(4).toString());
                employee.setEmail(row.getCell(5).toString());
                employee.setTelNum(row.getCell(6).toString());
                employee.setUniversity(row.getCell(7).toString());
                employee.setMajor(row.getCell(8).toString());
                employee.setTeacher(row.getCell(9).toString());

                employeeList.add(employee);
            }

            ++count;
        }

        //打印表头
        /*for(String str:headers){
            System.out.println(str);
        }*/


        employeeList.get(4).info();
        workbook.close();
    }

程序执行打印结果:

这里写图片描述

相关阅读

Linux中使用alternatives切换Jdk版本

1. 准备JDK包,分别是1.7和1.8,jdk-7u79-linux-x64.tar.gz和jdk-8u161-linux-x64.gz;2. 解压,解压后的目录结构如图所示:JDK1.7:JDK1.8:3.

excel表格日期格式怎么设置

在Excel2010工作表中,用户可以将被选中的单元格设置为日期和时间专用的数字格式,以便更适合实际需要。下面让seo实验室小编为你带来

PowerDesigner使用步骤等详解

                               data Movement Model                                  

cmd中javac和java使用及注意事项

一、简述: cmd中,执行java命令与javac命令的区别: javac:是编译命令,将java源文件编译成.class字节码文件。 例如:javac hello.java 将

国际化之使用ResourceBundle.getBundle详解

首先新建一个Resources文件夹 新建有个Resource Bundle ‘DigitalDialog’ Resources 效果如下 中文 tips.state.initializin

分享到:

栏目导航

推荐阅读

热门阅读