结合struts2实现的通用导出excel实现详细介绍

step1

package @@.bcp.report.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
  * @date: 2012-4-28
 * @time: 16:38:06
 * @desc:导出报表数据参数配置类
 */
public class ReportConfig {
 /* 上行报表查询参数配置 */
 public static final String reportNameAccept = "上行短信查询";// 报表名称
 public static final String reportHeadAccept = null;// 报表头
 public static final String reportTailAccept = null;// 报表尾

 // 设置报表字段名称
 public static HashMap<String,HashMap<String,String>> getRecordName() {
  /* 存放所有报表对象 */
  HashMap<String,HashMap<String,String>>  allRecordName = new HashMap<String,HashMap<String,String>> ();

  /* 1.上行报表 */
  /* 存放上行报表字段名称 */
  HashMap acceptReport = new HashMap();
  acceptReport.put("业务登记号","regId");
  acceptReport.put("sp业务号","operId");
  acceptReport.put("手机号码","phoneId");
  acceptReport.put("短信内容","reContent");
  acceptReport.put("状态","flag");
  acceptReport.put("时间","reTime");
  /* 存放上行报表字段对象acceptReport到allRecordName中 */
  allRecordName.put("Accept", acceptReport);

  
  
  return allRecordName;
 }

 
 
}

 

 

 

step2

package com.##bcp.report.utils;

import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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.HSSFFooter;
import org.apache.poi.hssf.usermodel.HSSFHeader;
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.hssf.util.CellRangeAddress;
import org.apache.struts2.ServletActionContext;

/**
 * * @date: 2012-4-27
 * @time: 16:38:06
 * @desc: 导出excel pdf 功能实现
 */
public class ExportExcelPdf {

 /**
  * 导出报表到excel方法
  * @param reportName 报表名称
  * @param reportHead 报表头
  * @param reportTail 报表尾
  * @param dataList 需要的数据集
  * @param columnName 表头显示字段名称  
  * @return
  */
 
 public String exportExcelReport(String reportName,String reportHead,String reportTail,List dataList,HashMap columnName) {
  //增加表头显示字段名称    
  dataList.add(0, columnName);
  
  if (dataList.size() > 0 && !dataList.isEmpty()) {
   if (!dataList.isEmpty() && dataList.size() > 0) {
    List<List> excelData = this.getExportData(dataList);
    List displayNames = excelData.get(0);
    List filldataList = null;
    if (excelData.remove(displayNames)) {
     filldataList = excelData;
    }

    // filldataList:为要填充的数据 displayNames要显示的title
    HSSFWorkbook workbook = null;
    try {
     workbook = exportExcel(reportHead, reportTail, reportName,
       filldataList, displayNames);
    } catch (Exception e) {
     e.printStackTrace();
    }// 绑定excel与数据
    HttpServletResponse response = ServletActionContext
      .getResponse();
    if (workbook != null) {
     // 打印导出excel
     this.printExcel(workbook, response,
       getExportFileName(".xls"));
    }

   }
  }
  return null;
 }

