在前面提到用java代码新建一个Execl 表格并添加数据到表格中,

这次写了一个读取Execl表格数据并添加导数据库中的案列

给定对方一个Execl模板表格,如果导入的Execl表格和预订的表格不相符,给予对应的提示

如果全部都符合要求则把读取到的每一行数据对象添加到数据库中去(需考虑导入数量大小问题)

所需 jxl.jar 下载地址 http://pan.baidu.com/s/1pJsXKEJ

HTML代码

<div id="saveCustom">

<form action="<%=path%>/custom/testAction!addCustomByExcel.action" method="post" name="excelForm" id="excelForm" enctype="multipart/form-data">
<s:token name="token" id="token"/>      
  <table width="100%"  border="0" align="center" style="border-left: 1px #ccc solid; border-bottom: 1px #ccc solid;  border-right: 1px #ccc solid;  background-color: white;" >
        <tr>
            <td  height="60" class="title" colspan="2">Excel文档导入</td>
         </tr>
        <tr align="center">
            <td style="height: 60px;" >
                <span style="color: red; font-size: 14px;"><strong>请选择Excel文档1:</strong></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="file" name="customExcel" id="customExcel"/>

      <a href="<%=path + "/jsp/template.xls"%>" target="_blank"><span style="color: red"><strong>[模板下载]</strong></span</a>
                </br>
            </td>
        </tr>            
        <tr align="center">
            <td style="border-top: 1px #eee dashed; height: 40px;">
                <input type="submit" name="sub" value=" 提  交 " sytle="cursor: pointer;" class="sub"/>
                <input type="button" name="return" value="取  消" sytle="cursor: pointer;" onclick="$.unblockUI()"  class="sub"/>
            </td>
        </tr>
  </table>
</form>

</div>

//Action 控制层

private CustomService customService;//spring IOC注入service对象

private File customExcel;
    public File getCustomExcel() {
        return customExcel;
    }
    public void setCustomExcel(File customExcel) {
        this.customExcel = customExcel;
    }

public void setCustomService(CustomService customService)
    {
        this.customService = customService;
    }

public String addCustomByExcel() {
        String token = getP("token"); //拿到页面上传来的token值 防止重复提价导入
        String sessionToken=(String)getSession().getAttribute("struts.tokens.token");
        if(null!=sessionToken&&sessionToken.equals(token)){
            if (customExcel != null) {
                Long size = customExcel.length();//拿到上传文件的长度
                if (size > 1024 * 1024 * 5) {
                    getRequest().setAttribute("error", "请选择小于5M的文件!");
                    return "errorInfo";
                } else {
                    String result = customService.customByExcel(customExcel);
                    String[] results = result.split(":");//返回哪行哪列格式有误
                    if("5000Y1".equals(result)){
                        getRequest().setAttribute("error", "请下载新模板!");
                        return "errorInfo";
                    }
                    if (results.length == 1) {//导入文件操作提示
                        getRequest().setAttribute("info", "success");
                        getRequest().setAttribute("num",results[0]);
                    } else {
                        getRequest().setAttribute("error","第" + results[0] + "行,列名为\""+results[1]+"\"数据格式有问题,检查是否存在空格!");
                    }
                }
            } else {
                getRequest().setAttribute("error", "请选择一个要导入的excel文件!");
                return "errorInfo";
            }
        }else{
            getRequest().setAttribute("error", "请勿重复提交!");
            return "errorInfo";
        }
        return "errorInfo";
    }

//Service层

private HibernateTransactionManager transactionManager;//事物对象spring IOC注入
    public HibernateTransactionManager getTransactionManager() {
        return transactionManager;
    }
    public void setTransactionManager(HibernateTransactionManager transactionManager) {
        this.transactionManager = transactionManager;
    }

public String customByExcel(File customExcel) {
        Workbook wb = null;
        List<Custom>  customs=new ArrayList<Custom>();
        int rowNum = 0;//总行数
        String sgin="succeed";//表示导入表格当中的每一行都符合模板要求
        String errorRow="",errorCol="",result="";//标记错误数据在第几行  和那个字段 最终返回结果

//事物回滚处理
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            wb=Workbook.getWorkbook(customExcel);
            if(wb!=null){
                Sheet[] sheet=wb.getSheets();
                if(sheet != null && sheet.length > 0){
                    rowNum = sheet[0].getRows()-1;//拿到总行数
                    Cell[] cells2 = sheet[0].getRow(0);

        //查看必填列 列名字是否和模板一致
                    if(cells2.length != 9 || !"中文名".equals(cells2[0].getContents().replace(" ", "")) ||
                            !"性别".equals(cells2[2].getContents().replace(" ", "")) ||
                            !"证件类型".equals(cells2[3].getContents().replace(" ", "")) ||
                            !"证件号码".equals(cells2[4].getContents().replace(" ", "")) ||
                            !"所在国家".equals(cells2[5].getContents().replace(" ", ""))
                            ){
                        return "5000Y1";//模板格式不正确
                    }
                    
                    for(int i=1;i<rowNum;i++){
                        Cell[] cells = sheet[0].getRow(i);//拿到第一个表空间的第i列的数据
                        if(cells!=null && cells.length>0){
                            if ("pass".equals(colIsNotEmpty(cells))) {//必填字段都不等于空
                            Custom custom=new Custom();
                       //把读取到的数据填充到对象中、、、、、、、、、            
                            
                            System.out.println(cells[0].getContents().replace(" ", "").toString()+"::"
                                    +cells[1].getContents().replace(" ", "").toString()+"::"
                                    +cells[2].getContents().replace(" ", "").toString()+"::"
                                    +cells[3].getContents().replace(" ", "").toString()+"::"
                                    +cells[4].getContents().replace(" ", "").toString()+"::"
                                    +cells[5].getContents().replace(" ", "").toString()+"::"
                                    +cells[6].getContents().replace(" ", "").toString()+"::"
                                    +cells[7].getContents().replace(" ", "").toString()+"::"
                                    +cells[8].getContents().replace(" ", "").toString()
                                    );
                            customs.add(custom);
                            }else{
                                errorCol=colIsNotEmpty(cells);
                                errorRow=(i+1)+"";
                                sgin="failure";
                                break;
                            }
                        }
                    }
                  
                    if(sgin.equals("succeed")){//如果模板正确并且数据格式也符合要求就添加本次导入的数据
                        for(Custom c:customs){
                            customDao.saveCustom(c);
                        }
                        result=customs.size()+"";//返回成功添加条数
                        transactionManager.commit(status);
                    }else {
                        result=errorRow+":"+errorCol;//返回错误行和列信息
                    }
                }
            }
        } catch (Exception e) {
            transactionManager.rollback(status);//添加数据或者是其他发生异常回滚
            e.printStackTrace();
        }
        return result;
    }

