Java +EasyUI+SpringMvc實現Excel匯出
阿新 • • 發佈:2019-01-04
正題
Excel匯出就是根據前臺條件將引數傳到controller,根據引數去資料庫中進行查詢,查詢出list集合,呼叫ExcelUtil工具類,將list集合轉為成excel資料,輸出到瀏覽器。
匯出實現
首先我們先來看下前臺程式碼,前臺獲取引數,將引數傳到對於的controller中:
//匯出題庫
function toDownLoadExcel(){
//獲取題型
var id= $('#questionType').combobox('getValue')
var questionTypes=encodeURI(id);
//獲取課程
var courseTypeId =$('#courseTypeId').combobox('getValue')
var courseType=encodeURI(courseTypeId);
if(questionTypes !=""){
document.getElementById("downLoadExcel").href ="${pageContext.request.contextPath}/leadtoQuestionTypes/leadToExcelQuestionBank?questionType="+questionTypes+"&courseType=" +courseType;
$.messager.alert('提示','操作成功!','info');
}else{
$.messager.alert('提示','請選擇課程題型!','info');
}
}
後臺controller獲取前臺傳來的引數,根據引數去資料庫查詢list集合,將list集合通過工具類進行轉化,將Excel輸出到瀏覽器
/**
* 匯出excel題型題庫
*
* @param request 請求
*
* @param resposne 響應
*
* @throws UnsupportedEncodingException 編碼異常
*
*/
@RequestMapping("/leadToExcelQuestionBank")
public void leadToExcelQuestionBank(HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
try {
// 獲取前臺傳來的題型和課程
String questionType = request.getParameter("questionType").trim();
String courseType = request.getParameter("courseType").trim();
String questionTypeNameId = new String(
questionType.getBytes("iso-8859-1"), "utf-8");
String courseTypeId = new String(courseType.getBytes("iso-8859-1"),
"utf-8");
// excel表格的表頭,map
LinkedHashMap<String, String> fieldMap = leadToInQuestionTypesManageBean.getMapLeadToExcelQuestionBank(questionTypeNameId);
// excel的sheetName
String sheetName = "題庫";
// excel要匯出的資料
List list = leadToInQuestionTypesManageBean.leadToExcelQuestionBank(questionTypeNameId, courseTypeId);
// 匯出
if (list == null || list.size() == 0) {
System.out.println("題庫為空");
}else {
//將list集合轉化為excel
ExcelUtil.listToExcel(list, fieldMap, sheetName, response);
System.out.println("匯出成功~~~~");
}
} catch (ExcelException e) {
e.printStackTrace();
}
}
其中list集合轉化為excel時候的引數fieldMap,是匯出的資料庫欄位和excel中的中文表頭map,方法如下:
/**
* 得到匯出Excel時題型的英中文map
*
* @return 返回題型的屬性map
*/
public LinkedHashMap<String, String> getLeadToFiledPublicQuestionBank() {
LinkedHashMap<String, String> superClassMap = new LinkedHashMap<String, String>();
superClassMap.put("stemContent", "題幹內容");
superClassMap.put("difficulty", "難度等級");
superClassMap.put("scoreCoefficient", "分值係數");
superClassMap.put("chapter", "章節");
superClassMap.put("availability", "是否使用");
return superClassMap;
}
在上一篇文章中的excel資料轉為list集合時,也用到了一個map,那個map時excel中文表頭和資料庫欄位的map集合,方法如下:
/**
* 得到匯入Excel時,題型類的中英文map
*
* @return 返回題型類的屬性map
*/
public LinkedHashMap<String, String> getLeadInFiledPublicQuestionBank() {
// excel的表頭與文字對應
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
map.put("題幹內容", "stemContent");
map.put("難度等級", "difficulty");
map.put("分值係數", "scoreCoefficient");
map.put("章節", "chapter");
map.put("是否使用", "availability");
return map;
}
ExcelUtil工具類
在介紹ExcelUtil工具類之前,我們應該先了解下Jxl,Jxl是一個開源的Java Excel API專案,通過Jxl,Java可以很方便的操作Excel文件。我們實現的Excel匯入匯出就是利用了Jxl,當然了除了Jxl,Apache的一個POI也可以操縱Excel,只不過兩者相比,Jxl使用簡單比較容易上手,POI稍微複雜點。而Jxl的缺點就是目前Jxl還不能操作Excel2000以上的版本。
我們本次使用的Jxl是2.6.12版本的,在maven的pom.xml檔案中新增Jxl的座標依賴:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
而我們使用的ExcelUtil工具類,可以完成的功能是將list轉化為Excel輸出到瀏覽器,同時也可以完成將Excel轉化為list集合,還可以設定excel列寬等。
小結
Excel的匯入和匯出是我們在開發中經常遇到的問題,通過這兩篇文章,我們就利用Jxl簡單完成了excel的操作,實現了excel的匯入和匯出。
關於ExcelUtil類程式碼比較多,感興趣的同學可以自行下載