本文参考:http://blog.csdn.net/lenolong/article/details/3957735
直接上代码:
public class DocumentServiceImpl implements DocumentService {
public HSSFWorkbook getPoiExcel(String sheetTitle, String[] headerTitles, List<Object> datas) {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(sheetTitle);
// 声明一个画图的顶级管理器
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
HSSFRow row = sheet.createRow(0); //定义行
HSSFCell cell; //定义单元格
//循环生成excel表格标题行
for(int i=0; i<headerTitles.length; i++) {
cell = row.createCell((short)i);
cell.setCellValue(headerTitles[i]);
}
//遍历数据集生成表格体
for(int i=0; i<datas.size(); i++) {
Object obj = datas.get(i);
//利用反射,获取对象的所有属性
Field[] fields = obj.getClass().getDeclaredFields();
row = sheet.createRow(i+1);
//根据 java bean 属性的先后顺序,动态调用getXxx()方法得到属性值
for(short j=0; j<fields.length; j++) {
cell = row.createCell(j);
Field field = fields[j]; //获取属性
String fieldName = field.getName(); //获取属性名称
String getterMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1); //生成getXxx方法名称
//生成getXxx方法并调用,取得属性值
try {
Method getterMethod = obj.getClass().getMethod(getterMethodName, new Class[]{}); //生成方法
Object value = getterMethod.invoke(obj, new Object[] {}); //取得属性值
if (value instanceof byte[]) {
// 有图片时,设置行高为60px;
row.setHeightInPoints(60);
byte[] bsValue = (byte[]) value;
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short)6, i+1, (short)6, i+1);
patriarch.createPicture(anchor, wb.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
} else {
//其它数据类型都当作字符串简单处理
cell.setCellValue(value.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return wb;
}
}