excl
使用java解析excel
由于工作原因需要解析Excel表格的内容。于是,我决定利用Apache POI的支持库,用java程序解析Excel表。
本文将讲解解析一个excel的一些基本方法,并附带简单一个的demo程序
首先下载POI相关jar包,传送门在这里 : Apache POI - Download Release Artifacts,然后将包导入工程,将以下包导入依赖库
POI中主要的几个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();
}
程序执行打印结果:
相关阅读
1. 准备JDK包,分别是1.7和1.8,jdk-7u79-linux-x64.tar.gz和jdk-8u161-linux-x64.gz;2. 解压,解压后的目录结构如图所示:JDK1.7:JDK1.8:3.
在Excel2010工作表中,用户可以将被选中的单元格设置为日期和时间专用的数字格式,以便更适合实际需要。下面让seo实验室小编为你带来
data Movement Model
一、简述: cmd中,执行java命令与javac命令的区别: javac:是编译命令,将java源文件编译成.class字节码文件。 例如:javac hello.java 将
国际化之使用ResourceBundle.getBundle详解
首先新建一个Resources文件夹 新建有个Resource Bundle ‘DigitalDialog’ Resources 效果如下 中文 tips.state.initializin