Spring POI 导出数据到Excel文件

/**
* 导出到Excel
* @Title: exportExcel
* @param String pn,HttpSession session
* @return ModelAndView 返回类型
* @author
* @throws Exception
*/
@SuppressWarnings("unchecked")
@RequestMapping(value="/export-uarea/{pn}",method=RequestMethod.GET)
@ResponseBody
public ModelAndView exportExcel(@PathVariable("pn") String pn,HttpSession session) throws Exception{
ModelAndView modelAndView = new ModelAndView();
    // 创建Map对象,用于存入列名字与列值
    Map<String,Object> dataMap = new HashMap<String,Object>();
    // 创建titles对象,对象中的值为Excel的列名
    List<String> titles = new ArrayList<String>();
    // 向titles对象存入列名 start
    titles.add("区域名称"); //1
    titles.add("区域编码"); //2
    titles.add("描述说明"); //3
    titles.add("删除标志"); //4
    titles.add("记录日期"); //5
    titles.add("记录人"); //6
    titles.add("修改日期"); //7
    titles.add("修改人"); //8
    titles.add("备注"); //9
    // 向titles对象存入列名 end

    // 将dataMap对象存入Excel表列名的数组
    dataMap.put("titles", titles);
    // 获取配件订单列表
    List<UArea> uAreaList = null;
    if("-1".equals(pn)){
      uAreaList = uAreaService.queryAllUArea();
    }else{
      uAreaList = (List<UArea>) session.getAttribute("uAreas");
    }
    List<Map<Integer,Object>> listMap = new ArrayList<Map<Integer,Object>>();
    for(int i=0;i<uAreaList.size();i++){
      Map<Integer, Object> map = new HashMap<Integer, Object>();
      map.put(0, uAreaList.get(i).getAreaName()); //1
      map.put(1, uAreaList.get(i).getAreaCode()); //2
      map.put(2, uAreaList.get(i).getDescription()); //3
      map.put(3, uAreaList.get(i).getDeleteFlag()); //4
      map.put(4, uAreaList.get(i).getInputDate()); //5
      map.put(5, uAreaList.get(i).getInputId()); //6
      map.put(6, uAreaList.get(i).getUpdateDate()); //7
      map.put(7, uAreaList.get(i).getUpdateId()); //8
      map.put(8, uAreaList.get(i).getRemark()); //9
      listMap.add(map);
    }
    dataMap.put("listMap", listMap);
    // 创建Excel工具类的 excelView对象
    ObjectExcelView excelView = new ObjectExcelView();
    // 创建Excel表
    modelAndView = new ModelAndView(excelView,dataMap);
    return modelAndView;
  }

 

返回ModelAndView对象  会自动加载ObjectExcelView();

 

 

package com.sinosoft.autopart.platform.common.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.web.servlet.view.document.AbstractExcelView;

/**
* 导入到EXCEL 类名称:ObjectExcelView.java
* @author link
*
*/
public class ObjectExcelView extends AbstractExcelView {

@SuppressWarnings("unchecked")
@Override
protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
  Date date = new Date();
  String filename = this.dateToStr(date, "yyyyMMddHHmmss");
  HSSFSheet sheet;
  HSSFCell cell;
  HSSFRow row;
  response.setContentType("application/octet-stream");
  response.setHeader("Content-Disposition", "attachment;filename=" + filename + ".xls");
  sheet = workbook.createSheet("sheet1");

  List<String> titles = (List<String>) model.get("titles");
  int len = titles.size();
  HSSFCellStyle headerStyle = workbook.createCellStyle(); // 标题样式
  headerStyle.setAlignment(HorizontalAlignment.CENTER);;
  headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);;
  HSSFFont headerFont = workbook.createFont(); // 标题字体
  headerFont.setBold(true);
  headerFont.setFontHeightInPoints((short) 11);
  headerStyle.setFont(headerFont);
  short width = 20, height = 25 * 20;
  sheet.setDefaultColumnWidth(width);
  row = sheet.createRow(0);
  for (int i = 0; i < len; i++) { // 设置标题
  String title = titles.get(i);
  cell = row.createCell(i);
  cell.setCellStyle(headerStyle);
  cell.setCellValue(title);
  }
  sheet.getRow(0).setHeight(height);

  HSSFCellStyle contentStyle = workbook.createCellStyle(); // 内容样式
  contentStyle.setAlignment(HorizontalAlignment.CENTER);
  HSSFDataFormat format= workbook.createDataFormat();
  contentStyle.setDataFormat(format.getFormat("yyyy-mm-dd HH:MM:SS"));
  HSSFFont contentFont = workbook.createFont(); // 标题字体
  contentFont.setFontHeightInPoints((short) 11);
  contentStyle.setFont(contentFont);
  List<Map<Integer, Object>> listMap = (List<Map<Integer, Object>>) model.get("listMap");
  int varCount = listMap.size();
  for (int i = 0; i < varCount; i++) {
    Map<Integer, Object> uArea = listMap.get(i);
    row = sheet.createRow(i+1);
    for(int j=0;j<len;j++){
      cell = row.createCell(j);
      cell.setCellStyle(contentStyle);
      if(j==len-3||j==len-5){
        cell.setCellValue((uArea.get(j)!=null?(Date)uArea.get(j):new Date(1900-01-01)));
      }else{
        cell.setCellValue((String)(uArea.get(j)!=null?uArea.get(j):""));
      }
    }
  }
}
/**
* 按照参数format的格式,日期转字符串
* @param date
* @param format
* @return
*/
public String dateToStr(Date date,String format){
    if(date!=null){
      SimpleDateFormat sdf = new SimpleDateFormat(format);
      return sdf.format(date);
    }else{
      return "";
    }
  }
}

posted @ 2017-10-19 13:58  被爱的都有恃无恐  阅读(416)  评论(0编辑  收藏  举报