JAVA語言工具類封裝-基於poi的excel匯出功能
http://blog.csdn.net/caisini_vc/article/details/52387842
excel匯出基本上是必備的功能,如果條目超過65535 是csv,否則xls。
一句話使用:
- OrderInfoExcelBuilder.getInstance().createExcel(OrderType.MAIN_ORDER, orderInfoDetailList, response);
結構比較簡單,抽象類+子類實現。
先看下抽象類:
-
<pre name="code"class="java">package com.qunar.flight.ib2b.trade.center.util.excel;
- import java.io.OutputStream;
- import java.net.URLEncoder;
- import java.util.List;
- import javax.mail.internet.MimeUtility;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.poi.ss.usermodel.Row;
-
import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.xssf.usermodel.XSSFCellStyle;
- import org.apache.poi.xssf.usermodel.XSSFDataFormat;
- import org.apache.poi.xssf.usermodel.XSSFSheet;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
import com.google.common.base.Throwables;
- import com.qunar.flight.ib2b.trade.center.enums.OrderType;
- /**
- * Excel檔案匯出 定義類
- *
- * @author xiongxo.chen
- */
- publicabstractclass AbstractExcelBuilder<T> {
- privatestaticfinal Logger logger = LoggerFactory.getLogger(AbstractExcelBuilder.class);
- publicvoid createExcel(final OrderType type, List<T> datas, HttpServletResponse response) {
- if (0 == datas.size()) {
- return;
- }
- XSSFWorkbook workBook = new XSSFWorkbook();
- OutputStream os;
- try {
- Sheet sheet = createSheet(workBook);
- if (sheet == null)
- return;
- // 寫表頭
- writeHead(type, sheet, datas);
- // 寫內容
- XSSFCellStyle cellStyle = workBook.createCellStyle();
- XSSFDataFormat format = workBook.createDataFormat();
- writeBody(type, cellStyle, format, sheet, datas);
- response.setContentType("application/vnd.ms-excel");
- response.setHeader("Content-disposition", "attachment;filename=OrderDetail.xls");
- os = response.getOutputStream();
- workBook.write(response.getOutputStream());
- os.flush();
- } catch (Throwable t) {
- logger.error("匯出 excel出錯!", t);
- Throwables.propagate(t);
- }
- }
- /**
- * 寫表頭
- */
- protectedvoid writeHead(OrderType type, Sheet sheet, List<T> datas) {
- String[] head = getHead(type, datas.get(0));
- Row row = sheet.createRow(0);
- for (int i = 0; i < head.length; i++) {
- row.createCell(i).setCellValue(head[i]);
- sheet.setColumnWidth(i, head[i].getBytes().length * 256);
- }
- }
- /**
- * 寫表體
- */
- protectedabstractvoid writeBody(OrderType type, XSSFCellStyle cellStyle, XSSFDataFormat format, Sheet sheet, List<T> datas)
- throws Exception;
- /**
- * 表頭內容
- */
- protectedabstract String[] getHead(OrderType type, T datas);
- /**
- * Sheet頁名稱
- */
- protected String getSheetName() {
- return"xo";
- }
- /**
- * 來個Sheet
- */
- private XSSFSheet createSheet(XSSFWorkbook workBook) {
- if (StringUtils.isBlank(getSheetName())) {
- return workBook.createSheet();
- } else {
- return workBook.createSheet(getSheetName());
- }
- }
- /**
- * 設定下載檔案中檔案的名稱
- */
- publicstatic String encodeFilename(String filename) {
- /**
- * 獲取客戶端瀏覽器和作業系統資訊 在IE瀏覽器中得到的是:User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; Alexa
- * Toolbar) 在Firefox中得到的是:User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.10) Gecko/20050717
- * Firefox/1.0.6
- */
- try {
- // 先檢查IE瀏覽器的
- String newFileName = URLEncoder.encode(filename, "UTF-8");
- newFileName = StringUtils.replace(newFileName, "+", "%20");
- if (newFileName.length() > 150) {
- newFileName = new String(filename.getBytes("GB2312"), "ISO8859-1");
- newFileName = StringUtils.replace(newFileName, " ", "%20");
- }
- if (StringUtils.isBlank(newFileName)) {
- // 若不是IE,則檢查Firxbox
- return MimeUtility.encodeText(filename, "UTF-8", "B");
- }
- return filename;
- } catch (Exception ex) {
- return filename;
- }
- }
- }
子類實現: 將訂單資訊傳入寫內容到row疊加就好
- package com.qunar.flight.ib2b.trade.center.util.excel;
- import java.util.List;
- import javax.annotation.Resource;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.xssf.usermodel.XSSFCellStyle;
- import org.apache.poi.xssf.usermodel.XSSFDataFormat;
- import com.qunar.flight.ib2b.trade.center.bean.OrderInfoDetail;
- import com.qunar.flight.ib2b.trade.center.enums.OrderType;
- import com.qunar.flight.ib2b.trade.center.persistence.dao.TOrderStatusChangeLogMapper;
- /**
- * 訂單資訊匯出構建器
- *
- * @author xiongxo.chen
- *
- */
- publicclass OrderInfoExcelBuilder extends AbstractExcelBuilder<OrderInfoDetail> {
- privatestatic OrderInfoExcelBuilder builder;
- @Resource
- TOrderStatusChangeLogMapper tOrderStatusChangeLogMapper;
- private OrderInfoExcelBuilder() {
- }
- /**
- * 單例
- */
- publicsynchronizedstatic OrderInfoExcelBuilder getInstance() {
- if (null == builder)
- builder = new OrderInfoExcelBuilder();
-
相關推薦
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