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();
}
}
}