1. 程式人生 > >結合struts2實現的通用匯出excel實現詳細介紹

結合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"));
 }

相關推薦

結合struts2實現通用匯出excel實現詳細介紹

step1 package @@.bcp.report.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /**   * @date: 2012-4-28

通過註解實現通用匯出Excel

Javaweb開發中資料的匯入匯出很常見,每次我們都需要寫很多程式碼,所以我就在想能不能寫一些通用的方法,之前已經在網上 整理過一些通用的方法,最近在網上看到一位牛人封裝的更加簡介,自己拿過來整理了一下

java jxl實現通用匯出excel

包:jxl-2.6.12.jar、commons-beanutils-1.9.3.jar /** * @Description: TODO 通用模板 * @Title: writeToFile * @return void * @parm list 資料集合 * @parm nameLis

JAVA匯出EXCEL實現

JAVA匯出EXCEL實現的多種方式 java匯出Excel的方法有多種,最為常用的方式就是使用第三方jar包,目前POI和JXL是最常用的二方包了,也推薦使用這兩種。 POI實現 POI這裡不詳細解釋,可參考徐老師發的部落格:http://blog.csdn.net/evangel_z/a

Spring結合JPA設計通用的BaseDao實現完全的面向介面程式設計

 這是我們團隊小專案中設計的通用BaseDao: public interface BaseDao<T> { /** * 新增實體類 * @param t * @return */ public T ad

JeeSite中實現匯入匯出Excel步驟

閒話 少說  直接 上 程式碼 springMVC專案  JSP頁面程式碼如下 </shiro:hasPermission> <shiro:hasPermission name="echarts:memPutInto:import">

POI 匯出Excel實現合併單元格以及列自適應寬度

目錄 參考推薦: POI 匯出Excel 1. 合併單元格 POI是apache提供的一個讀寫Excel文件的開源元件,在操作excel時常要合併單元格,合併單元格的方法是: public CellRang

SpringBoot整合POI實現檔案匯出Excel,匯入Excel更新Mysql資料庫資料

        上傳功能 轉載自https://blog.csdn.net/xyy1028/article/details/79054749原創寫的非常好,但是每個人都有自己的業務邏輯;所以在研究了一點之後,打上註釋,方便新手理解,同時也方便自己記憶;專案目錄applicat

Java利用POI實現匯入匯出Excel表格示例程式碼

介紹Jakarta POI 是一套用於訪問微軟格式文件的Java API。Jakarta POI有很多元件組成,其中有用於操作Excel格式檔案的HSSF和用於操作Word的HWPF,在各種元件中目前只有用於操作Excel的HSSF相對成熟。官方主頁http://poi.ap

C#實現匯入匯出Excel資料的兩種方法詳解

這篇文章主要為大家詳細介紹了C#匯入匯出Excel資料的兩種方法,具有一定的參考價值,感興趣的小夥伴們可以參考一下本文為大家分享了C#匯入匯出Excel資料的具體程式碼,供大家參考,具體內容如下注:對於實體類物件最好新建一個並且繼承原有實體類,這樣可以將型別進行修改;方法一:

POI實現java匯出Excel功能

import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel

vue專案實現表格匯出excel表格

第一:安裝依賴 npm install -S file-saver xlsx npm install -D script-loader 第二:在目錄裡新建excel資料夾 在excel資料夾裡新建兩個js檔案(Blob.js和Export2Excel.js) Blob.js

MFC對匯出Excel詳細講解

MFC讀寫Excel詳細步驟 說明 : 程式碼編譯可能會編譯不通過,主要是看註釋說明. 準備工作: 開啟開發環境VC或VS新建一個基於對話方塊的簡單工程; 通過類嚮導新增類-->型別庫中的MFC類 開啟建立類對話方塊       &nb

POI 通用匯出Excel(.xls,.xlsx)

POI操作EXCEL物件 HSSF:操作Excel 97(.xls)格式 XSSF:操作Excel 2007 OOXML (.xlsx)格式,操作EXCEL記憶體佔用高於HSSF SXSSF:從POI3.8 beta3開始支援,基於XSSF,低記憶體

struts2匯入、匯出 excel

前臺: //前臺頁面 <form action="/service/wxExportTool/inputExce.action" method="post" enctype="multipart/form-data" id="form2">

Struts2之Validator驗證框架的詳細介紹

Struts2中提供了資料校驗驗證資料例如驗證郵件、數字等。驗證方式有3種: 一是通過validate()方法, 二是通過Xml, 三是使用註解方式。 一、初始化 首先定義一個User類 1 2 3 4 5 6

phpExcel實現Excel資料的匯入匯出(全步驟詳細解析)

一,Excel檔案上傳,返回陣列 (需下載PHPExcel類檔案,引入到專案類庫裡)   1.上傳新增excel  //接收前臺檔案, public function addExcel() { //接收前臺檔案 $e

poi3.17 匯出Excel通用模板及實現流程

<div onclick="daochu()"> 匯出 </div>function daochu(){ var url = "../biz/sch/student/exportTest"; url = encodeURI(url)

PHP 實現大資料(30w量級)表格匯出匯出excel) 提高效率,減少記憶體消耗,終極解決方案

使用php做專案開發的同學,一定都會有過使用php進行excel表格匯出的經歷,當匯出少量資料還好,一旦資料量級達到5w、 10w、20w甚至30以上的時候就會面臨同樣的問題: 1、匯出時間變得很慢,少則1分鐘,多則好幾分鐘,資料量一旦上來,還可能面臨導不出來的困窘(這種匯出效率正常人都會受

php實現匯出excel功能

MySQL篩選出要匯出資料的列表,欄位就是excel中要顯示的列,比如id、name、address等 設定匯出excel的表名,一般是名稱加時間的格式,php程式碼如下: $field = 'a.`did`,a.addtime,a.`phone`,a.`system`,a.m