項目中需要将web頁面中的報表導出成Excel,在網上搜尋了寫資料,實作了相關功能,如圖1所示:
項目背景架構采用的是SpringMVC+Spring+Mybatis,通過引入Apache POI實作excel的下載下傳功能。
導出效果如圖2所示:
首先頁面中點選“導出Excel”按鈕就會觸發如下js代碼:
這段js代碼的主要功能是将選擇條件傳回給背景,請求相應的資料并生成excel。
jsp相關代碼如下:
下面是JAVA背景控制層代碼:
這裡調用了業務層代碼如下:
在getXls方法中,getXlsData(fac_id,beginTime,endTime);主要是根據前端的查詢條件參數擷取所要的資料,這裡采用的是mybatis實作,由于本文的主旨是與excel相關的,這裡就不說明mybatis如何實作資料的擷取。
第二步是建立excel的資料,如方法createExcelRecord(projects);所示。list中第一項的sheetName用來命名Excel中的sheet。剩餘list中的資料數excel中的沒一行的資料。在getXls方法中的columnNames對應excel的第一行的列名,可參考圖2.
keys與createExcelRecord中的相關名字一一對應(這裡也與DAO值的pojo類的屬性名字一一對應)。
接下來就需要了解ExcelUtil.ExcelSingleOutputStream(list,keys,columnNames,fileName,request,response);這一段代碼是做什麼的了。
首選看類ExcelUtil:
這裡的createSingleWorkBook方法用來根據業務層中的相關資料生成的excel,這時候生成的excel是駐留在記憶體中的,是以需要其輸出,請參照方法ExcelSingleOutputStream和ExcelOutputStream(這裡将一個方法拆分成兩個是因為原項目中還有其他的情況考慮,本文隻羅列出一種相對簡單的情況,是以這樣不要差異,可以将這兩個方法看成一個也無妨,主要是向頁面輸出這個生成的Excel。