读取excel文件,拿出第一列的电话号码

现在有个功能,是从前台上传excel文件,后台接收文件流,然后读取excel文件,获取第一列的数据。

1.前台(上传文件,提交到后台)

<form action="saveSendMessage.jhtml" method="post" enctype="multipart/form-data" >
    上传文件:<input type="file" name="filename"  />
    <input type="submit" value="提交" />
</form>

2.后台(在controller层接收文件,处理获取数据,存到List里面)

    //总行数
    private int totalRows = 0;  
    //总条数
    private int totalCells = 0; 
    //错误信息接收器
    private String errorMsg;
    //构造方法
    //获取总行数
    public int getTotalRows()  { return totalRows;} 
    //获取总列数
    public int getTotalCells() {  return totalCells;} 
    //获取错误信息
    public String getErrorInfo() { return errorMsg; }  
	
	/*上传excel文件,获取电话号码*/
	@RequestMapping(value = "/getPhoneList",headers = "content-type=multipart/*", method = RequestMethod.POST)
	@ResponseBody
	public List<String> getPhoneList(@RequestParam(value="fileName") MultipartFile file) {
	  
	  //判断文件是否为空
      if(file==null) return null;
      
      //获取文件名
      String name=file.getOriginalFilename();
      
      //进一步判断文件是否为空(即判断其大小是否为0或其名称是否为null)
      long size=file.getSize();
      if(name==null || ("").equals(name) && size==0) return null;
      
      //解析excel,获取客户信息集合。
      List<String> stringList = getExcelInfo(name ,file);
      
	  return stringList;
	}
	

	private List<String> getExcelInfo(String fileName, MultipartFile Mfile) {
	   //把spring文件上传的MultipartFile转换成CommonsMultipartFile类型
       CommonsMultipartFile cf= (CommonsMultipartFile)Mfile; //获取本地存储路径
       File file = new  File("D:\\fileupload");
       //创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
       if (!file.exists()) file.mkdirs();
       //新建一个文件
       File file1 = new File("D:\\fileupload" + new Date().getTime() + ".xlsx"); 
       //将上传的文件写入新建的文件中
       try {
           cf.getFileItem().write(file1); 
       } catch (Exception e) {
           e.printStackTrace();
       }
       
       //初始化客户信息的集合    
       List<String> stringList=new ArrayList<String>();
       //初始化输入流
       InputStream is = null;  
       try{
          //验证文件名是否合格
          if(!validateExcel(fileName)){
              return null;
          }
          //根据文件名判断文件是2003版本还是2007版本
          boolean isExcel2003 = true; 
          if(isExcel2007(fileName)){
              isExcel2003 = false;  
          }
          //根据新建的文件实例化输入流
          is = new FileInputStream(file1);
          //根据excel里面的内容读取客户信息
          stringList = getExcelInfo(is, isExcel2003); 
          is.close();
      }catch(Exception e){
          e.printStackTrace();
      } finally{
          if(is !=null)
          {
              try{
                  is.close();
              }catch(IOException e){
                  is = null;    
                  e.printStackTrace();  
              }
          }
      }
      return stringList;
	}
	
	/**
                   * 验证EXCEL文件
      */
    public boolean validateExcel(String filePath){
        if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))){  
            errorMsg = "文件名不是excel格式";  
            return false;  
        }  
        return true;
    }
    
	// @描述:是否是2003的excel,返回true是2003 
	private boolean isExcel2003(String filePath) {
		return filePath.matches("^.+\\.(?i)(xls)$");  
	}
	
	//@描述:是否是2007的excel,返回true是2007 
	private boolean isExcel2007(String filePath) {
		return filePath.matches("^.+\\.(?i)(xlsx)$");  
	}

	/**
	   * 根据excel里面的内容读取客户信息
	   * @param is 输入流
	   * @param isExcel2003 excel是2003还是2007版本
	   */
	private List<String> getExcelInfo(InputStream is, boolean isExcel2003) {
	   List<String> stringList=null;
       try{
           /** 根据版本选择创建Workbook的方式 */
           Workbook wb = null;
           //当excel是2003时
           if(isExcel2003){
               wb = new HSSFWorkbook(is); 
           }
           else{//当excel是2007时
               wb = new XSSFWorkbook(is); 
           }
           //读取Excel里面客户的信息
           stringList=readExcelValue(wb);
       }
       catch (IOException e)  {  
           e.printStackTrace();  
       }  
       return stringList;
	}
	
	/**
	   * 读取Excel里面客户的信息
     */
	private List<String> readExcelValue(Workbook wb) {
	   //得到第一个shell  
       Sheet sheet=wb.getSheetAt(0);
       
       //得到Excel的行数
       this.totalRows=sheet.getPhysicalNumberOfRows();
       
       //得到Excel的列数(前提是有行数)
       if(totalRows>=1 && sheet.getRow(0) != null){
            this.totalCells=sheet.getRow(0).getPhysicalNumberOfCells();
       }
       
       List<String> stringList=new ArrayList<String>();
       String str;            
       //循环Excel行数,从第二行开始。标题不入库
       for(int r=1;r<totalRows;r++){
           Row row = sheet.getRow(r);
           if (row == null) continue;
           str = new String();
           
           //循环Excel的列
           for(int c = 0; c <this.totalCells; c++){    
               Cell cell = row.getCell(c);
               cell.setCellType(Cell.CELL_TYPE_STRING); 
               if (null != cell){
                   if(c==0){//读取第一列的电话号码
                	   str = cell.getStringCellValue();
                   }
               }
           }
           
           //添加客户
           stringList.add(str);
       }
       return stringList;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值