Office Excel导入数据库总结

项目是在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>
时间: 2024-10-12 11:29:10

Office Excel导入数据库总结的相关文章

Java实现Excel导入数据库,数据库中的数据导入到Excel

实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1.添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2.Excel文件目录:D://book.xls 3.数据库名:javenforexcel 4.表名:stu 5.编写类:连接mysql的字符串方法.插入的方法.实体类­­ 表结构如下 : 连接数据库的工具类 package com.javen.db; import java.sql.Co

.NET网站本机调试通过、发布后EXCEL导入数据库报错问题的解决

近期做了一个EXCEL导入数据库的页面,在VS2012本机调试中导入XLS\XLSX均顺利通过,但在WEB环境下导入时均出错! 在网上查了相关资料,最有可能的原因是 DCOM 中EXCEL应用程序权限配置的问题. (DCOM基于组件对象模型(COM),COM提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口) 配置步骤(本机win8.1 64Bit Office2010 64Bit): 1. 运行-dcomcnfg-组件服务-计算机-我的电脑-DCOM配置-找到 Micosoft E

Java实现Excel导入数据库,数据库中的数据导入到Excel。。转载

自学资料总结 实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1.添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2.Excel文件目录:D://book.xls 3.数据库名:javenforexcel 4.表名:stu 5.编写类:连接mysql的字符串方法.插入的方法.实体类­­ 表结构如下 : 连接数据库的工具类 package com.javen.db; import java

记录-java(jxl) Excel导入数据库

本内容主要包括(文件上传.excel2003数据导入数据库)excel导入数据库功能需要jxl  jar包支持 下面是文件上传的前端测试代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.

ASP.NET实现excel导入数据库

ASP.NET实现excel导入数据库原创Mr_周先生 最后发布于2018-03-27 18:56:02 展开1:说明:此方法建立在已经实现数据库的插入功能上 2:注解:2.1:新建一个文件夹存放excel文件(见example.aspx.cs的GetExcel()方法) 2.2:控件 2.3:excel表格式(excel表头与数据库表字段对应) 2.4:修改数据库插入方法(见example.aspx.cs的InsetData()方法) 3:步骤:1:前台控件: 1.1:FileUpload:

POI实现Excel导入数据库数据

POI实现Excel导入数据库数据 首先看一下我们导入的数据Excel中的数据格式是什么 ?上面是我们的一个数据导入时的模板信息,我们需要按照这样过的格式导入数据库数据. 针对这样的数据格式可以通过ReadExcelUtils的工具类去读取到 ReadExcelUtils readExcelUtils = new ReadExcelUtils(file.getInputStream(),fileName); 通过上述代码我们可以获取到ReadExcelUtils对象,再调用其readExcelL

asp.net 中excel 导入数据库

protected void Button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LYConnectionString"].ConnectionString); ;//链接数据库 conn.Open(); try { string fileurl = t

Excel导入数据库脚本

--数据库中不存在需要导入的表 SELECT * INTO tab_PurchasePriceTemp FROM OPENROWSET( 'Microsoft.Jet.OLEDB.4.0', 'EXCEL 5.0;HDR=YES;IMEX=1; DATABASE=D:\A.xls',Sheet2$) --出现  SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset错误   解决方案 --启用Ad Hoc Dis

PHP将Excel导入数据库以及数据库数据导出至Excel

一.导入 导入需要使用能读取Excel的组件,网上也有比较好的组件,这里分享我使用的:下载  提取码:vxyn.(注意两个文件有引用关系) <?php //传入要导入的Excel的文件名 function import_to_DB($filename) { require_once'reader.php'; $data = new Spreadsheet_Excel_Reader(); //创建读取Excel的对象 $data->setOutputEncoding('utf-8'); //设置