1. 程式人生 > >基於SSM的POI導入導出Excel實戰第二篇-導出EXCEL

基於SSM的POI導入導出Excel實戰第二篇-導出EXCEL

我們 price 比較 com src art batis 思路 同步

業務需求:這裏我以產品信息為例,用於POI導入導出Excel實戰的操作對象

需求分析:我們要導出的數據格式比較簡單,其實就是待導出的表(視圖)的數據,如下圖所示:
技術分享圖片

實現思路:
A、會發現待導出的數據列表是一個矩陣式的格式,即二維的形式

B、其中的頭部id name unit price stock 等字段field是固定不變的,將會充當excel的頭部

C、以數據行的角度觀察數據列表,會發現每一行每一列的值都是B所指的那些字段一一對應的取值value

D、由此可以得出這些數據組織是由每一行數據組成,而每一行數據是由 field-value 對組成的,而這即可讓人聯想到 map的映射格式。即每一行row由map構成,整個表/視圖則由多行row組成,所以最終應輸出的數據格式為:List<Map<key,value>>,如下圖所示:

技術分享圖片

有了上面的實現思路,其實我們已經實現了一大半!下面進入正文,閱讀正文期間,如果有任何問題均可以加我QQ:1974544863 或者入群討論技術:583522159。以下是我的公眾號,感興趣的童鞋可以關註(有幹貨分享以及項目實戰分享哦!)
技術分享圖片

好了,那我們就廢話不多說,進入代碼實戰吧:

  1. 首先創建表product,並定義以下字段,同時自己在表裏添加數據。並用mybatis逆向工程生成entity,mapper,mapper.xml文件
    技術分享圖片

技術分享圖片

  1. 然後創建ProductController,開發導出Excel的功能,該功能的思路其實就是上面分析出來的實現思路,在這些代碼裏均能得到體現
    技術分享圖片

技術分享圖片

  1. 其中ProductMapper的selectAll方法如下:
    技術分享圖片

技術分享圖片

  1. 而ExcelBeanUtil.manageProductList方法用於將獲取的數據列表轉化為上面所講的List<Map<>>代碼如下:
    技術分享圖片

  2. ExcelUtil.fillExcelSheetData方法,則是將最終獲取到的List<Map<>>格式的數據列表真正的填充到Excel中,得到最終的Excel -Workbook實例:
    技術分享圖片

  3. 最後,需要將得到的Workbook實例(其實就是一個Excel了)以流的形式同步寫回瀏覽器:
    技術分享圖片

  4. 其中,我們這裏用到了sheetProductName跟excelProductName,顧名思義,分別為:下載的Excel中sheet的命名以及下載的Excel的名稱。這兩個屬性是采用動態配置的方式配置為配置文件application.properties中的 如下所示:

技術分享圖片

  1. 最終,我們實現的效果如下所示:

技術分享圖片

好了,這就是我們POI實戰第二篇:到處Excel,若有相關問題可以加上面我的個人聯系方式咨詢我!!!

基於SSM的POI導入導出Excel實戰第二篇-導出EXCEL