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