1. 程式人生 > >Java +EasyUI+SpringMvc實現Excel匯出

Java +EasyUI+SpringMvc實現Excel匯出

正題

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類程式碼比較多,感興趣的同學可以自行下載