 /**
  *
  * 获取导出的数据
  */
 private List<List> getExportData(List<HashMap> dataList) {
  List<List> result = new ArrayList();
  List displayNames = new ArrayList();
  if (!dataList.isEmpty() && dataList.size() > 0) {
   Map map = dataList.get(0);
   for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    displayNames.add(key);
   }
   result.add(displayNames);
   for (int i = 1; i < dataList.size(); i++) {
    Map data = dataList.get(i);
    List<String> filldataList = new ArrayList();
    for (Iterator iter = data.entrySet().iterator(); iter.hasNext();) {
     Map.Entry entry = (Map.Entry) iter.next();
     Object value = entry.getValue();
     if (value == null) {
      value = "";
     }
     filldataList.add(value.toString());
    }
    result.add(filldataList);
   }
  }
  return result;
 }

 /**
  * 打印导出的Excel
  */
 private void printExcel(HSSFWorkbook workbook,
   HttpServletResponse response, String excelFileName) {
  try {
   OutputStream out = response.getOutputStream();
   response.reset();
   response.setHeader("Content-disposition", "attachment;filename="
     + excelFileName);
   // 设置响应文档类型为excel
   response.setContentType("application/msexcel");
   response.setCharacterEncoding("UTF-8");
   workbook.write(out);
   out.flush();
   out.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 /**
  * 写入输入流中
  */
 public HSSFWorkbook exportExcel(String reportHead, String reportTail,
   String reprotName, List<List> filldataList, List displayNames)
   throws Exception {
  HSSFWorkbook workbook = null;

  // 这里的数据即时你要从后台取得的数据

  // 创建工作簿实例
  workbook = new HSSFWorkbook();
  // 创建工作表实例
  HSSFSheet sheet = workbook.createSheet("TscExcel");
  // 设置列宽
  this.setSheetColumnWidth(displayNames.size(), sheet);
  // 获取样式
  HSSFCellStyle style = this.createTitleStyle(workbook);

  // 设置页眉
  HSSFHeader header = sheet.getHeader();
  HSSFHeader.fontSize((short) 16);
  header.setCenter(reportHead);

  // 设置报表名称
  HSSFRow rowReportName = sheet.createRow((short) 0);// 建立新行
  HSSFFont boldFont = workbook.createFont();
  boldFont.setFontHeight((short) 400);
  HSSFCellStyle styleT = workbook.createCellStyle();
  styleT.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  styleT.setFont(boldFont);
  this.createCell(rowReportName, 0, styleT, HSSFCell.CELL_TYPE_STRING,
    reprotName);
  // 合并单元格
  sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, displayNames.size()));

  // 1. 创建第一行:标题,
  HSSFRow row = sheet.createRow((short) 1);// 建立新行
  for (int i = 0; i < displayNames.size(); i++) {
   this.createCell(row, i, style, HSSFCell.CELL_TYPE_STRING,
     displayNames.get(i));
  }

  // 2. 给excel填充数据
  int i = 0;
  for (List<List> tableBody : filldataList) {
   HSSFRow rowBody = sheet.createRow((short) (i + 2));// 建立新行
   for (int j = 0; j < tableBody.size(); j++) {
    this.createCell(rowBody, j, style, HSSFCell.CELL_TYPE_STRING,
      tableBody.get(j));
   }
   i++;
  }

  // 设置页脚
  HSSFFooter footer = sheet.getFooter();
  HSSFFooter.fontSize((short) 16);
  footer.setCenter(reportTail);

  return workbook;
 }

 /**
  * 生成导出文件的名称 :按导出时间生成文件名称
  */
 private String getExportFileName(String fix) {
  Date date = new Date();
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  return dateFormat.format(date) + fix;
 }

 /**
  * 创建Excel单元格
  */
 private void createCell(HSSFRow row, int column, HSSFCellStyle style,
   int cellType, Object value) {
  HSSFCell cell = row.createCell((short) column);
  if (style != null) {
   cell.setCellStyle(style);
  }
  switch (cellType) {
  case HSSFCell.CELL_TYPE_BLANK: {
  }
   break;
  case HSSFCell.CELL_TYPE_STRING: {
   cell.setCellValue(value.toString() + "");
  }
   break;
  case HSSFCell.CELL_TYPE_NUMERIC: {
   cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
   cell.setCellValue(Double.parseDouble(value.toString()));
  }
   break;
  default:
   break;
  }
 }

 /**
  * 设置列宽
  */
 private void setSheetColumnWidth(int titles_CN, HSSFSheet sheet) {
  // 根据你数据里面的记录有多少列,就设置多少列
  for (int i = 0; i < titles_CN; i++) {
   sheet.setColumnWidth((short) i, (short) 3000);
  }

 }

 /**
  * 设置excel的title样式
  */
 private HSSFCellStyle createTitleStyle(HSSFWorkbook wb) {
  HSSFFont boldFont = wb.createFont();
  boldFont.setFontHeight((short) 200);
  HSSFCellStyle style = wb.createCellStyle();
  style.setFont(boldFont);
  style.setDataFormat(HSSFDataFormat.getBuiltinFormat("###,##0.00"));
  return style;
 }
}

 

step3在action中编写如下方法

 /* 导出报表 */

 @SuppressWarnings("all")
 public String exportAcceptReport() {

  HashMap acceptParam = new HashMap();
  acceptParam.put("phoneId", getEntity().getPhoneId());
  acceptParam.put("reBeginTime", getEntity().getReBeginTime());
  acceptParam.put("reEndTime", getEntity().getReEndTime());
  acceptParam.put("organiseCode", getLoginer().getOrganise()
    .getOrganiseCode());
  
  //1.获取数据源
  List dataList = tmcIntspAcceptService
    .getTmcInspAcceptList(acceptParam);
  //2.把TmcIntspAcceptInfo对象专为HashMap对象
  List savedata=new ArrayList();
  for(int i=0;i<dataList.size();i++){
   TmcIntspAcceptInfo tmi=(TmcIntspAcceptInfo) dataList.get(i);
   HashMap map=new LinkedHashMap();
   map.put("regId",tmi.getRegId());
   map.put("operId",tmi.getOperId());
   map.put("phoneId",tmi.getPhoneId());
   map.put("reContent",tmi.getReContent());
   map.put("flag",tmi.getFlag());
   map.put("reTime",tmi.getReTime());
   savedata.add(map);
  }
  //3.传递参数导出报表
  return new ExportExcelPdf().exportExcelReport(
    ReportConfig.reportNameAccept, ReportConfig.reportHeadAccept,
    ReportConfig.reportTailAccept, savedata,ReportConfig.getRecordName().get("Accept"));
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值