JeeSite中Excel導入導出

導入導出步驟

無論是JeeSite系統,還是其他的系統或者自己寫的系統,對於數據導入導出功能而言,首先要確定的是導入導出哪些數據的字段,然後提供一個導入的模板,編寫導入導出的功能,最後在頁面上提供導入導出的操作方式來供使用者進行使用。

定義導入導出字段

在導入導出數據時會先確定要導入導出數據的哪些關鍵字段,在確定好字段之後,通過數據庫查詢出的數據根據字段逐個的導出,或者通過讀取的Excel逐個的讀入。在JeeSite中,確定要導入導出的字段以後,在JeeSite的實體類中可以通過註解來進行說明,註解方法如下:

1 @ExcelField(title="列名1", align=2, sort=10)

這樣定義,就可以將類中的字段與Excel的列進行關聯,包括列名稱和排序。例子如下:

1 @ExcelField(title="名稱", align=2, sort=10) 
2 public String getName() {
3 return name;
4 }
5
6 @ExcelField(title="年齡", align=2, sort=20)
7 public String getAge() {
8 return age;
9 }

在實體類的getter方法上添加@ExcelField註解,就完成了Excel列名稱與實體類字段的關聯。

Excel數據導出功能

對於JeeSite中的導出功能完全是套路,只要簡單的3行就可以完成一個導出功能,首先設置導出文件名,接著查詢導出數據,最後調用ExportExcel()來完成Excel的導出,例子代碼如下:

 1 @RequestMapping(value = "export", method=RequestMethod.POST)
2 public String exportFile(Info info, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
3 try {
4 String fileName = "信息數據"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
5 // 調用獲取數據的方法 ... 省略 6 new ExportExcel("信息數據", Info.class).setDataList(page).write(response, fileName).dispose();
7 return null;
8 } catch (Exception e) {
9 addMessage(redirectAttributes, "信息數據導出失敗!失敗信息:"+e.getMessage());
10 }
11 return "redirect:" + adminPath + "/info/Info/list?repage";
12 }

return後的地址,根據實際的Controller來填寫。

導入模板

導入模板是用來給系統使用者在導入數據時使用的,有了導入模板就相當於有了一個導入的規範,確定需要導入哪些列來讓使用者填入。在JeeSite中,導入模板並不用事先提供一個Excel,而是通過代碼直接生成一個Excel文件,Excel文件中的列也是由前面實體類中確定的,這樣的好處是,當列的數量改變時不用人為的去替換修改Excel,因為它是有代碼生成的。導入模板的代碼例子如下:

 1 @RequestMapping(value = "import/template")
2 public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
3 try {
4 String fileName = "信息數據導入模板.xlsx";
5 List<info> list = Lists.newArrayList();
6 list.add(new Info());
7 new ExportExcel("信息數據", Info.class, 2).setDataList(list).write(response, fileName).dispose();
8 return null;

9 } catch (Exception e) {
10 addMessage(redirectAttributes, "導入模板下載失敗!失敗信息:"+e.getMessage());
11 }
12 return "redirect:" + adminPath + "/info/Info/list?repage";
13 }
/<info>

此處return後的地址,也是根據實際的Controller來填寫。

Excel數據導入功能

用戶下載好數據模板後,將相應的數據填寫好,就可以進行數據的導入了。數據的導入是對Excel中的數據不斷進行遍歷和保存的一個過程,代碼雖然比導出要長,但是也完全是套路,代碼如下:

 1 @RequestMapping(value = "import", method=RequestMethod.POST)
2 public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
3
4 try {
5 int successNum = 0; // 導入成功計數
6 int failureNum = 0; // 導入失敗計數
7 StringBuilder failureMsg = new StringBuilder();
8 ImportExcel ei = new ImportExcel(file, 1, 0);
9
10 List<info> list = ei.getDataList(Info.class);
11
12 for ( Info info : list ) {
13 // ...
14 if ( ... ) { // 導入條件的判斷
15 // 符合導入條件
16 // 保存 ... 方法省略
17 successNum++;
18 } else {
19 // 不符合導入條件
20 failureMsg.append("
名字 " + info.getName() + " 已存在; ");

21 failureNum++;
22 }
23 }
24
25 if (failureNum>0){
26 failureMsg.insert(0, ",失敗 " + failureNum + " 條信息,導入信息如下:");
27 }
28
29 addMessage(redirectAttributes, "已成功導入 " + successNum + " 條片區信息" + failureMsg);
30
31 } catch (Exception e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 }
35
36 return "redirect:" + adminPath + "/info/Info/list?repage";
37 }
/<info>

添加導入導出按鈕

在頁面上添加兩個按鈕,分別是導入和導入按鈕,代碼如下:

1 

  • 2
    3
    4

  • 導入時彈出的窗口

    在點擊“導入”按鈕時會彈出一個窗口,窗口中可以提供導入文件選擇,也可以下載導入模板。代碼如下:

    1 

    2
    8

    在代碼中,需要修改action和href後的具體路徑才能保證數據的提交,和模板下載的地址,具體地址根據自己項目中的Controller來進行替換。

    控制導入導出按鈕的JS代碼

    對於導出按鈕來說,需要通過action來講數據進行導出,對於導入按鈕來說只是需要把導入時顯示的窗口顯示出來即可。相關代碼如下:

     1 $(document).ready(function() { 
    2 $("#btnExport").click(function(){
    3 top.$.jBox.confirm("確認要導出片區數據嗎?","系統提示",function(v,h,f){
    4 if(v=="ok"){
    5 $("#searchForm").attr("action","${ctx}/info/Info/export");
    6 $("#searchForm").submit();
    7 }
    8 },{buttonsFocus:1});
    9 top.$('.jbox-body .jbox-icon').css('top','55px');
    10 });
    11 $("#btnImport").click(function(){
    12 $.jBox($("#importBox").html(), {title:"導入數據", buttons:{"關閉":true},
    13 bottomText:"導入文件不能超過5M,僅允許導入“xls”或“xlsx”格式文件!"});
    14 });
    15 });

    對於需要使用JeeSite開源項目進行二次開發的話,上面的代碼算是一個比較詳細的筆記了,如果不使用JeeSite開源項目的話,上面的代碼就沒有什麼用處了。這篇筆記留個自己和需要的人吧。我還會陸續的發一些關於JeeSite的二次開發的筆記。


    分享到:


    相關文章: