`
zengshaotao
  • 浏览: 787632 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java excel上传

    博客分类:
  • java
 
阅读更多

对于上传和下载excel文件,程序开发里经常用到,这里只做简要总结:

 

  boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  if(isMultipart == false) {
   throw new IOException("HTTP request does not contains multipart content!");
  }
  
  DiskFileItemFactory factory = new DiskFileItemFactory();

  factory.setSizeThreshold(10240);
  ServletFileUpload upload = new ServletFileUpload(factory);

  
  try {
   List<FileItem> items = upload.parseRequest(request);
   
   Iterator<FileItem> iter = items.iterator();
   while (iter.hasNext()) {
       FileItem item = iter.next();

       if (item.isFormField() == false) {
        //String fieldName = item.getFieldName();
        //boolean isInMemory = item.isInMemory();
        //item may return the absolute full path name. we only need the last name
           String fileName = item.getName();
           InputStream uploadedStream = item.getInputStream();
           request.setAttribute("fileName", fileName);
           request.setAttribute("inputStream", uploadedStream);
       }
   }
  } catch (FileUploadException e) {
   throw new IOException(e);
  }

 

注意:这里的文件名是包含路径的,需要进行解析

int flag = fileName.lastIndexOf('/');

if(flag<0)flag = fileName.lastIndexOf('\\');

 

if(flag>=0)

return fileName.substring(flag+1)

else

return fileName;

 

有了文件名后,可以区分2003和2007及以后的版本了。

对于jxl,只能解析2003的版本。对于poi,两个版本都支持。但是对于非官方的excel文档,解析是有问题的

需要重新下载 poi-bin-3.8-20120326.zip文件,下载之后解压,拷贝相关的jar到lib目录即可。

 

 

public String upload() throws Exception{
  
   
   XSSFWorkbook rwb = null;
  HSSFWorkbook hwb = null;
  InputStream io = (InputStream)request.getAttribute("inputStream");
  String fileName = (String)request.getAttribute("fileName");
  
  String fileExpName = fileName.substring(fileName.indexOf(".")+1);
  
  if(Constant.EXCEL2003_EXTENSION.equals(fileExpName)){
   versionFlag = Constant.EXCEL_VERSION_2003;
  }else if(Constant.EXCEL2007_EXTENSION.equals(fileExpName)){
   versionFlag=Constant.EXCEL_VERSION_2007;
  }else{
   request.setAttribute("resMsg","上传的文件格式应该是excel文件,请重新选择!");
   return "success";
   //throw new Exception("上传的文件格式不正确,请重新选择!");
  }
  List<PotentialCustomerInfoVO> potentialCustomerInfoList = new ArrayList<PotentialCustomerInfoVO>();
  
  try{
   
   if(Constant.EXCEL_VERSION_2007.equals(versionFlag)){
    
    rwb = new XSSFWorkbook(io);
    XSSFSheet sheet = rwb.getSheetAt(0);
    //得到所有的行
    int rows = sheet.getLastRowNum();
    
    if(rows>10000){
     request.setAttribute("resMsg","导入的数据不能超过一万条!!!");
     return "success";
    }
    //得到excel数据
    for(int i=2;i<=rows;i++){
     
     XSSFRow row = sheet.getRow(i);
     
     if(row !=null){
      
      PotentialCustomerInfoVO pcv = new PotentialCustomerInfoVO();
      
      int cols = row.getLastCellNum();
      
      if(cols!=8){
                      request.setAttribute("resMsg","上传的excel文件第"+(i+1)+"行不能有空字段!");
                   return "success";
                         
      }
      //读取列数
      for (int k = 0; k < cols; k++) {
       
                         XSSFCell cell = row.getCell((short)k);  
                         if (null != cell) {
                          String ret = changeToString(cell.getCellType(), cell);
                          switch(k){
                           case 0:
                            //车主姓名
                   pcv.setCustomerName(ret);
                            break;
                           case 1:
                            //证件类型
                            String tempValue = "";
                            if(Constant.CERTITYPE_TEXT_SFZ.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_SFZ;
                            }else if(Constant.CERTITYPE_TEXT_JGZ.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_JGZ;
                            }else if(Constant.CERTITYPE_TEXT_HZ.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_HZ;
                            }else if(Constant.CERTITYPE_TEXT_QT.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_QT;
                            }
                   pcv.setCertiType(tempValue);
                            break;
                           case 2:
                                            pcv.setCertiCode(ret);
                            break;
                           case 3:
                                             pcv.setLicenceNumber(ret);
                            break;
                           case 4:
                                               pcv.setVin(ret);
                            break;
                           case 5:
                                             pcv.setEngineNumber(ret);
                            break;
                           case 6:
                                           pcv.setDriverNumber(ret);
                            break;
                           case 7:
                                        pcv.setF_1(ret);
                            break;
                           default:
                             break;
                          }
                         }else{
           //行内有空字段
                       request.setAttribute("resMsg","上传的excel文件第"+(i+1)+"行不能有空字段!");
                    return "success";
          }
      }
      potentialCustomerInfoList.add(pcv);
     }
    }// for rows
   }else if(Constant.EXCEL_VERSION_2003.equals(versionFlag)){
    
    hwb = new HSSFWorkbook(io);
    
    HSSFSheet sheet = hwb.getSheetAt(0);
    //得到所有的行
    int rows = sheet.getLastRowNum();
    
    if(rows>10000){
     request.setAttribute("resMsg","导入的数据不能超过一万条!!!");
     return "success";
    }
    //得到excel数据
    for(int i=2;i<=rows;i++){
     
     HSSFRow row = sheet.getRow(i);
     
     
     if(row !=null){
      
      int cols = row.getLastCellNum();
      
      if(cols!=8){
                   request.setAttribute("resMsg","上传的excel文件第"+(i+1)+"行不能有空字段!");
                return "success";
                      
      }
      
      PotentialCustomerInfoVO pcv = new PotentialCustomerInfoVO();
      
      //读取列数
      for (int k = 0; k < cols; k++) {
       
                         HSSFCell cell = row.getCell((short)k);  
                         if (null != cell) {
                          String ret = changeToString(cell.getCellType(), cell);
                          switch(k){
                           case 0:
                            //车主姓名
                   pcv.setCustomerName(ret);
                            break;
                           case 1:
                            //证件类型
                            String tempValue = "";
                            if(Constant.CERTITYPE_TEXT_SFZ.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_SFZ;
                            }else if(Constant.CERTITYPE_TEXT_JGZ.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_JGZ;
                            }else if(Constant.CERTITYPE_TEXT_HZ.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_HZ;
                            }else if(Constant.CERTITYPE_TEXT_QT.equals(ret)){
                             tempValue = Constant.CERTITYPE_VALUE_QT;
                            }
                   pcv.setCertiType(tempValue);
                            break;
                           case 2:
                                              pcv.setCertiCode(ret);
                            break;
                           case 3:
                                               pcv.setLicenceNumber(ret);
                            break;
                           case 4:
                                           pcv.setVin(ret);
                            break;
                           case 5:
                                              pcv.setEngineNumber(ret);
                            break;
                           case 6:
                                             pcv.setDriverNumber(ret);
                            break;
                           case 7:
                                            pcv.setF_1(ret);
                           default:
                             break;
                          }
                         }else{
                       request.setAttribute("resMsg","上传的excel文件第"+(i+1)+"行不能有空字段!");
                    return "success";
          }
      }
      potentialCustomerInfoList.add(pcv);
     }
    }
   }
     
   //对组装的list数据进行导入,也就是保存
      
   
   
  }catch(Exception e){
   e.printStackTrace();
   request.setAttribute("resMsg","上传出错,请联系系统管理员!");
   throw new Exception(e.getMessage());
  }
  
  return "success";
 }

 

分享到:
评论

相关推荐

    java excel 上传 处理 模板

    本篇文章将深入探讨如何使用Java进行Excel文件的上传和处理,主要围绕标题“java excel 上传 处理 模板”展开,结合标签“java”、“excel”和“上传”,我们将详细讲解相关的知识点。 首先,Java处理Excel文件通常...

    java Excel上传 Excel数据处理

    "java Excel上传 Excel数据处理"这个主题涵盖了如何使用Java来接收并处理Excel文件的关键知识点。以下是对这些核心概念的详细阐述: 1. **Maven依赖**:在Java项目中处理Excel文件,通常会用到Apache POI库。首先,...

    java excel 上传下载

    这是一个在java中实现对excel表格的上传下载的一个处理,很基础的内容

    Excel上传并解析java对象

    在IT行业中,Excel上传并解析Java对象是一项常见的数据处理任务,尤其在数据分析、报表生成以及数据导入导出等场景中尤为常见。这个过程涉及到的主要技术包括文件上传、Excel读取、数据转换以及Java对象映射。下面将...

    java 将excel里面的数字时间转化为准确的时间格式

    java 将excel里面的数字时间转化为准确的时间格式;具体来源有点忘记了,实现是摘自了开源代码里面的一段。

    java上传excel并且解析入库

    在Java开发中,上传并解析Excel文件是一种常见的需求,特别是在数据处理、报表导入或系统集成等场景。本篇文章将深入探讨如何实现这个功能,主要涉及的技术包括文件上传、Excel解析以及数据库操作。 首先,我们需要...

    Excel上传解析组件

    "Excel上传解析组件"是一种专为处理Excel文件上传和解析任务设计的技术组件。它简化了在应用程序中处理Excel数据的过程,使得开发人员可以快速、高效地读取、写入或操作Excel表格数据,而无需深入了解Excel文件格式...

    上传下载Excel的Demo,java代码

    标题 "上传下载Excel的Demo,java代码" 描述了这个示例项目的核心功能,即在Java环境下处理Excel文件的上传和下载操作。这通常涉及到Web应用程序中的数据导入导出功能,便于用户通过浏览器进行数据的交互。在这个项目...

    java上传并读取excel工具类

    本篇文章将深入探讨如何使用Java实现Excel文件的上传和读取,重点关注`MultiFile`转换为`File`以及处理多Sheet页的技巧。 首先,我们需要了解Java中处理Excel的库。Apache POI是一个广泛使用的开源库,它提供了API...

    JAVA 中excel的上传下载

    在Java开发中,处理Excel文件的上传和下载是常见的需求,尤其在数据...通过以上步骤和技巧,你可以在Java项目中实现高效且健壮的Excel上传和下载功能。理解这些核心概念和技术,对于处理Java中的Excel操作至关重要。

    POI实现的excel的上传下载

    Excel上传通常涉及到以下步骤: - **文件上传接收**:首先,你需要在服务器端设置一个接口,通过HTTP请求接收用户上传的Excel文件。这可以通过Servlet或Spring MVC等框架实现。 - **解析文件**:接收到文件后,使用...

    Java 基于poi-3.7的Excel上传工具包(Util)

    Java基于Apache POI-3.7的Excel上传工具包是一个实用的库,它允许开发者在Java应用程序中方便地处理Excel文件。Apache POI是Apache软件基金会的一个开源项目,专门用于读写Microsoft Office格式的文件,其中包括...

    java实现excel文件上传

    excel文件上传(代码)! excel文件上传(代码)! excel文件上传(代码)! excel文件上传(代码)! excel文件上传(代码)! excel文件上传(代码)!

    java版excel解析,并上传至mysql数据库

    在Java编程环境中,将Excel数据解析并上传到MySQL数据库是一项常见的任务,特别是在数据处理和导入导出场景下。本项目提供了完整的解决方案,包括所需的jar包、数据库SQL语句以及一个可直接在Eclipse环境中运行的...

    java_Excel上传数据到Oracle数据库

    在Java编程环境中,将Excel数据上传到Oracle数据库是一项常见的任务,尤其在数据处理和系统集成中。本项目涉及的关键技术包括Java、jxl库(用于处理Excel文件)和Oracle数据库的连接与操作。以下是对这些知识点的...

    java解析excel并做数据有效性校验

    在Java编程中,解析Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Excel文件格式主要有两种:老式的`.xls`(基于BIFF格式)和较新的`.xlsx`(基于Open XML标准)。本篇将详细介绍如何...

    生成excel并上传至S3

    生成excel并上传到S3.不需要真正的生成excel文件,只需要拿到byte

    java poi excel上传 下载

    在“java poi excel上传下载”这个场景中,我们可以讨论以下几个关键知识点: 1. **Java POI API**:POI 提供了一套完整的API,允许开发者创建、修改和显示Excel工作簿、工作表、单元格等。主要类包括`HSSFWorkbook...

    Java生成excel表格设置公式并填充数据

    Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...

    java实现在Excel中插入图片

    在Java编程环境中,实现将图片插入到Excel文件中是一项常见的任务,特别是在数据分析、报表生成或者自动化办公场景下。本文将详细讲解如何使用Java来完成这一功能,主要涉及到Apache POI库的应用。 Apache POI是一...

Global site tag (gtag.js) - Google Analytics