Office Excel導入數據庫總結
阿新 • • 發佈:2017-12-07
定義 sets ref 跳轉 efault 過度 成員 表單 sts
項目是在SSH框架內實現:
使用的jar包
CDSN地址:http://download.csdn.net/download/lg_xulei/10148892
使用Maven:
pom.xml配置:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
項目maven做了限制導入,可以使用
<repositories> <repository> <id>central</id> <name>Maven Central Repository</name> <url>http://repo1.maven.org/maven2</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
具體JAVA實現:
包引用:
// 導入Excel public String ExcelInto() throws Exception { String directory = "/file"; String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);
//定義成員變量 File target = UploadFileInfo.Upload(uploadFile, uploadFileFileName,targetDirectory); List<DangerLevel> sList = new ArrayList<DangerLevel>(); /*Workbook wb = new HSSFWorkbook(excelFile);*/ Workbook wb=null;
//這個地方在第一次定義局部變量時,後臺報了一個stream關閉錯誤,是因為在try{}catch(){}時,
//第一次格式化數據沒通過,流通道關閉了,所以只能使用如下的方式進行數據導入 try { wb = new HSSFWorkbook(new FileInputStream(target)); } catch (OfficeXmlFileException e) { try { wb = new XSSFWorkbook(new FileInputStream(target)); } catch (Exception e2) { e2.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } Sheet sheet = wb.getSheetAt(0); int rowNum = sheet.getLastRowNum() + 1; for (int i = 3; i < rowNum; i++) { DangerLevel dangerLevel = new DangerLevel(); Row row = sheet.getRow(i); int cellNum = row.getLastCellNum(); for (int j = 0; j < cellNum; j++) { SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); Cell cell = row.getCell(j); String cellValue = null; switch (cell.getCellType()) { // 判斷excel單元格內容的格式,並對其進行轉換,以便插入數據庫 case HSSFCell.CELL_TYPE_NUMERIC:// 數字類型 if (HSSFDateUtil.isCellDateFormatted(cell)) {// 處理日期格式、時間格式 if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) { sdf = new SimpleDateFormat("HH:mm"); } else {// 日期 sdf = new SimpleDateFormat("yyyy-MM-dd"); } Date date = cell.getDateCellValue(); cellValue = sdf.format(date); } else if (cell.getCellStyle().getDataFormat() == 58) { // 處理自定義日期格式:m月d日(通過判斷單元格的格式id解決,id的值是58) sdf = new SimpleDateFormat("yyyy-MM-dd"); double value = cell.getNumericCellValue(); Date date = DateUtil.getJavaDate(value); cellValue = sdf.format(date); } else { double value = cell.getNumericCellValue(); CellStyle style = cell.getCellStyle(); DecimalFormat format = new DecimalFormat(); String temp = style.getDataFormatString(); // 單元格設置成常規 if (temp.equals("General")) { format.applyPattern("#"); } cellValue = format.format(value); } break; case HSSFCell.CELL_TYPE_STRING:// String類型 cellValue = cell.getRichStringCellValue().toString(); break; case HSSFCell.CELL_TYPE_BLANK: cellValue = ""; default: cellValue = ""; break; } switch (j) {// 通過列數來判斷對應插如的字段 case 0: dangerLevel.setNote1(cellValue); break; case 1: dangerLevel.setRummager(cellValue); break; case 2: dangerLevel.setCheckTime(sdf.parse(cellValue)); break; case 3: dangerLevel.setCheckType(cellValue); break; case 4: dangerLevel.setSpotName(cellValue); break; case 5: dangerLevel.setDangerDesc(cellValue); break; case 6: dangerLevel.setClassification(cellValue); break; case 7: dangerLevel.setDangerLevel(cellValue); break; case 8: dangerLevel.setDangerType(cellValue); break; case 9: dangerLevel.setIssuedTime(sdf.parse(cellValue)); break; case 10: dangerLevel.setIssuedMan(cellValue); break; case 11: dangerLevel.setRectifyPlan(cellValue); break; case 12: dangerLevel.setPostponedDeadLine(sdf.parse(cellValue)); break; case 13: dangerLevel.setRectifyUserName(cellValue); break; case 14: dangerLevel.setRectifyCompany(cellValue); break; case 15: dangerLevel.setRectifyResult(cellValue); break; case 16: dangerLevel.setRectifyTime(sdf.parse(cellValue)); break; case 17: dangerLevel.setRecheckerCompany(cellValue); break; case 18: dangerLevel.setRecheckerResult(cellValue); break; case 19: dangerLevel.setRecheckerName(cellValue); break; case 20: dangerLevel.setRecheckerTime(sdf.parse(cellValue)); break; case 21: dangerLevel.setClearName(cellValue); break; case 22: dangerLevel.setClearTime(sdf.parse(cellValue)); break; case 23: dangerLevel.setRecheckerName(cellValue); break; case 24: dangerLevel.setDangerLevelStatus(cellValue); break; case 25: dangerLevel.setFileName(cellValue); break; case 26: dangerLevel.setFilePath(cellValue); break; } } sList.add(dangerLevel); } dangerLevelService.addDangerLevel(sList); return "dangerLevel_middle"; }
package com.hfky.crs.busi.domain; import java.io.File; import java.io.Serializable; import org.apache.commons.io.FileUtils; public class UploadFileInfo implements Serializable { private static final long serialVersionUID = -3076586641759098763L; /** * 待上傳文件 */ private File upload; /** * 待上傳文件名 */ private String uploadFileName; /** * 待上傳文件的MIME類型 */ private String uploadContentType; /** * 成功上傳的文件相對與根目錄的文件名 */ private String uploadRelName; public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadRelName() { return uploadRelName; } public void setUploadRelName(String uploadRelName) { this.uploadRelName = uploadRelName; } public String getUploadFileName() { return uploadFileName; } public String getUploadContentType() { return uploadContentType; } public static File Upload(File uploadFile, String uploadFileFileName,String targetDirectory)throws Exception { File target = new File(targetDirectory, uploadFileFileName); // 如果文件已經存在,則刪除原有文件 if (target.exists()) { target.delete(); } // 復制file對象,實現上傳 FileUtils.copyFile(uploadFile, target); return target; } }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/resources/pages/system/inc-easyui.jsp"%> <html> <head> <base href="<%=basePath %>"/> <title>數據導入</title> <link href="styles/css/blue.css" type="text/css" rel="stylesheet" /> </head> <body class="crs_ep_tablebodybg"> <form action="danger!ExcelInto.action" enctype="multipart/form-data" method="post"> <table border="0" cellspacing="0" cellpadding="0" class="crs_ep_tablestyle"> <tr> <td colspan="99" id="more"> <input type="file" name="uploadFile" id="uploadFile"/> <input type="submit" value="上傳"/> <input type="reset" value="重置"/> </td> </tr> </table> </form> </body> </html>
這裏使用的是from表單提交,為了效果,在List頁面中使用的是Iframe,當Action導入完成return的是一個 result地址,所以關鍵問題是:上傳後不能關閉iframe頁面;
這裏使用一個非常不優雅的方式解決【JQuery版本低,用戶群使用IE8.9.10】:使用一個跳轉過度頁面,在這個過度頁面使用js關閉ifarem,和刷新List頁面。如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/resources/pages/system/inc-easyui.jsp"%> <html> <head> <base href="<%=basePath %>"/> <title>隱患數據導入</title> <link href="styles/css/blue.css" type="text/css" rel="stylesheet" /> <script type="text/javascript"> $(function(){
//獲取父也頁面對象 parent.document.getElementById(‘cancelBtn‘).click();
//獲取父頁面的id="cancelBtn".使用click()鼠標觸發事件。
parent.document.location.reload(); });
</script>
</head>
<body>
</body
</html>
Office Excel導入數據庫總結