好比咱們遇到一些須要把execl表格中的數據保存到數據庫中,一條一條保存效率底下並且容易出錯,數據量少還好,一旦遇到數據量大的時候就會累死我的啊,下面咱們就來把execl表格中數據保存到對應的數據庫中java
<div id="deploydiv"> <form id="ff" action="<%=request.getContextPath()%>/theta/file/fileReadExcel" method="post" enctype="multipart/form-data"> <table align="center"> <tr> <td>文件:</td> <td><input name="file" class="f1 easyui-filebox"/> <!-- <input name="op" type="hidden" id="op"/></td> --> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="提交"></input></td> </tr> </table> </form> </div>
jsp頁面寫好以後,進入Controller具體實現類數據庫
@RequestMapping("/fileReadExcel") @ResponseBody public AjaxCommonResultBean getFileReadExcel(@RequestParam MultipartFile file){ AjaxCommonResultBean res = new AjaxCommonResultBean(); boolean result = filereadservice.readExcelFile(file); if(result){ res.setSuccess(true); res.setMessage("提交成功"); }else{ res.setSuccess(false); res.setMessage("提交失敗"); } return res; }
具體實現類app
public boolean readExcelFile(MultipartFile file) { boolean result =false; List<fileReadBean> fileList = getExcelInfo(file); if(fileList != null && !fileList.isEmpty()){ result = true; }else{ result = false; } return result; } public List<fileReadBean> getExcelInfo(MultipartFile file) { String fileName = file.getOriginalFilename();//獲取文件名 String ext = fileName.substring(fileName.lastIndexOf(".")); try { if (!validateExcel(fileName)) {// 驗證文件名是否合格 return null; } List<fileReadBean> fileList = createExcel(file.getInputStream(),ext); return fileList; } catch (Exception e) { e.printStackTrace(); } return null; } private List<fileReadBean> createExcel(InputStream is,String ext) { try{ HSSFWorkbook wb = null; XSSFWorkbook xwb = null; List<fileReadBean> fileList = null; if(".xls".equals(ext)){ //HSSF方式獲取文件 wb = new HSSFWorkbook(is); fileList = readExcelValue(wb); // 讀取Excel裏面客戶的信息 }else if(".xlsx".equals(ext)){ //XSSF方式獲取文件 xwb = new XSSFWorkbook(is); fileList = readXExcelValue(xwb); } return fileList; } catch (IOException e) { e.printStackTrace(); } return null; } private List<fileReadBean> readXExcelValue(XSSFWorkbook xwb) { List<fileReadBean> fileList = new ArrayList<fileReadBean>(); for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) { XSSFSheet xssfSheet = xwb.getSheetAt(numSheet); if (xssfSheet == null) { continue; } // 循環行Row for (int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++) { XSSFRow xssfRow = xssfSheet.getRow(rowNum); if (xssfRow == null) { continue; } int num=fileReaddao.findSame(getValue(xssfRow.getCell(1))); // 循環列Cell // for (int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++) { // XSSFCell xssfCell = xssfRow.getCell(cellNum); // if (xssfCell == null) { // continue; // } // System.out.print(" " + getValue(xssfCell)); // } if(rowNum > 3 && num < 1){ fileReadBean fileread = new fileReadBean(); fileread.setId(UUID.randomUUID().toString()); fileread.setTransactionDate(getValue(xssfRow.getCell(0))); fileread.setTransationId(getValue(xssfRow.getCell(1))); fileread.setRemark(getValue(xssfRow.getCell(2))); fileread.setOtherBankId(getValue(xssfRow.getCell(3))); fileread.setOtherBankName(getValue(xssfRow.getCell(4))); fileread.setTransfer(getValue(xssfRow.getCell(5))); fileread.setPayment(getValue(xssfRow.getCell(6))); fileread.setReceived(getValue(xssfRow.getCell(7))); fileread.setBalance(getValue(xssfRow.getCell(8))); fileReaddao.insertFileRead(fileread); //把文件中的數據插入數據庫 fileList.add(fileread); } } } return fileList; } private List<fileReadBean> readExcelValue(HSSFWorkbook wb) { List<fileReadBean> fileList = new ArrayList<fileReadBean>(); for (int numSheet = 0; numSheet < wb.getNumberOfSheets(); numSheet++) { HSSFSheet hssfSheet = wb.getSheetAt(numSheet); if (hssfSheet == null) { continue; } // 循環行Row for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { HSSFRow hssfRow = hssfSheet.getRow(rowNum); if (hssfRow == null) { continue; } //查詢是否有重複的交易號 int num=fileReaddao.findSame(getValue(hssfRow.getCell(1))); // 循環列Cell // for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) { // HSSFCell hssfCell = hssfRow.getCell(cellNum); // if (hssfCell == null) { // continue; // } // 循環列Cell if(rowNum > 3 && num < 1){ fileReadBean fileread = new fileReadBean(); fileread.setId(UUID.randomUUID().toString()); fileread.setTransactionDate(getValue(hssfRow.getCell(0))); fileread.setTransationId(getValue(hssfRow.getCell(1))); fileread.setRemark(getValue(hssfRow.getCell(2))); fileread.setOtherBankId(getValue(hssfRow.getCell(3))); fileread.setOtherBankName(getValue(hssfRow.getCell(4))); fileread.setTransfer(getValue(hssfRow.getCell(5))); fileread.setPayment(getValue(hssfRow.getCell(6))); fileread.setReceived(getValue(hssfRow.getCell(7))); fileread.setBalance(getValue(hssfRow.getCell(8))); fileReaddao.insertFileRead(fileread); //把文件中的數據插入數據庫 fileList.add(fileread); } /* for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) { HSSFCell hssfCell = hssfRow.getCell(cellNum); System.out.print(" " + getValue(hssfCell)); }*/ } } return fileList; } @SuppressWarnings("static-access") private String getValue(XSSFCell xssfCell) { if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) { return String.valueOf(xssfCell.getBooleanCellValue()); } else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) { return String.valueOf(xssfCell.getNumericCellValue()); } else { return String.valueOf(xssfCell.getStringCellValue()); } } @SuppressWarnings("static-access") private String getValue(HSSFCell hssfCell) { if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) { return String.valueOf(hssfCell.getNumericCellValue()); } else { return String.valueOf(hssfCell.getStringCellValue()); } } //驗證文件名是否合格 private boolean validateExcel(String fileName) { if (fileName == null) { String errorMsg = "文件名不是excel格式"; return false; } return true; }
這樣就能夠把execl表格中的數據所有保存到數據庫中了!若有不當之處請多多指正,一塊兒交流,共同窗習!dom