以前通常会把java bean list 输出为EXCEL文件,作为报表供客户下载,有时候也需要读入客户准备好的Excel文档,并将这些数据导入到数据库中,或者做其他处理, 一般来说导入 excel 文件到内存中应该比较容易,但jxls这个库提供了另外一种处理方式,通过配置文件配置指定导入的column和对应的pojo类的属性.虽然自己也可以做到,但人家已经实现了,还是很方便的, 唯一郁闷的是 导入的jar包比较多,比较变态.
主要用到的工具 jxls: http://jxls.sourceforge.net/
1. 一个公用的处理方法, 将导入的excel文件转为 java bean list:package com.yihaomen.parseexceltojavabeanlist;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jxls.reader.ReaderBuilder;
import net.sf.jxls.reader.XLSReader;
public class Util{
public ListparseExcelFileToBeans(File xlsFile,
File jxlsConfigFile)
throws Exception {
XLSReader xlsReader = ReaderBuilder.buildFromXML(jxlsConfigFile);
Listresult = new ArrayList();
Mapbeans = new HashMap();
beans.put("result", result);
InputStream inputStream = null;
try {
inputStream = new BufferedInputStream(new FileInputStream(xlsFile));
xlsReader.read(inputStream, beans);
}catch(Exception e){
e.printStackTrace();
}finally{
if (inputStream !=null){
inputStream.close();
}
}
return result;
}
}
要转换的java bean 的定义如下:
package com.yihaomen.parseexceltojavabeanlist;
public class Person {
private String firstName;
private String lastName;
private int age;
public Person() {
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
重点是配置文件的处理,看 excel 文件 与 java bean之间的 对应关系:
person.firstName
person.lastName
person.age
测试代码如下:
package com.yihaomen.parseexceltojavabeanlist;
import java.io.File;
import java.util.List;
public class TestApp {
public static void main(String[] args) throws Exception {
String path = System.getProperty("user.dir");
Util util = new Util();
String excelFilePath = path + File.separator + "personData.xls";
String configFilePath = path + File.separator + "personConfig.xml";
Listpersons = util.parseExcelFileToBeans(new File(excelFilePath),
new File(configFilePath));
for(Person p : persons){
System.out.println(p.getFirstName());
}
}
}
Excel 文件内容如下:
FirstName LastName Age
Joe Bloggs 25
John Doe 30