package util;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import ognl.Ognl;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/**
* @author codingShop
*通用pojo对象集合映射excel到输出流工具,使用反射与ognl,本地,网络都可用,使用反射提高了通用性
*注意使用此工具类,要求pojo类的输出属性必须提供get/set方法,因为ognl要访问获取属性值
*/
public class Object2Excel {
private Object2Excel(){}
public static List<String> parsePojoProps(Object obj){
if(obj==null)return null;
Class clazz = obj.getClass();
Field[] fields=clazz.getDeclaredFields();
List<String> list = new ArrayList<String>();
for(Field f:fields){
list.add(f.getName());
}
return list;
}
public static void createExcelFromList(List list,OutputStream os){
if(list==null||list.size()==0)return;
List<String> props = parsePojoProps(list.get(0));
WritableWorkbook book;
try {
book = Workbook.createWorkbook(os);
WritableSheet sheet = book.createSheet("第一页",0);
for(int i=0;i<props.size();i++){
sheet.addCell(new Label(i,0,props.get(i)));
}
int rows=1;
for(Object obj:list){
int colIndex=0;
for(String pro:props){
sheet.addCell(new Label(colIndex++,rows,Ognl.getValue(pro,obj)+""));
}
rows++;
}
book.write();
book.close();
}catch(Exception e){
e.printStackTrace();
}
}
}