ObjectExcelView.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.iamberry.wechat.tools;
  2. import java.util.Date;
  3. import java.util.List;
  4. import java.util.Map;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import org.apache.poi.hssf.usermodel.HSSFCell;
  8. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  9. import org.apache.poi.hssf.usermodel.HSSFFont;
  10. import org.apache.poi.hssf.usermodel.HSSFSheet;
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  12. import org.springframework.web.servlet.view.document.AbstractExcelView;
  13. /**
  14. * 导入到EXCEL
  15. * @author Administrator
  16. */
  17. public class ObjectExcelView extends AbstractExcelView{
  18. private String name = "";
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. /**
  26. * model参数为:
  27. * fileName: 下载的文件名称
  28. * titles: excel的文件标题
  29. * varList: 文件内容
  30. */
  31. @SuppressWarnings("unchecked")
  32. @Override
  33. protected void buildExcelDocument(Map<String, Object> model,
  34. HSSFWorkbook workbook, HttpServletRequest request,
  35. HttpServletResponse response) throws Exception {
  36. // TODO Auto-generated method stub
  37. // 准备文件名
  38. Date date = new Date();
  39. StringBuffer filename = new StringBuffer("soodo-");
  40. String modelFileName = model.get("fileName").toString();
  41. if(name == null || "".equals(name)){
  42. filename.append(DateTimeUtil.format(date, "yyyyMMdd-"));
  43. }else{
  44. filename.append(name);
  45. }
  46. filename.append(modelFileName == null ? "default" : modelFileName);
  47. // 工作薄对象
  48. HSSFSheet sheet;
  49. HSSFCell cell;
  50. sheet = workbook.createSheet("soodo-sheet");
  51. // 设置返回内容
  52. response.setContentType("application/octet-stream");
  53. response.setHeader("Content-Disposition", "attachment;filename="+new String((filename.toString()).getBytes("UTF-8"), "ISO-8859-1")+".xls");
  54. // 标题内容
  55. List<String> titles = (List<String>) model.get("titles");
  56. int len = titles.size();
  57. // 标题样式
  58. HSSFCellStyle headerStyle = workbook.createCellStyle();
  59. headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  60. headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  61. HSSFFont headerFont = workbook.createFont(); //标题字体
  62. headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  63. headerFont.setFontHeightInPoints((short)11);
  64. headerStyle.setFont(headerFont);
  65. short width = 20,height=25*20;
  66. sheet.setDefaultColumnWidth(width);
  67. // 设置标题
  68. for(int i=0; i<len; i++){
  69. String title = titles.get(i);
  70. cell = getCell(sheet, 0, i);
  71. cell.setCellStyle(headerStyle);
  72. setText(cell,title);
  73. }
  74. // 标题的高度
  75. sheet.getRow(0).setHeight(height);
  76. //内容样式
  77. HSSFCellStyle contentStyle = workbook.createCellStyle();
  78. contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  79. // 设置内容
  80. List<List<Object>> varList = (List<List<Object>>) model.get("varList");
  81. int row = 1; // 行数,第一行被标题占据,所以从第二行开始
  82. for (List<Object> list : varList) {
  83. int col = 0;// 当前行的列数
  84. for (Object object : list) {
  85. // 工作薄对象 行 列
  86. cell = getCell(sheet, row, col);
  87. cell.setCellStyle(contentStyle);
  88. setText(cell,StrUtils.checkStr(object));
  89. col ++; // 列迭代
  90. }
  91. row ++; // 行迭代
  92. }
  93. }
  94. }