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;
	}
}





猜你喜欢

转载自blog.csdn.net/qq_24192465/article/details/80436495
今日推荐