SSM數據庫數據導出excel

首先,這是我對本身的需求而使用的邏輯,如有能夠完美的地方方便告訴下小白。html

apache的poi MAVEN前端

 

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
 </dependency>

 

 

 

一、前端頁面,僞異步(頁面不刷新)

爲何不用ajax呢?ajax

JQuery的ajax函數的返回類型只有xml、text、json、html等類型,沒有「」類型。因此就用js作個form表單請求apache

上代碼()json

1 function exportExcel(){
2             var myurl="${context}/assetInLibrary/export";
3             var form=$("<form>");
4             form.attr("style","display:none");
5             form.attr("method","post");
6             form.attr("action",myurl);
7             $("body").append(form);
8         }

 

二、在工具包中建立ViewExcel,繼承AbstractExcelView

先上代碼app

 1 public class ViewExcel extends AbstractExcelView {
 2 
 3     private String[] titles;
 4     
 5     //傳入指定的標題頭
 6     public ViewExcel(String[] titles) {
 7         this.titles=titles;
 8     }
 9     
10     @Override
11     protected void buildExcelDocument(Map<String, Object> model,
12             HSSFWorkbook workbook, HttpServletRequest request,
13             HttpServletResponse response) throws Exception {
14         //獲取數據
15         List<Map<String, String>> list = (List<Map<String, String>>) model.get("excelList");
16         //在workbook添加一個sheet
17         HSSFSheet sheet = workbook.createSheet();
18         sheet.setDefaultColumnWidth(15);
19         HSSFCell cell=null;
20         //遍歷標題
21         for (int i = 0; i < titles.length; i++) {
22             //獲取位置
23             cell = getCell(sheet, 0, i);
24             setText(cell, titles[i]);
25         }
26         //數據寫出
27         for (int i = 0; i < list.size(); i++) {
28             //獲取每個map
29             Map<String, String> map=list.get(i);
30             //一個map一行數據
31             HSSFRow row = sheet.createRow(i+1);
32             for (int j = 0; j < titles.length; j++) {
33                 //遍歷標題,把key與標題匹配
34                 String title=titles[j];
35                 //判斷該內容存在mapzhong
36                 if(map.containsKey(title)){
37                     row.createCell(j).setCellValue(map.get(title));
38                 }
39             }
40         }
41          //設置下載時客戶端Excel的名稱     
42         String filename = new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".xls";  
43         response.setContentType("application/vnd.ms-excel");     
44         response.setHeader("Content-disposition", "attachment;filename=" + filename); 
45         OutputStream ouputStream = response.getOutputStream();     
46         workbook.write(ouputStream);     
47         ouputStream.flush();     
48         ouputStream.close();     
49     }
50 
51 }

 

在構造函數中傳進來需導出的titles,也就是excel中的標題頭,這個邏輯會有點麻煩,由於我是建立Map,讓dao中查出來的數據根據個人Map(‘title’,'value')進行封裝,且title要存在於傳進來的titles中,剩下看源碼就能明白異步

三、service中的數據封裝

 1 public List<Map<String, String>> selectAllAssetInlibraryInfo() {
 2         List<AssetInlibrary> list = assetInlibraryMapper.selectByExample(null);
 3         List<Map<String, String>> mapList=new ArrayList<Map<String,String>>();
 4         for (AssetInlibrary assetInlibrary : list) {
 5             Map<String, String> map=new HashMap<String, String>();
 6             map.put("編號", assetInlibrary.getId()+"");
 7             map.put("資產名稱", assetInlibrary.getTitle());
 8             AssetType assetType = assetTypeMapper.selectByPrimaryKey(assetInlibrary.getAssetTypeId());
 9             map.put("資產類型", assetType.getTitle());
10             AssetBrand assetBrand = assetBrandMapper.selectByPrimaryKey(assetInlibrary.getAssetBrandId());
11             map.put("資產品牌", assetBrand.getTitle());
12             AssetStorage assetStorage = assetStorageMapper.selectByPrimaryKey(assetInlibrary.getAssetStorageId());
13             map.put("資產存放地點", assetStorage.getTitle());
14             AssetProvider assetProvider = assetProviderMapper.selectByPrimaryKey(assetInlibrary.getAssetProviderId());
15             map.put("資產供應商", assetProvider.getTitle());
16             mapList.add(map);
17         }
18         return mapList;
19     }

 

四、controller中的數據交互

1 @RequestMapping("/assetInLibrary/export")
2     public ModelAndView export(ModelMap map) throws Exception{
3         List<Map<String,String>> list = assetInLibraryService.selectAllAssetInlibraryInfo();
4         String[] titles={"編號","資產名稱","資產類型","資產品牌","資產存放地點","資產供應商"};
5         ViewExcel excel=new ViewExcel(titles);
6         map.put("excelList", list);
7         return new ModelAndView(excel,map);
8     }

 

公衆號

 

歡迎關注個人公衆號「碼上開發」,天天分享最新技術資訊、最優原創文章。關注獲取最新資源ide

 

 

版權聲明:本文爲不會代碼的小白原創文章,未經容許不得轉載。函數

相關文章
相關標籤/搜索