欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 導入Excel思路及代碼示例

 更新時間:2017年11月16日 11:46:04   作者:至尊丶神月  
這篇文章主要介紹了java 導入Excel思路及代碼示例,簡要分析了設計思路,然后分享了實例代碼,具有一定參考價值,需要的朋友可以了解下。

導出就是將List轉化為Excel(listToExcel)

導入就是將Excel轉化為List(excelToList)

一、思路分析

  1、我們要做導入,實際上也就是先文件上傳,然后讀取文件的數據。

  2、我們要有一個導入的模板,因為我們導入的Excel列要和我們的數據字段匹配上,所以我們要給它來一個規(guī)定,也就是模板。

  3、按照我們公司的套路,是做了一個導入信息的臨時表,用來存導入文件中的信息。每當導入的時候,我們先把表信息清空,再拿到數據放進來,然后我們對導入的數據進行檢查,最后才全部導入。

    這樣做的目的是防止導入的數據和列沒有對上卻也直接導到了庫里面,要真這樣了就很尷尬。我們做了三個按鈕,一個導入,一個確認導入,一個導入模板下載。

  4、捋一下過程:

    點擊批量導入按鈕,跳轉到導入頁面。

    點擊模板下載。(事先寫好一個模板.xls文件,此按鈕放置下載鏈接)

    在模板中錄入數據。

    點擊導入按鈕,跳出文件上傳模態(tài)框。

    選擇文件,上傳文件。

    上傳成功后調用后臺方法,讀取文件內容。

    把內容生成表格,顯示到導入頁面。

    觀察數據有沒有出錯。

    點擊確認導入,調用后臺方法,執(zhí)行導入操作。

    回調函數,導入成功/導入失敗 的提示。

二、代碼分析

   1、前端js代碼:

var actionPath = contextPath + "/alumni-import";

$(function() {
  //加載數據
  loadData();
  //上傳文件
  uploadFile({
    subfix: ['xls'],
    subfixTip: "請選擇Excel的xls文件!",
    successCall: function(data, status, a) {
      $('[name=attachementPath]').val(data.fileName);
      $.post(actionPath + "!importExcel", { "f_id": data.f_id }, function(data) {
        if (data.success) {
          alertify.alert(data.message);
          $("#myModal-import").modal("hide");
          loadData();
        } else {
          alertify.alert(data.message);
        }

      }, "json");
    }
  });
  //導入
  $("#btn-import").click(function() {
    var html = template("importTpl");
    $("#import-body").html(html);
    $("#myModal-import").modal();
  });
  //確認導入
  $("#btn-sure").click(function() {
    var type = $("#indentity-type").val();
    alertify.confirm("確定要全部導入嗎?", function(e) {
      if (!e) { return; } else {
        $.post("/alumni-import!saveReal?type=" + type, function(data) {
          alertify.alert("導入成功!", function() {
            location.href = "/alumni!hrefPage";
          });
        }, "json");
      }
    });
  });
});50 
function loadData() {
  var options = {
    url: actionPath + "!page"
  };
  loadPaginationData(options);
}

2、后臺功能代碼

    前端有四個請求,一個初始化頁面數據加載,當然,一開始是沒有數據的;一個導入文件上傳;一個確認導入;一個導入完成后頁面跳轉回要信息頁面(信息頁面有一個批量導入跳轉到這的導入頁面)。

    第一個后最后一個就不講了。講一下第二個和第三個。

   ?、俚诙€

//上傳文件后調用
  public void importExcel() {
    try {
      //清空臨時表的數據
      baseAlumniImportSrv.deleteAll();
      //讀取文件
      File file = gridFsDao.readFile(f_id);
      //把文件信息給臨時表
      int count = excelXYSrv.importExcel(file);
      //清空上傳的文件
      file.delete();
      sendSuccessMsg(count, "上傳成功" + count + "條數據");
    } catch (IOException e) {
      LOGGER.error(e);
      sendFailMsg(null, "上傳失敗");
    }
  }
@Override  //使用MongoDB GridFS,具體詳解請各自初學者自行百度,注釋寫不下去了,我也不會,心態(tài)爆炸~~~
  public File readFile(String f_id) {
    //拿到文件
    GridFSDBFile gridFSFile = mongoGridFs.findOne(new Query(Criteria.where(F_ID).is(f_id)));
    if (gridFSFile == null) {
      return null;
    }
    String fileName = gridFSFile.getFilename();
    String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
    InputStream ins = gridFSFile.getInputStream();
    String tmpFile = UUID.randomUUID().toString() + extension;
    File file = new File(tmpFile);
     
    try {
      OutputStream os = new FileOutputStream(file);
      int bytesRead = 0;
      byte[] buffer = new byte[8192];
      while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
        os.write(buffer, 0, bytesRead);
      }
      os.close();
      ins.close();
    } catch (IOException e) {
      e.printStackTrace();
    }

    return file;

  }
/**
   * @param excelFile
   *      從excel中讀取數據,并存儲到數據庫臨時表中
   * @return
   * @throws IOException
   */
  @Override
  public int importExcel(File excelFile) throws IOException {
    List<List<Object>> datas = ExcelImportUtil.readExcel(excelFile);
    int count = 0;
    for (int i = 1; i < datas.size(); i++) {
      BaseAlumniImport entity = this.convert2Entity(datas.get(i));
      this.baseAlumniImportSrv.save(entity);
      count++;
    }
    return count;
  }

 ②第三個

