使用Java解析excl
由于工作原因需要解析excl表格的内容。于是,我决定利用Apache POI的支持库,用java程序解析Excel表。
本文将讲解解析一个excl的一些基本方法,并附带简单一个的demo程序
首先下载POI相关jar包,传送门在这里 : Apache POI - Download Release Artifacts,然后将包导入工程,将以下包导入依赖库
POI中主要的几个EXCL对象
- workbook对象:
每一个excl文件将会被解析为一个workbook对象,其中Workbook接口有两个实现 类,分别是解析2003版”.xls”文件的HSSFWorkbook类,解析2007版”.xlsx”文件的XSSFWorkbook类。 - sheet对象:
excl中每一个sheet页都会被解析为一个sheet对象,可以使用workbook对象中的getSheetAt(int i)方法来获得第i个sheet页。(注意:i从第0个开始) - row对象:
excl中每一行数据将会被解析为一个row对象,采用迭代器Iterator可以将sheet解析为row的迭代器容器,然后就可以进行遍历,获得每个row对象。 - cell对象:
excl中的每个单元格将会被解析为一个cell对象,可以使用row对象中的getCell(int i)方法来获得第i(从0开始)个单元格对象。
demo程序:解析简单一个的excl表格
该excl表是一个员工的人员信息表 “test2.XLSX”,如下图:
我们首先建一个Employee类来接收解析出来的每行数据
Employee类:
package exclDemo;
/**
* 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 exclDemo;
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\\exclDemo\\testEXCL.XLSX";
String filePath="src\\exclDemo\\test2.XLSX";
//创建输入流
File file=new File(filePath);
InputStream in=new FileInputStream(file);
//获得excl文件对应对象
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();
}