//验证必填字段是否都符合要求,如果不符合要求则返回字段名称

public String colIsNotEmpty(Cell[] cells){
        if(!StringUtils.isNotEmpty(cells[0].getContents().replace(" ", ""))){
            return  "中文名";
        }
        if(!StringUtils.isNotEmpty(cells[2].getContents().replace(" ", ""))){
            return "性别";
        }
        if(!StringUtils.isNotEmpty(cells[3].getContents().replace(" ", ""))){
            return "证件类型";
        }
        if(!StringUtils.isNotEmpty(cells[4].getContents().replace(" ", ""))){
            return "证件号码";
        }
        if(!StringUtils.isNotEmpty(cells[5].getContents().replace(" ", ""))){
            return "所在国家";
        }
        return "pass";
    }

Java读取Execl表格数据的更多相关文章

  1. java利用poi来读取execl表格返回对象

    利用poi来读取execl表格,返回一个对象(可能有点不完善,但是应该能满足平常的所用),用到了反射等等; 使用的jar包有: commons-collections4-4.1.jar poi-3.1 ...

  2. Java读取excel表格

    Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建, ...

  3. xlrd模块-读取Execl表格

    #xlrd模块 读取execl表格 import xlrd Execl = xlrd.open_workbook(r'Z:\Python学习\python26期视频\day76(allure参数.读e ...

  4. Python读取execl表格

    读取execl表格 import xlrd Execl = xlrd.open_workbook(r'Z:\Python学习\python26期视频\day76(allure参数.读excel.发邮件 ...

  5. 通过java读取HDFS的数据 (转)

    原文链接:通过java读取HDFS的数据 通过JAVA直接读取HDFS中的时候,一定会用到FSDataInputStream类,通过FSDataInputStream以流的形式从HDFS读数据代码如下 ...

  6. java读取PHP接口数据的实现方法(四)

    PHP文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3 ...

  7. 利用 pandas库读取excel表格数据

    利用 pandas库读取excel表格数据 初入IT行业,愿与大家一起学习,共同进步,有问题请指出!! 还在为数据读取而头疼呢,请看下方简洁介绍: 数据来源为国家统计局网站下载: 具体方法 代码: i ...

  8. go读取excel表格数据

    go读取excel表格数据 使用工具 github.com/Luxurioust/excelize 百度到的都是使用这个 实际上已经改名了 github.com/360EntSecGroup-Skyl ...

  9. JAVA处理Excel表格数据并写入数据库

    package com.hncj.test; import java.io.FileInputStream; import java.sql.Connection; import java.sql.D ...

随机推荐

  1. UML 之 四种关系

    学习过UML的人都知道,UML之中有九种图和四种关系,今天,我们先来介绍一下这四种关系: 对于我们这些初学者来说,UML之中无非是  关联.依赖.泛化和实现,但是其中,关联和依赖又如何区分?泛化又如何 ...

  2. Android 在地图上画矩形

    point1=map.toMapPoint(400,426); point2=map.toMapPoint(600,640); initextext = new Envelope(point1.get ...

  3. 找规律 Codeforces Round #290 (Div. 2) A. Fox And Snake

    题目传送门 /* 水题 找规律输出 */ #include <cstdio> #include <iostream> #include <cstring> #inc ...

  4. 移动前端头部标签(HTML5 head meta)

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析html代码,更好地将移动web前端页面表现出来.本文整理一些常用的meta标签. <!DOCTYPE html&g ...

  5. ios retain 与 copy 的区别

    .retain 与copy区别 retain 的仅仅是引用计数加1,但是并没有创建新的对象.它们的指针是指向相同的内存地址. copy 是创建一个新的对象作为原来对象的副本,新创建出来的引用计数并没有 ...

  6. ACM: 还是畅通工程-并查集-最小生成树-解题报

    还是畅通工程 Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 某省调查乡村交通 ...

  7. InterBase数据库迁移到MySQL(数据导入)

    在这个脚本中我使用的是Python的ORM框架SQLAlchemy来连接远程的MySQL数据库的,在写这个脚本的时候为了方便参数的输入,我就给之前和这个脚本添加了一个新的功能,就是在调用这个脚本的时候 ...

  8. SQL中union运算操作的理解

    在SQL中,对于并运算,可以使用union关键字. 例如: SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FRO ...

  9. 【JAVA】 @override报错的解决方法

    有时候Java的Eclipse工程换一台电脑后编译总是@override报错,把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多. 原因:这是jdk的问 ...

  10. 状压dp题目总结

    这块比较薄弱.. 来几道水题: BZOJ1231: [Usaco2008 Nov]mixup2 混乱的奶牛 f[i][j]状态i结尾j的个数 ;i<=tot;i++) ;j<=n;j++) ...