public void saveReal() {
    int count = 0;
    List<BaseAlumniImport> importList = this.baseAlumniImportSrv.findAll();
    for (int i = 0; i < importList.size(); i += 10) {
      List<BaseAlumniImport> newlist = new ArrayList<>();
      if ((i + 10) < importList.size()) {
        newlist = importList.subList(i, i + 10);
      } else {
        newlist = importList.subList(i, importList.size());
      }
      count += excelXYSrv.saveReal(newlist, this.type);
    }
    sendSuccessMsg(count, "導入成功" + importList.size() + "條數據");
  }
@Override
  public int saveReal(List<BaseAlumniImport> importList, String type) {
    int count = 0;
    String alumniIdentityName = dicSrv.findById(DicAlumniIdentity.class, Integer.parseInt(type)).getValue();
    for (BaseAlumniImport inst : importList) {
      LOGGER.info(inst.getId());
      BaseAlumni v = this.importExportSrv.convert(inst);
      v.setId(IdKit.uuid());
      v.setCreateTime(new Date());
      v.setLastUpdate(new Date());
      this.baseAlumnidDao.save(v);
      this.baseAlumniImportSrv.deleteById(inst.getId());
      count++;
    }
    return count;
  }
@Override
  public int saveReal(List<BaseAlumniImport> importList, String type) {
    int count = 0;
    String alumniIdentityName = dicSrv.findById(DicAlumniIdentity.class, Integer.parseInt(type)).getValue();
    for (BaseAlumniImport inst : importList) {
      LOGGER.info(inst.getId());
      BaseAlumni v = this.importExportSrv.convert(inst);
      v.setId(IdKit.uuid());
      v.setCreateTime(new Date());
      v.setLastUpdate(new Date());
      this.baseAlumnidDao.save(v);
      this.baseAlumniImportSrv.deleteById(inst.getId());
      count++;
    }
    return count;
  }

 沒啥好講的……會的應該都能看懂,看不懂的我也不會……

三、結果圖

總結

以上就是本文關于java 導入Excel思路及代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Java解壓zip文件完整代碼分享

Java探索之Thread+IO文件的加密解密代碼實例

Java編程獲取文件列表及子文件目錄的方法(非遞歸)

如有不足之處,歡迎留言指出。

相關文章

  • Spring boot實現文件上傳實例(多文件上傳)

    Spring boot實現文件上傳實例(多文件上傳)

    本篇文章主要介紹了Spring boot實現文件上傳實例(多文件上傳),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 分享一個簡單的java爬蟲框架

    分享一個簡單的java爬蟲框架

    這篇文章主要介紹了分享一個簡單的java爬蟲框架,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java9新特性對HTTP2協議支持與非阻塞HTTP?API

    Java9新特性對HTTP2協議支持與非阻塞HTTP?API

    這篇文章主要為大家介紹了Java9新特性對HTTP2協議的支持與非阻塞HTTP?API,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • 關于break和continue以及l(fā)abel的區(qū)別和作用(詳解)

    關于break和continue以及l(fā)abel的區(qū)別和作用(詳解)

    下面小編就為大家?guī)硪黄P于break和continue以及l(fā)abel的區(qū)別和作用(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java中泛型的用法總結

    Java中泛型的用法總結

    這篇文章主要介紹了Java中泛型的用法,實例總結了java中泛型的常見使用技巧,需要的朋友可以參考下
    2015-06-06
  • java簡單坦克大戰(zhàn)制作代碼

    java簡單坦克大戰(zhàn)制作代碼

    這篇文章主要介紹了java簡單坦克大戰(zhàn)制作代碼,利用Java語言中的集合、Swing、線程等知識點編寫一個坦克大戰(zhàn)游戲,需要的朋友可以參考下
    2016-07-07
  • 詳解Java面向對象編程中方法的使用

    詳解Java面向對象編程中方法的使用

    這篇文章主要介紹了詳解Java面向對象編程中方法的使用,包括方法的重載和參數以及泛型方法等知識點,需要的朋友可以參考下
    2016-02-02
  • Java的Cglib動態(tài)代理實現方式詳解

    Java的Cglib動態(tài)代理實現方式詳解

    這篇文章主要介紹了Java的Cglib動態(tài)代理實現方式詳解,CGLIB是強大的、高性能的代碼生成庫,被廣泛應用于AOP框架,它底層使用ASM來操作字節(jié)碼生成新的類,為對象引入間接級別,以控制對象的訪問,需要的朋友可以參考下
    2023-11-11
  • Java實現鼠標拖放功能的方法

    Java實現鼠標拖放功能的方法

    這篇文章主要介紹了Java實現鼠標拖放功能的方法,很實用的功能,需要的朋友可以參考下
    2014-07-07
  • Java多線程模擬售票程序和線程安全問題

    Java多線程模擬售票程序和線程安全問題

    本篇文章給大家分享了Java多線程模擬售票程序和線程安全問題的相關知識點,對此有興趣的朋友可以參考學習下。
    2018-05-05

最新評論