springMVC實現excel導出(簡單封裝版)

peke 8年前發布 | 3K 次閱讀 Java SpringMVC

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<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {



    List<Object> dataSet = (List<Object>) 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<Student> dataSet = new ArrayList<Student>();

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

}



}</pre>

 本文由用戶 peke 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!