java excel上传

对于上传和下载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";
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java POI(Poor Obfuscation Implementation)是一个用于操作Microsoft Office格式文件的开源Java库。其中,POI提供了许多类和方法,用于创建、修改和读取Excel文件。 Excel文件的上传和下载是Web应用中常见的操作之一。在使用Java POI进行Excel上传和下载时,我们可以使用以下步骤: 1. Excel上传: 首先,我们需要在表单中添加一个文件上传字段,用户可以选择要上传Excel文件。在后台代码中,我们使用Apache Commons FileUpload库来处理表单提交。接收到Excel文件后,我们使用POI库的HSSFWorkbook类来创建Excel文件的工作簿对象,并通过HSSFSheet和HSSFRow类来创建工作表和行对象。接下来,我们可以使用HSSFCell类来创建单元格对象,并将单元格的值设置为Excel表格中的相应值。最后,我们通过将工作簿对象写入输出流来将Excel文件保存到服务器上的指定位置。 2. Excel下载: 要下载Excel文件,我们首先需要从服务器上获取要下载的Excel文件。我们可以使用Java的File类来打开Excel文件。然后,我们使用POI库的WorkbookFactory类来加载Excel文件,并创建Workbook对象。接下来,我们可以使用Workbook对象的getSheet方法来获取工作表对象。使用Sheet对象的getRow和getCell方法,我们可以获取单元格的值。最后,我们将Workbook对象写入输出流,以便用户可以通过下载链接下载Excel文件。 总结: 使用Java POI库可以方便地进行Excel文件的上传和下载操作。通过POI库的各种类和方法,我们可以轻松创建、修改和读取Excel文件。无论是在表单中上传Excel文件,还是从服务器下载Excel文件,Java POI都提供了简单而强大的解决方案。 ### 回答2: Java POI是一款用于操作Microsoft Office格式文件的开源库,其中包括Excel文件的读取和写入功能。下面我将简要介绍一下Java POI在Excel文件上传和下载方面的应用。 首先,Excel文件的上传指的是将本地的Excel文件上传到服务器,然后在服务器端进行进一步处理。可以使用Java POI库的HSSF和XSSF两个模块来处理.xls和.xlsx格式的Excel文件。通过POI的相关API,我们可以读取Excel文件中的数据,这些数据可以保存在Java程序中,也可以存储到数据库中等。 其次,Excel文件的下载指的是在服务器端生成一个Excel文件,然后将其提供给用户进行下载。Java POI库的用法也非常简单,我们可以使用POI的API创建Excel工作簿(Workbook)、工作表(Sheet)以及单元格(Cell),然后将数据填充到单元格中。最后通过将Workbook写入到文件输出流(OutputStream)中,即可生成Excel文件,供用户下载。 在具体的实现过程中,我们可以通过Java的Servlet技术结合POI来实现Excel文件的上传和下载。对于上传功能,可以使用Servlet的文件上传功能将Excel文件保存到服务器指定位置,然后使用POI进行解析和处理;对于下载功能,可以使用POI创建Excel文件后,将其通过ServletResponse提供给用户进行下载。 综上所述,通过Java POI库,我们可以方便地实现Excel文件的上传和下载功能,为用户提供更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值