1. 程式人生 > >poi3.17 匯出Excel通用模板及實現流程

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


<div onclick="daochu()">

	匯出

</div>
function daochu(){
	var url = "../biz/sch/student/exportTest";  
    url = encodeURI(url);    
    location.href = url;   
}
	@ResponseBody
	@GetMapping("/exportTest")
	public void exportTest(HttpServletRequest  request,HttpServletResponse response){
		String fileName = "匯出";  
        response.reset();   
		response.setContentType("application/octet-stream;charset=utf-8");  
		try {
			response.setHeader("Content-Disposition", "attachment;filename="  
			        + new String(fileName.getBytes(),"iso-8859-1") + ".xls");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} 
         
         
		PaperMgrExcel prsSch = new PaperMgrExcel();
		JSONObject param = new JSONObject();
		param.put("paperId", 111);
		param.put("paperName", "ceshi1");
		param.put("xkId", 1);
		JSONArray jarr = null;
		try {
			prsSch.exportExcel(request, response, jarr);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
package com.moofen.cube.service.biz.sch;

import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.moofen.core.entity.ExportExcelEntity;
import com.moofen.core.util.excel.impl.ExportExcelBase;

public class PaperMgrExcel extends ExportExcelBase {

	/**
	 * 
	 * @Title: exportExcel @Description: 匯出Excel @param param @return 引數 @return
	 * void @throws
	 */
	public void exportExcel(HttpServletRequest request, HttpServletResponse response, JSONArray jarr) throws Exception {
		OutputStream os = null;
		try {

			// 構建sheet名
			String sheetName = "試卷結構匯出";

			// 構建標題
			String sheetTitle = "試卷結構匯出";

			// 構建列名
			ArrayList<String> sheetFieldsName = new ArrayList<String>();
			sheetFieldsName.add("姓名");
			sheetFieldsName.add("學號");
			sheetFieldsName.add("英文");

			// 構建資料
			JSONArray jaDatas = new JSONArray();
			for (int i = 0; i < 3; i++) {
				ArrayList<Object> arr = new ArrayList<Object>();
				JSONObject jo = new JSONObject();
				arr.add("張三");
				arr.add(123);
				arr.add("Test");
				jo.put("data", arr);
				jaDatas.add(jo);
			}

			// 設定列寬
			ArrayList<Integer> sheetColWidth = new ArrayList<Integer>();
			sheetColWidth.add(0, 2000);
			sheetColWidth.add(1, 3000);
			sheetColWidth.add(2, 4000);

			// title的高度
			int sheetTitleHeight = 500;

			// 構建表單內容實體
			ExportExcelEntity expoEntity = new ExportExcelEntity(sheetName, sheetTitle, sheetFieldsName, jaDatas,
					sheetColWidth, sheetTitleHeight);

			List<ExportExcelEntity> sheets = new ArrayList<ExportExcelEntity>();
			sheets.add(expoEntity);
			setSheets(sheets);
			os = response.getOutputStream();

			// 如果要自定義寫入表單資料呼叫這個方法並複寫父類 writeExcelSheetSelf( ExportExcelEntity
			// expoEntity)方法
			// writeExcel(os,true);

			// 直接呼叫父類模板方法
			writeExcel(os);

		} catch (Exception e) {
			throw new Exception("Export Excel failed, beacause" + e.getMessage());
		}
	}

}

package com.moofen.core.entity;

import java.util.ArrayList;

import com.alibaba.fastjson.JSONArray;

public class ExportExcelEntity {

	// sheet名稱
	private String sheetName;

	// sheet的title
	private String sheetTitle;

	// sheet的列名
	private ArrayList<String> sheetFieldsName;

	/**
	 * sheet的資料<br/>
	 * 
	 */
	private JSONArray sheetData;

	// 設定列寬
	private ArrayList<Integer> sheetColWidth;

	// title的高度
	private int sheetTitleHeight = 500;

	public ExportExcelEntity(String sheetName, String sheetTitle, ArrayList<String> sheetFieldsName,
			JSONArray sheetData) {
		super();
		this.sheetName = sheetName;
		this.sheetTitle = sheetTitle;
		this.sheetFieldsName = sheetFieldsName;
		this.sheetData = sheetData;
	}

	public ExportExcelEntity(String sheetName, String sheetTitle, ArrayList<String> sheetFieldsName,
			JSONArray sheetData, ArrayList<Integer> sheetColWidth, int sheetTitleHeight) {
		super();
		this.sheetName = sheetName;
		this.sheetTitle = sheetTitle;
		this.sheetFieldsName = sheetFieldsName;
		this.sheetData = sheetData;
		this.sheetColWidth = sheetColWidth;
		this.sheetTitleHeight = sheetTitleHeight;
	}

	public String getSheetName() {
		return sheetName;
	}

	public void setSheetName(String sheetName) {
		this.sheetName = sheetName;
	}

	public String getSheetTitle() {
		return sheetTitle;
	}

	public void setSheetTitle(String sheetTitle) {
		this.sheetTitle = sheetTitle;
	}

	public ArrayList<String> getSheetFieldsName() {
		return sheetFieldsName;
	}

	public void setSheetFieldsName(ArrayList<String> sheetFieldsName) {
		this.sheetFieldsName = sheetFieldsName;
	}

	public JSONArray getSheetData() {
		return sheetData;
	}

	public void setSheetData(JSONArray sheetData) {
		this.sheetData = sheetData;
	}

	public ArrayList<Integer> getSheetColWidth() {
		return sheetColWidth;
	}

	public void setSheetColWidth(ArrayList<Integer> sheetColWidth) {
		this.sheetColWidth = sheetColWidth;
	}

	public int getSheetTitleHeight() {
		return sheetTitleHeight;
	}

	public void setSheetTitleHeight(int sheetTitleHeight) {
		this.sheetTitleHeight = sheetTitleHeight;
	}

}

package com.moofen.core.util.excel.impl;

import java.io.OutputStream;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.BorderStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.moofen.core.entity.ExportExcelEntity;

public class ExportExcelBase {

	// protected final Logger logger = Logger.getLogger(getClass());

	protected HSSFWorkbook wb = new HSSFWorkbook();;

	protected HSSFCellStyle styleTitle = null;

	protected HSSFCellStyle styleTitle2 = null;

	protected HSSFCellStyle cellStyle = null;

	private List<ExportExcelEntity> sheets;

	HSSFFont font = null;

	public void setStyleTitle(HSSFCellStyle styleTitle) {
		this.styleTitle = styleTitle;
	}

	// ----------------一級標題格樣式----------------------------------
	public HSSFCellStyle getStyleTitle() {

		HSSFCellStyle styleTitle = wb.createCellStyle(); // 標題樣式
		styleTitle.setAlignment(HorizontalAlignment.CENTER);
		styleTitle.setVerticalAlignment(VerticalAlignment.CENTER);
		Font ztFont = wb.createFont();
		ztFont.setItalic(false); // 設定字型為斜體字
		ztFont.setColor(Font.COLOR_NORMAL); // 設定字型顏色
		ztFont.setFontHeightInPoints((short) 18); // 將字型大小設定為18px
		ztFont.setFontName("宋體"); // 將“宋體”字型應用到當前單元格上
		ztFont.setBold(true); // 加粗
		styleTitle.setFont(ztFont);

		return styleTitle;
	}

	public void setStyleTitle2(HSSFCellStyle styleTitle2) {
		this.styleTitle2 = styleTitle2;
	}

	// ----------------二級標題格樣式----------------------------------
	public HSSFCellStyle getStyleTitle2() {

		HSSFCellStyle styleTitle2 = wb.createCellStyle(); // 表格樣式
		styleTitle2.setAlignment(HorizontalAlignment.CENTER);
		styleTitle2.setVerticalAlignment(VerticalAlignment.CENTER);
		Font ztFont2 = wb.createFont();
		ztFont2.setItalic(false); // 設定字型為斜體字
		ztFont2.setColor(Font.COLOR_NORMAL); // 設定字型顏色
		ztFont2.setFontHeightInPoints((short) 12); // 將字型大小設定為12px
		ztFont2.setFontName("宋體"); // 字型應用到當前單元格上
		ztFont2.setBold(true); // 加粗
		styleTitle2.setFont(ztFont2);

		return styleTitle2;
	}

	public void SetCellStyle(HSSFCellStyle cellStyle) {
		this.cellStyle = cellStyle;
	}

	// ----------------單元格樣式----------------------------------
	public HSSFCellStyle getCellStyle() {

		HSSFCellStyle cellStyle = wb.createCellStyle(); // 表格樣式
		cellStyle.setAlignment(HorizontalAlignment.CENTER);
		cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		cellStyle.setBorderBottom(BorderStyle.THIN); // 下邊框
		cellStyle.setBorderLeft(BorderStyle.THIN);// 左邊框
		cellStyle.setBorderTop(BorderStyle.THIN);// 上邊框
		cellStyle.setBorderRight(BorderStyle.THIN);// 右邊框
		Font cellFont = wb.createFont();
		cellFont.setItalic(false); // 設定字型為斜體字
		cellFont.setColor(Font.COLOR_NORMAL); // 設定字型顏色
		cellFont.setFontHeightInPoints((short) 10); // 將字型大小設定為12px
		cellFont.setFontName("宋體"); // 字型應用到當前單元格上
		// cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		cellStyle.setFont(cellFont);

		return cellStyle;
	}

	protected void writeExcel(OutputStream os) {
		try {
			// 建立Excel的 Workbook,對應到一個excel文件
			wb = new HSSFWorkbook();

			for (ExportExcelEntity d : this.sheets) {
				writeExcelSheet(d);
			}
			wb.write(os);
		} catch (Exception e) {
			// e.printStackTrace();

			try {
				if (os != null)
					os.close();
			} catch (Exception oe) {

			}
		}
	}

	protected void writeExcel(OutputStream os, boolean isSelf) {
		try {
			// 建立Excel的 Workbook,對應到一個excel文件
			wb = new HSSFWorkbook();

			for (ExportExcelEntity d : this.sheets) {
				if (isSelf) {
					writeExcelSheetSelf(d);
				} else {
					writeExcelSheet(d);
				}
			}
			wb.write(os);
		} catch (Exception e) {
			// e.printStackTrace();

			try {
				if (os != null)
					os.close();
			} catch (Exception oe) {

			}
		}
	}

	protected void writeExcelSheetSelf(ExportExcelEntity expoEntity) {

	}

	/**
	 * 建立excel Sheet
	 * 
	 * @param expoEntity
	 */
	protected void writeExcelSheet(ExportExcelEntity expoEntity) {

		// 建立Excel的工作sheet,對應到一個excel文件的tab
		HSSFSheet sheet = wb.createSheet(expoEntity.getSheetName());
		/*---------------------------------------
		 * 建立sheet的title
		 *--------------------------------------*/
		// 總列數 =
		int colsCount = expoEntity.getSheetFieldsName().size();
		// 建立Excel的sheet的一行
		HSSFRow row = sheet.createRow(0);
		row.setHeight((short) expoEntity.getSheetTitleHeight());// 設定行的高度
		// 建立一個Excel的單元格
		HSSFCell cell_title = row.createCell(0);

		// 合併單元格(startRow,endRow,startColumn,endColumn)
		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, colsCount - 1));

		// 給Excel的單元格設定樣式和賦值
		cell_title.setCellStyle(this.getStyleTitle());
		cell_title.setCellValue(expoEntity.getSheetTitle());

		/*---------------------------------------
		 * 建立sheet的列名
		 *--------------------------------------*/
		row = sheet.createRow(1);
		HSSFCellStyle headerStyle = this.getStyleTitle2();
		headerStyle.setWrapText(true);
		for (int i = 0; i < colsCount; i++) {
			HSSFCell cell_header = row.createCell(i);

			String h = expoEntity.getSheetFieldsName().get(i);

			cell_header.setCellValue(h);

			// 設定自定義列寬
			if (expoEntity.getSheetColWidth() != null) {
				sheet.setColumnWidth(i, expoEntity.getSheetColWidth().get(i));
			}

			cell_header.setCellStyle(headerStyle);
		}

		/*---------------------------------------
		 * 建立sheet的資料
		 *--------------------------------------*/
		JSONArray datas = expoEntity.getSheetData();
		HSSFCellStyle cellStyle = this.getCellStyle();
		for (int i = 0; i < datas.size(); i++) {
			JSONObject rowData = datas.getJSONObject(i);
			row = sheet.createRow(2 + i);
			JSONArray cellDatas = rowData.getJSONArray("data");
			Object[] _cellDatas = cellDatas.toArray();
			for (int j = 0; j < _cellDatas.length; j++) {
				HSSFCell cell_Data = row.createCell(j);
				// 給Excel的單元格設定樣式和賦值
				cell_Data.setCellStyle(cellStyle);
				Object cellData = _cellDatas[j];
				if (cellData == null)
					continue;
				if ("class java.lang.String".equalsIgnoreCase(cellData.getClass().toString())) {
					cell_Data.setCellValue((String) cellData);
					// cell_Data.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_RIGHT);
				}
				if ("class java.lang.Double".equalsIgnoreCase(cellData.getClass().toString())) {
					// cell_Data.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_RIGHT);
					cell_Data.setCellValue((Double) cellData);
				}
				if ("class java.lang.Integer".equalsIgnoreCase(cellData.getClass().toString())) {
					// cell_Data.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_RIGHT);
					cell_Data.setCellValue((Integer) cellData);
				}
			}

		}
	}

	public List<ExportExcelEntity> getSheets() {
		return sheets;
	}

	public void setSheets(List<ExportExcelEntity> sheets) {
		this.sheets = sheets;
	}
}





