使用Java解析excel

使用Java解析excel

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

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

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

使用Java解析excel_第1张图片

POI中主要的几个EXCEL对象

使用Java解析excel_第2张图片

  • 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”,如下图:

使用Java解析excel_第3张图片

我们首先建一个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 employeeList =new ArrayList<>();
        Employee employee;

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

        //解析sheet,将获得多行数据,并放入迭代器中
        Iterator 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();
    }

程序执行打印结果:

使用Java解析excel_第4张图片

你可能感兴趣的:(Java)