1. 程式人生 > >JAVA語言工具類封裝-基於poi的excel匯出功能

JAVA語言工具類封裝-基於poi的excel匯出功能

http://blog.csdn.net/caisini_vc/article/details/52387842

excel匯出基本上是必備的功能,如果條目超過65535  是csv,否則xls。

一句話使用:

  1. OrderInfoExcelBuilder.getInstance().createExcel(OrderType.MAIN_ORDER, orderInfoDetailList, response);  

結構比較簡單,抽象類+子類實現。
先看下抽象類:

  1. <pre name="code"class="java">package com.qunar.flight.ib2b.trade.center.util.excel;  
  2. import java.io.OutputStream;  
  3. import java.net.URLEncoder;  
  4. import java.util.List;  
  5. import javax.mail.internet.MimeUtility;  
  6. import javax.servlet.http.HttpServletResponse;  
  7. import org.apache.commons.lang3.StringUtils;  
  8. import org.apache.poi.ss.usermodel.Row;  
  9. import org.apache.poi.ss.usermodel.Sheet;  
  10. import org.apache.poi.xssf.usermodel.XSSFCellStyle;  
  11. import org.apache.poi.xssf.usermodel.XSSFDataFormat;  
  12. import org.apache.poi.xssf.usermodel.XSSFSheet;  
  13. import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
  14. import org.slf4j.Logger;  
  15. import org.slf4j.LoggerFactory;  
  16. import com.google.common.base.Throwables;  
  17. import com.qunar.flight.ib2b.trade.center.enums.OrderType;  
  18. /** 
  19.  * Excel檔案匯出 定義類 
  20.  *  
  21.  * @author xiongxo.chen 
  22.  */
  23. publicabstractclass AbstractExcelBuilder<T> {  
  24.     privatestaticfinal Logger logger = LoggerFactory.getLogger(AbstractExcelBuilder.class);  
  25.     publicvoid createExcel(final OrderType type, List<T> datas, HttpServletResponse response) {  
  26.         if (0 == datas.size()) {  
  27.             return;  
  28.         }  
  29.         XSSFWorkbook workBook = new XSSFWorkbook();  
  30.         OutputStream os;  
  31.         try {  
  32.             Sheet sheet = createSheet(workBook);  
  33.             if (sheet == null)  
  34.                 return;  
  35.             // 寫表頭
  36.             writeHead(type, sheet, datas);  
  37.             // 寫內容
  38.             XSSFCellStyle cellStyle = workBook.createCellStyle();  
  39.             XSSFDataFormat format = workBook.createDataFormat();  
  40.             writeBody(type, cellStyle, format, sheet, datas);  
  41.             response.setContentType("application/vnd.ms-excel");  
  42.             response.setHeader("Content-disposition""attachment;filename=OrderDetail.xls");  
  43.             os = response.getOutputStream();  
  44.             workBook.write(response.getOutputStream());  
  45.             os.flush();  
  46.         } catch (Throwable t) {  
  47.             logger.error("匯出 excel出錯!", t);  
  48.             Throwables.propagate(t);  
  49.         }  
  50.     }  
  51.     /** 
  52.      * 寫表頭 
  53.      */
  54.     protectedvoid writeHead(OrderType type, Sheet sheet, List<T> datas) {  
  55.         String[] head = getHead(type, datas.get(0));  
  56.         Row row = sheet.createRow(0);  
  57.         for (int i = 0; i < head.length; i++) {  
  58.             row.createCell(i).setCellValue(head[i]);  
  59.             sheet.setColumnWidth(i, head[i].getBytes().length * 256);  
  60.         }  
  61.     }  
  62.     /** 
  63.      * 寫表體 
  64.      */
  65.     protectedabstractvoid writeBody(OrderType type, XSSFCellStyle cellStyle, XSSFDataFormat format, Sheet sheet, List<T> datas)  
  66.             throws Exception;  
  67.     /** 
  68.      * 表頭內容 
  69.      */
  70.     protectedabstract String[] getHead(OrderType type, T datas);  
  71.     /** 
  72.      * Sheet頁名稱 
  73.      */
  74.     protected String getSheetName() {  
  75.         return"xo";  
  76.     }  
  77.     /** 
  78.      * 來個Sheet 
  79.      */
  80.     private XSSFSheet createSheet(XSSFWorkbook workBook) {  
  81.         if (StringUtils.isBlank(getSheetName())) {  
  82.             return workBook.createSheet();  
  83.         } else {  
  84.             return workBook.createSheet(getSheetName());  
  85.         }  
  86.     }  
  87.     /** 
  88.      * 設定下載檔案中檔案的名稱 
  89.      */
  90.     publicstatic String encodeFilename(String filename) {  
  91.         /** 
  92.          * 獲取客戶端瀏覽器和作業系統資訊 在IE瀏覽器中得到的是:User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; Alexa 
  93.          * Toolbar) 在Firefox中得到的是:User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.10) Gecko/20050717 
  94.          * Firefox/1.0.6 
  95.          */
  96.         try {  
  97.             // 先檢查IE瀏覽器的
  98.             String newFileName = URLEncoder.encode(filename, "UTF-8");  
  99.             newFileName = StringUtils.replace(newFileName, "+""%20");  
  100.             if (newFileName.length() > 150) {  
  101.                 newFileName = new String(filename.getBytes("GB2312"), "ISO8859-1");  
  102.                 newFileName = StringUtils.replace(newFileName, " ""%20");  
  103.             }  
  104.             if (StringUtils.isBlank(newFileName)) {  
  105.                 // 若不是IE,則檢查Firxbox
  106.                 return MimeUtility.encodeText(filename, "UTF-8""B");  
  107.             }  
  108.             return filename;  
  109.         } catch (Exception ex) {  
  110.             return filename;  
  111.         }  
  112.     }  
  113. }  

