摘要:背景小白今天閑著沒事,在公司摸魚,以為今天有事無聊的一天,突然上頭說小子,今天實(shí)現(xiàn)一下批量導(dǎo)入數(shù)據(jù)吧,當(dāng)時(shí)我的內(nèi)心是拒絕的,然后默默打開。介紹框架本身并不支持讀取,所有讀取需要借助一些框架。
1 背景
小白今天閑著沒事,在公司摸魚,以為今天有事無聊的一天,突然上頭說小子,今天實(shí)現(xiàn)一下批量導(dǎo)入Excel數(shù)據(jù)吧,當(dāng)時(shí)我的內(nèi)心是拒絕的,然后默默打開idea。
2 介紹 2.1 框架java本身并不支持讀取excel,所有讀取excel需要借助一些框架。目前有幾種方式,
1. Apache POI
2. Java Excel API
3. easyexcel
這里主要講解的是 Apache POI,Apache POI支持03版以及07年版 區(qū)別是后綴不一樣,03版對應(yīng)的是xls 07版對應(yīng)的是xlsx xlsx
這里主要講解的是07版的
1.sheet表示的是
excel底部的工作表.
對應(yīng)的是POI的的XSSFSheet
2.row表示的是行
對應(yīng)的是POI的的XSSFRow
3.cell表示的是每一行的單元格.
對應(yīng)的是POI的的Cell
3 源碼 3.0 片段說明1.上傳文件使用springboot的MultipartFile
對應(yīng)
MultipartFile file
2.創(chuàng)建對象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
3.獲取sheet(默認(rèn)第一個(gè))
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);3.1 控制層源碼
@RequestMapping("/import") public void importExcel(@RequestParam("file") MultipartFile file) throws Exception{ InputStream inputStream = file.getInputStream(); //07年的 不兼容之前 XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream); XSSFSheet sheet = xssfWorkbook.getSheetAt(0); //獲取行數(shù) int lastRowNum = sheet.getLastRowNum(); for (int i = 1; i <= lastRowNum; i++) { XSSFRow row = sheet.getRow(i); QuChannel quChannel = new QuChannel(); if (row.getCell(0) != null){ row.getCell(0).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setChannel(row.getCell(0).getStringCellValue()); } if (row.getCell(1) != null){ row.getCell(1).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setChannelName(row.getCell(1).getStringCellValue()); } if (row.getCell(2) != null){ row.getCell(2).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setRemarks(row.getCell(2).getStringCellValue()); } if (row.getCell(3) != null){ quChannel.setChannelSource((int) row.getCell(3).getNumericCellValue()); } if (row.getCell(4) != null){ quChannel.setActivityType((int) row.getCell(4).getNumericCellValue()); } if (row.getCell(5) != null){ quChannel.setDeliveryTime(row.getCell(5).getDateCellValue()); } if (row.getCell(6) != null){ row.getCell(6).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setOriginalLink(row.getCell(6).getStringCellValue()); } if (row.getCell(7) != null){ row.getCell(7).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setSaLink(row.getCell(7).getStringCellValue()); } if (row.getCell(8) != null){ quChannel.setDeliveryMode((int) row.getCell(8).getNumericCellValue()); } if (row.getCell(9) != null){ quChannel.setCreateGroup((int) row.getCell(9).getNumericCellValue()); } if (row.getCell(10) != null){ row.getCell(10).setCellType(XSSFCell.CELL_TYPE_STRING); quChannel.setRemark(row.getCell(10).getStringCellValue()); } quChannelMapper.insert(quChannel); } }3.2 review
1.避免將sql寫在for循環(huán)里面,改進(jìn)的話可以創(chuàng)建一個(gè)列表list,將對象add進(jìn)去,然后在循環(huán)外面進(jìn)行批量插入
2.想要去重的話可以使用set的不能重復(fù)添加特性
3.注意excel的字段與類屬性的對應(yīng)關(guān)系,如果excel字段是string,但是累屬性是整形的話,可以使用枚舉類
暫時(shí)想到這么多 歡迎指教評論
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74912.html
摘要:總結(jié)整個(gè)過程的難點(diǎn)在于獲取文件對象,從數(shù)據(jù)中取值然后在按取出,這樣我們就可以從后臺(tái)上傳文件,然后進(jìn)行批量導(dǎo)入數(shù)據(jù)庫,其他數(shù)據(jù)格式只需要改和中的數(shù)據(jù)字段就可以 第一篇(從django后臺(tái)解析excel數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫) 文章會(huì)在github中持續(xù)更新 作者: knthony github 聯(lián)系我 1.django 如何從后臺(tái)上傳excel中批量解析數(shù)據(jù) 要從django后臺(tái)導(dǎo)入...
摘要:批量導(dǎo)入數(shù)據(jù)庫思想之一頁面上傳表格后臺(tái)解析表格的數(shù)據(jù)暫放數(shù)據(jù)結(jié)構(gòu)中或自己看情況處理,再把里面的數(shù)據(jù)批量存入數(shù)據(jù)庫。 批量導(dǎo)入數(shù)據(jù)庫思想之一:頁面上傳excel表格后臺(tái)解析excel表格的數(shù)據(jù)暫放數(shù)據(jù)結(jié)構(gòu)中(list或Map,自己看情況處理),再把list里面的數(shù)據(jù)批量存入數(shù)據(jù)庫。直接貼代碼: 前端: 文件描述: ...
摘要:然后封面就一個(gè)一個(gè)下啦是不是很方便具體源代碼在上有用的話記得星星 有時(shí)候會(huì)有這樣的需求吧 有一個(gè)表格里面有一批數(shù)據(jù)需要批量生成封面我們在瀏覽器里可以批量生成比如 showImg(https://segmentfault.com/img/bV67kB?w=2308&h=996); 我們有這樣一個(gè)表格需要生成圖書封面 showImg(https://segmentfault.com/img...
摘要:并且在對的抽象中,每一行,每一個(gè)單元格都是一個(gè)對象。對支持使用官方例子需要繼承,覆蓋方法,每讀取到一個(gè)單元格的數(shù)據(jù)則會(huì)回調(diào)次方法。概要Java對Excel的操作一般都是用POI,但是數(shù)據(jù)量大的話可能會(huì)導(dǎo)致頻繁的FGC或OOM,這篇文章跟大家說下如果避免踩POI的坑,以及分別對于xls和xlsx文件怎么優(yōu)化大批量數(shù)據(jù)的導(dǎo)入和導(dǎo)出。一次線上問題這是一次線上的問題,因?yàn)橐粋€(gè)大數(shù)據(jù)量的Excel導(dǎo)出...
閱讀 1261·2021-09-02 13:36
閱讀 2714·2019-08-30 15:44
閱讀 2972·2019-08-29 15:04
閱讀 3193·2019-08-26 13:40
閱讀 3643·2019-08-26 13:37
閱讀 1172·2019-08-26 12:22
閱讀 1003·2019-08-26 11:36
閱讀 1214·2019-08-26 10:41