相關推薦

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

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

POI 3.17 讀取Excel模板)、匯出Excel

最近在給通用做一個專案,很多功能塊需要匯入Excel模板,我正好研究了幾天Maven依賴<dependency> <groupId>org.apache.commons</groupId> <artifactI

C++函式模板實現原理

    C++為我們提供了函式模板機制。所謂函式模板,實際上是建立一個通用函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。這個通用函式就稱為函式模板。     凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義

BCP SQL匯出EXCEL常見問題解決方法;資料匯出儲存過程

一、‘xp_cmdshell’的啟用 SQL Server阻止了對元件‘xp_cmdshell’的過程‘sys.xp_cmdshell’的訪問。因為此元件已作為此服務囂安全配置的一部分而被關 閉。系統管理員可以通過使用sp_configure啟用‘xp_cmdshell’。有關啟用‘xp_cmdshell’

JAVA 關於web頁面下載匯出Excel通用方法

最近整理匯出Excel,這種情況是不存在實體類方式,只要按照這種資料格式編寫,就可以出來效果了。 1.需要的的jar包: poi-ooxml-3.9.jar serlet.api.jar 缺少的包自己去下就可以,都是常用的包,這裡就不一一寫出來了 下面看程式碼: 公

匯出excel通用介面

public static MemoryStream ExportToMemoryStream(List wechatlogList) { XSSFWorkbook book; ISheet currentSheet; string templateFilePa

asp.net 利用NPOI匯出Excel通用

解決中文檔名儲存Excel亂碼問題,主要是判斷火狐或者IE瀏覽器,然後做對應的判斷處理,核心程式碼如下: System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; //

java匯出Excel通用方法

一.後端程式碼 public void downLoadProductType() throws Exception { String sheetName = "商品類別統計表單"; String titleName = "可新增商品類別編號對照表"; Stri

Java 使用 Poi 匯出 Excel 通用(二)

上一篇:Java 使用 Poi 匯入 Excel 通用(一) /** * 檔案寫入excel * @param file 檔案 * @param list 資料來源 * @param sheetname 工作簿 * @throws IOException

api匯出excel的四種實現方法

潤乾報表是純java的,不僅本身具有很強大豐富的功能,同時還在不同層面上提供了豐富的java介面。這裡主要說說業務系統中常用的一個功能–匯出excel。 本文給出四種常用的通過API介面來實現匯出excel的方法:其中方法1和方法2是通過類com.runqian.repor

Java之——匯出Excel通用工具類

一、概述 相信大家在工作過程中,都會遇到這樣一個需求,就是將相關的資料列表匯出成excel,那麼,有沒有通用的匯出方式呢,這裡,就帶著大家一起來用Java實現一個通用的匯出Excel的工具。 二、專案實現 1、構建pom.xml 我們的工程是利用Maven來構建的

C++使用VS2010匯出Excel的方法步驟

 最近工作需要將listctrl中的資料匯出到Excel中。網上找了很多,但多數是VC6.0的。結合VC6.0匯出的方法,自己琢磨了不少時間,終於將問題解決了。輕鬆之餘,將過程分享出來,希望對需要的人有所幫助。   一、設定 環境: Windows7 Microsoft Visual Studi

匯入和匯出Excel通用方法

package com.javen.service; import java.io.File; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List

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

 //字型          HSSFFont font = workbook.createFont();          font.setFontName("仿宋_GB2312");          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗體顯示

Spring+JPA 通用DAO實現

介面: import java.util.LinkedHashMap; import com.itcast.bean.QueryResult; public interface DAO { /** * 獲取記錄總數 * @param entityClass 實體類

NET使用NPOI元件將資料匯出Excel-通用方法 【推薦】

一、Excel匯入及匯出問題產生:   從接觸.net到現在一直在維護一個DataTable匯出到Excel的類,時不時還會維護一個匯入類。以下是時不時就會出現的問題: 匯出問題:   如果是asp.net,你得在伺服器端裝Office,幾百M呢,還得及時更新它,以防漏洞,還得設定許可權允許ASP.n

Web應用匯出Excel報表的簡單實現(HTML)

<%@ page contentType="text/html; charset=GBK" %><% response.setContentType("application/vnd.ms-excel;charset=GBK"); %><HTML><meta http

CMakeLists多目錄通用模板Win&Linux相容動態庫編寫

CMakeLists多目錄通用模板 CMake不僅具有跨平臺(一次編寫,多次編譯)的特點,還有便於工程管理的特點,支援CMake的IDE也有很多(VS[MS],QT,CodeBlock等)。 以一個通用組織的工程(包含PCL,VTK,libLAS第三方庫)為

swagger codegen自定義模板實現流程

 swagger codegen學習自定義模板   * 參考https://www.cnblogs.com/shamo89/p/7680771.html   * 下載Swagger codegen的jar包https://oss.sonatype.org/content/re

jxl實現寫入excel模板匯出(帶圖片)

在上一片部落格中我用的是freemarker(操作簡單),試了很多種方法就是沒有把帶圖片的excel匯出來,沒辦法就換jxl來實現。好了下面就開始進入正題: 第一步:pom.xml中新增jxl的依賴如下: <!-- jxl通用excel匯入匯出--> <dependen