1. 程式人生 > >Office Excel導入數據庫總結

Office Excel導入數據庫總結

定義 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導入數據庫總結