String fileName = “excel名稱”;
String columnCaptions =“excel列名”;
//例如
//String columnCaptions = “市場成員名稱,調度簡稱,曾用名,註冊編碼,所屬發電集團,許可證是否豁免,地理區域,狀態”
List list = participantManageBizc.getMarketPartExportList(request,
map);//數據庫查詢數據
// 調用工具類將excel導出
ExcelUtilJXL.exportExcel(request, response, fileName,
columnCaptions, list);
//ExcelUtilJXL類exportExcel方法代碼:
public static final void exportExcel(HttpServletRequest p_request,
HttpServletResponse p_response, String p_fileName,
String columnCaptions, List p_listContent) {
String[][] p_Titles = getExcelTitle(columnCaptions);
OutputStream os;
try {
os = p_response.getOutputStream();
p_response.reset();
String filenamedisplay = URLEncoder.encode(p_fileName, "UTF-8");
if ("FF".equals(getBrowser(p_request))) {
filenamedisplay = new String(p_fileName.getBytes("UTF-8"),
"iso-8859-1");
}
//HTTP響應截斷
filenamedisplay = filenamedisplay.trim();
filenamedisplay = filenamedisplay.replaceAll("\t", ""); //去掉製表符號
filenamedisplay = filenamedisplay.replaceAll("\r\n",""); //去掉回車換行符號
filenamedisplay = filenamedisplay.replaceAll("\r",""); //去掉回車
filenamedisplay = filenamedisplay.replaceAll("\n",""); //去掉換行
filenamedisplay = filenamedisplay.replaceAll(" ",""); //去掉空格
filenamedisplay = filenamedisplay.replaceAll("'",""); //去掉單引號
p_response.addHeader("Content-Disposition", "attachment; filename="
+ filenamedisplay);
p_response.addHeader("Content-Type", "application/vnd.ms-excel");
WritableWorkbook workbook = Workbook.createWorkbook(os);
// 新建excel中的sheet的danyuan
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
SheetSettings sheetset = sheet.getSettings();
sheetset.setProtected(false);
// 格式化excel某些單元格的樣式
// 一般樣式,字體樣式,標題加黑,普通正文
WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10,
WritableFont.BOLD);
// 表格設置邊框,對齊方式等
WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN);
wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf_center.setAlignment(Alignment.CENTRE);
wcf_center.setWrap(false);
WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN);
wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf_left.setAlignment(Alignment.LEFT);
wcf_left.setWrap(false);
int cur = 0;
// 將excel第一行的標題循環寫入excel
if (p_Titles.length != 0 && p_Titles[0].length != 0) {
if (p_Titles.length == 1) {
// 單表頭
for (int i = 0; i < p_Titles[0].length; ++i) {
// sheet.
sheet.addCell(new Label(i, 0, p_Titles[0][i],
wcf_center));
}
cur = 1;
} else {
// 多表頭( 合併單元格將按需合併)
for (int i = 0; i < p_Titles.length; i++) {
for (int j = 0; j < p_Titles[0].length; j++) {
if (p_Titles[i][j] != null
&& !p_Titles[i][j].equals("null")) {
int _i = i + 1;
int _j = j + 1;
for (; _i < p_Titles.length; _i++) {
if (p_Titles[_i][j] != null && !p_Titles[_i][j].equals("null")) {
_i--;
break;
}
p_Titles[_i][j] = null;//代表已經合併的單元格
}
for (; _j < p_Titles[0].length; _j++) {
if (p_Titles[i][_j] == null || !p_Titles[i][_j].equals("null")) {
_j--;
break;
}
p_Titles[i][_j] = null;//代表已經合併的單元格
}
if (_i == p_Titles.length) {
_i = p_Titles.length - 1;
}
if (_j == p_Titles[0].length) {
_j = p_Titles[0].length - 1;
}
sheet.mergeCells(j, i, _j, _i);
// 先列後行
sheet.addCell(new Label(j, i, p_Titles[i][j],
wcf_center));
}
}
}
cur = p_Titles.length;
}
}
for (int row = 0; row < p_listContent.size(); ++row) {
Object[] dataRow = null;
if ((p_listContent.get(0) != null)
&& (p_listContent.get(0).getClass().isArray())) {
dataRow = (Object[]) (Object[]) p_listContent.get(row);
} else {
dataRow = new Object[] { p_listContent.get(row) };
}
// 循環讀取List數據,將要導出的數據寫入到excel中
int length = Math.min(p_Titles[0] == null ? 0
: p_Titles[0].length, dataRow.length);
for (int col = 0; col < length; ++col) {
if (dataRow[col] != null) {
String listvalue = "";
if(dataRow[col].getClass() == org.hibernate.lob.SerializableClob.class){
SerializableClob listvalueClob = (SerializableClob) dataRow[col];
listvalue = listvalueClob.getSubString(1, (int) listvalueClob.length());
}else{
listvalue = dataRow[col].toString();
}
Label label = new Label(col, row + cur, listvalue);
sheet.addCell(label);
} else {
Label label = new Label(col, row + cur, "");
sheet.addCell(label);
}
}
}
// 將數據寫入到excel。
workbook.write();
workbook.close();
os.flush();
} catch (Exception e) {
// 導出失敗寫入日誌中
String message = "生成 Excel 時出錯";
if (log.isErrorEnabled()) {
log.error("MXFRAMEWORK" + message, e);
}
}
}
/**
*
* @description 判斷頁面使用的什麼瀏覽器
* @param request
* @return
* @author
* @date
*/
private static String getBrowser(HttpServletRequest request) {
String UserAgent = request.getHeader("USER-AGENT").toLowerCase();
if (UserAgent != null) {
if (UserAgent.indexOf("msie") >= 0)
return "IE";
if (UserAgent.indexOf("firefox") >= 0)
return "FF";
if (UserAgent.indexOf("safari") >= 0)
return "SF";
}
return null;
}
/**
*
* @description 獲取excel的標題
* @param columnCaptions
* @return
* @author dingjianwei
* @date 2013-6-21
*/
public static final String[][] getExcelTitle(String columnCaptions) {
if (columnCaptions == null || columnCaptions.equals("")) {
return new String[0][0];
}
String[] items = columnCaptions.split(";");
String[][] titles = null;
if (items.length == 0) {
return new String[0][0];
} else {
String[] item = items[0].split(",");
titles = new String[items.length][item.length];
for (int i = 0; i < items.length; i++) {
item = items[i].split(",");
for (int j = 0; j < item.length; j++) {
titles[i][j] = item[j];
}
}
}
return titles;
}