POI组件
APACHE旗下有很多已经开源成熟的项目,可以在apache.org官网进行下载。
下面简单介绍一下POI组件。
POI是基于微软OLE 2复合文档格式开发纯Java文件格式端口的主项目。微软办公文档以及使用MFC属性集序列化文档对象的程序都使用OLE 2复合文档格式。
Apache POI也是基于办公开放XML (ooxml)开发纯Java文件格式端口的主项目。OOXML是ECMA /国际标准化组织标准化工作的一部分。这个文档相当大,但是你通常不用太费力就能找到你需要的那一部分!ECMA-376标准在这里,也在微软OSP公司之下。
下面简单介绍poi组件中的功能,以excel为例
public class Excel {
public static void export(Class<?> clz,List<?> list,String filePath,String fileName,String[] titles) throws IllegalArgumentException, IllegalAccessException, IOException {
//创建工作簿对象
Workbook wb = new HSSFWorkbook();
FileOutputStream out = new FileOutputStream(filePath+File.separatorChar+fileName);
//创建表格
int index = fileName.indexOf('.');
Sheet s = wb.createSheet(fileName.substring(index));
//创建表头(标题)信息
Row row1 = s.createRow(0);
for(int i = 0;i<titles.length;i++) {
Cell cell = row1.createCell(i);
cell.setCellValue(titles[i]);
}
for(int i = 0;i<list.size();i++) {
Row row2 = s.createRow(i+1);
Field[] fs = clz.getDeclaredFields();
for(int j = 0;j<titles.length;j++) {
Cell cell = row2.createCell(j);
fs[j].setAccessible(true);
cell.setCellValue(fs[j].get(list.get(i)).toString());
fs[j].setAccessible(false);
}
}
wb.write(out);
out.close();
wb.close();
}
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, IOException {
List<Hero> list = new ArrayList<Hero>();
Hero h1 = new Hero("键盘侠",1,20,"网络");
Hero h2 = new Hero("煎饼侠",1,32,"锅");
Hero h3 = new Hero("猪猪侠",2,16,"烤乳猪");
Hero h4 = new Hero("蜘蛛侠",1,36,"吐司");
Hero h5 = new Hero("龙卷",2,28,"超能力");
list.add(h1);
list.add(h2);
list.add(h3);
list.add(h4);
list.add(h5);
String filePath = "C:\\Users\\王聪\\Desktop";
String fileName = "超人集结.xls";
String[] titles = new String[] {"名称","性别","年龄","类型"};
String[] fieldsNames = new String[] {"name","gender","age","type"};
export(Hero.class, list, filePath, fileName, titles);
}
}
class Hero{
private String name;
private int gender;
private int age;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Hero(String name, int gender, int age, String type) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.type = type;
}
public Hero() {
}
@Override
public String toString() {
return "Hero [name=" + name + ", gender=" + gender + ", age=" + age + ", type=" + type + "]";
}
}
运行结果: