public class Student {
private long id;
private String name;
private int age;
private boolean sex;
private Date birthday;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean getSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
编写默认的ExcelView
public class DefaultExcelView extends AbstractExcelView {
@Override
protected void buildExcelDocument(Map model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
List dataSet = (List) model.get("dataSet");
String[] keys = (String[])model.get("keys");
String[] titles = (String[])model.get("titles");
String fileName = (String)model.get("fileName");
HSSFSheet sheet = workbook.createSheet();
sheet.setDefaultColumnWidth(12);
for (int i = 0; i < titles.length; i++) {
HSSFCell cell = getCell(sheet,0,i);
setText(cell, titles[i]);
}
for (int i = 0; i < dataSet.size(); i++) {
HSSFRow row = sheet.createRow(i+1);
Object obj = dataSet.get(i);
// 处理列
for(int j=0; j < keys.length; j++) {
row.createCell(j).setCellValue(getFieldValueByName(keys[j], obj));
}
}
fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1") + ".xls";
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
}
/**
* 属性中的方法都是getXXX和setXXX,不存在isXXX
* @param fieldName
* @param obj
* @return
*/
protected String getFieldValueByName(String fieldName, Object obj) {
String firstLetter = fieldName.substring(0,1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
try {
Method method = obj.getClass().getMethod(getter, new Class[]{});
Object value = method.invoke(obj, new Object[]{});
return value.toString();
} catch (Exception e) {
e.printStackTrace();
System.out.println("属性不存在!");
}
return "";
}
}
在controller层如何使用
@Controller
@RequestMapping(value = "/controller/student")
public class StudentController {
@RequestMapping(value = "/export")
public ModelAndView export(ModelMap model) throws ParseException {
List dataSet = new ArrayList();
for (int i = 0; i < 20; i++) {
Student student = new Student();
student.setId(i);
student.setName("lgq"+i);
student.setAge(20);
student.setSex(false);
student.setBirthday(new Date());
dataSet.add(student);
}
String[] keys = new String[]{"id", "name", "age", "sex","birthday"};
String[] titles = new String[]{"编号", "姓名", "年龄", "性别", "生日"};
String fileName = "学生信息";
DefaultExcelView defaultExcelView = new DefaultExcelView();
model.put("dataSet", dataSet);
model.put("keys", keys);
model.put("titles", titles);
model.put("fileName", fileName);
return new ModelAndView(defaultExcelView, model);
}
}