子類實現: 將訂單資訊傳入寫內容到row疊加就好

  1. package com.qunar.flight.ib2b.trade.center.util.excel;  
  2. import java.util.List;  
  3. import javax.annotation.Resource;  
  4. import org.apache.poi.ss.usermodel.Cell;  
  5. import org.apache.poi.ss.usermodel.Row;  
  6. import org.apache.poi.ss.usermodel.Sheet;  
  7. import org.apache.poi.xssf.usermodel.XSSFCellStyle;  
  8. import org.apache.poi.xssf.usermodel.XSSFDataFormat;  
  9. import com.qunar.flight.ib2b.trade.center.bean.OrderInfoDetail;  
  10. import com.qunar.flight.ib2b.trade.center.enums.OrderType;  
  11. import com.qunar.flight.ib2b.trade.center.persistence.dao.TOrderStatusChangeLogMapper;  
  12. /** 
  13.  * 訂單資訊匯出構建器 
  14.  *  
  15.  * @author xiongxo.chen 
  16.  *  
  17.  */
  18. publicclass OrderInfoExcelBuilder extends AbstractExcelBuilder<OrderInfoDetail> {  
  19.     privatestatic OrderInfoExcelBuilder builder;  
  20.     @Resource
  21.     TOrderStatusChangeLogMapper tOrderStatusChangeLogMapper;  
  22.     private OrderInfoExcelBuilder() {  
  23.     }  
  24.     /** 
  25.      * 單例 
  26.      */
  27.     publicsynchronizedstatic OrderInfoExcelBuilder getInstance() {  
  28.         if (null == builder)  
  29.             builder = new OrderInfoExcelBuilder();  
  30.         

    相關推薦

    JAVA語言工具封裝-基於poi的excel匯出功能

    http://blog.csdn.net/caisini_vc/article/details/52387842 excel匯出基本上是必備的功能,如果條目超過65535  是csv,否則xls。 一句話使用: OrderInfoExcelBuilder.g

    JAVA DateUtil 工具封裝(轉)

    原文連結 https://blog.csdn.net/wangpeng047/article/details/8295623    作者三次整理後的程式碼 下載連結   https://www.lanzous.com/i2pzpda github連結:

    Java常用工具封裝——Base64 編碼和解碼

    Base64 編碼和解碼工具類,供參考。 import java.io.*; /** * Base64 編碼和解碼。 * * @author jiangshuai * @date 2016年10月03日 */ public class Base64 { p

    Java常用工具封裝——String操作工具

    專案中經常需要用到String的一些操作,結合看到的一些前人的工具類抽取,編寫了如下針對String的常用操作的工具類,供大家參考。 package com.mkyong.common; import java.util.ArrayList; import

    Java常用工具封裝——連線資料庫的工具

    資料庫操作工具類,供大家參考。 package com.itjh.javaUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement

    通用JS工具封裝——網路資料請求功能、獲取服務端介面 url、引數功能

    程式碼片段 'use strict'; var conf = { serverHost = '' }; var _mm = { //網路請求功能 request : function(param){ var _this = this;

    MongoDB初探及JAVA工具封裝

    MongoDB 搭建及JAVA工具類封裝 MongoDB 簡介     MongoDB 旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。MongoDB 將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB

    java 樹形物件工具封裝

    基礎的樹形物件:import java.io.Serializable; import java.util.List; /** * treegrid樹形表格基礎物件,後續的該型別的物件均繼承該物件 * */ public class BaseTreeGrid imp

    java的HttpURLConnection封裝好的GET/POST請求工具

    import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;

    國際化語言工具ResourceBundleUtils .java

    ResourceBundleUtils .java import java.util.HashMap; import java.util.Locale; import java.util.Map;

    Redis操作List工具封裝Java Redis List命令封裝

    Redis列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素導列表的頭部(左邊)或者尾部(右邊) 一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。 下載 Java程式碼   /*********

    Poi實現Excel匯出工具封裝

    工具類程式碼PoiExcelExport如下:package com.myssm.util.poi; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo

    Elasticsearch 資料匯入匯出 Java 實現工具

    Elasticsearch 資料匯入匯出 Java 實現 最近學了elasticsearch 對它也不是非常的熟悉,它好像沒有像 mongodb 有mongodump 這樣的工具方便。 雖然也有一些別人做的外掛工具。但嫌麻煩,所以整理了網上一些大神寫

    jdbc工具封裝

    ram ive while lock ins connect cat stack sys 封裝 package util; import java.sql.Connection; import java.sql.DriverManager; import

    Java日期工具

    multipl efault 簡體中文 類型 分鐘 sub dateutil 表示 exception public class DateUtil { //默認顯示日期的格式 public static final String DATAFORMAT_ST

    Android經常使用工具封裝---SharedPreferencesUtil

    保存數據 n) ng- -a 操作 ext.get 名稱 simple tint SharedPreferences經常使用於保存一些簡單的數據,如記錄用戶操作的配置等,使用簡單。 public class SharedPreferencesUtil { //存

    Android Gson解析json工具封裝

    pac spa google lis object sonar andro on() div package com.springSecurity.gson; import java.util.ArrayList; import java.util.List

    java Collections 工具

    ofb read int 交換 個數 frequency sta alt 工具 1.reverse反轉2.shuffle隨機排序3.sort自然排序4.sort指定比較器排序5.swap將下標位置為x和y的元素進行交換6.max 最大值7.min 最小值8.frequenc

    開源Java時間工具Joda-Time體驗

    java import org.joda.time.*; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.junit.Test; import java

    Java工具:判斷對象是否為空或null

    sar 判斷 ins == span urn lean color style 1 import java.lang.reflect.Array; 2 import java.util.Collection; 3 import java.util.Map; 4