JAVA上传EXCEL解析

后台Controller层用(@RequestParam("fileupload") MultipartFile fileuploa)接收

VO为:SysPurcInfoVo

代码如下:

@RequestMapping(value="/ImportExcel", produces = {"application/json;charset=UTF-8"}, method = {RequestMethod.POST})
@ResponseBody
public List<SysPurcInfoVo> pircInfoImportExcel(@RequestParam("fileupload") MultipartFile fileupload) {

    String fileName = fileupload.getOriginalFilename().substring(fileupload.getOriginalFilename().lastIndexOf(".") + 1).toLowerCase();
    List<SysPurcInfoVo> purcList = new ArrayList<>();
    if (fileName == null || (!fileName.equals("xls") && !fileName.equals("xlsx"))) {
        throw new CustomizeException("请导入xls或者xlsx的文件!");
    }
    try {
        List<List<Object>> lists = ImportsExcel.readExcel(fileupload);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for (int i = 0; i < lists.size(); i++) {
            //构建vo
            SysPurcInfoVo sysPurcInfoVo=new SysPurcInfoVo();
            sysPurcInfoVo.setTradTypeValue(((String) (lists.get(i).get(0))).trim());
           
            String s = sysPurcInfoService.selectTradType(sysPurcInfoVo.getTradTypeValue());
            sysPurcInfoVo.setTradType(s);
            sysPurcInfoVo.setTradNameValue(((String)(lists.get(i).get(1))).trim());
            
            String s1 = sysPurcInfoService.selectTradName(sysPurcInfoVo.getTradNameValue(),s);
            sysPurcInfoVo.setTradName(s1);
           
            sysPurcInfoVo.setSpecification(((String)(lists.get(i).get(2))).trim());
            sysPurcInfoVo.setMaterial(((String)(lists.get(i).get(3))).trim());
            sysPurcInfoVo.setPlace(((String)(lists.get(i).get(4))).trim());
            String regExp ="^\\d{1,9}(\\.\\d{1,4})?$";
            sysPurcInfoVo.setPurcNum(((String)(lists.get(i).get(5))).trim());
            String purcNum = sysPurcInfoVo.getPurcNum();
           
          
            sysPurcInfoVo.setDeliveryAddress(((String)(lists.get(i).get(6))).trim());
            sysPurcInfoVo.setRemarks(((String) lists.get(i).get(9)).trim());
            try {
                sysPurcInfoVo.setDeliveryDate((sdf.parse((String) lists.get(i).get(7))));
                sysPurcInfoVo.setClosingDate((sdf.parse((String) lists.get(i).get(8))));
            } catch (ParseException e) {
                e.printStackTrace();
            }

            
            purcList.add(sysPurcInfoVo);
        }
    } catch (IOException e) {
        throw new CustomizeException("导入失败");
    }
    return purcList;
}

这里不做持久化操作,返回给前端一个集合供页面展示。

 

附带一个读取Excel的工具类:

public class ImportsExcel {
    /**
     * 对外提供读取excel 的方法
     *
     */
public static List<List<Object>> readExcel(MultipartFile file) throws IOException {
   String extension= file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1).toLowerCase();

   if("xls".equals(extension)){
    return read2003Excel(file.getInputStream());
   }else if("xlsx".equals(extension)){
    return read2007Excel(file.getInputStream());
   }else{
    throw new IOException("不支持的文件类型");
   }
}
   /**
   * 读取 office 2003 excel
   * @throws IOException
   * @throws FileNotFoundException
   */
private static List<List<Object>> read2003Excel(InputStream stream) throws IOException {
   List<List<Object>> list = new LinkedList<List<Object>>();
   HSSFWorkbook hwb = new HSSFWorkbook(stream);
   HSSFSheet sheet = hwb.getSheetAt(0);
   Object value = null;
   HSSFRow row = null;
   HSSFCell cell = null;
   for(int i = sheet.getFirstRowNum()+1;i<= sheet.getPhysicalNumberOfRows();i++){
    row = sheet.getRow(i);
    if (row == null) {
     continue;
    }
    List<Object> linked = new LinkedList<Object>();
    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
     cell = row.getCell(j);
     if (cell == null) {
         linked.add("");
      continue;
     }
     DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
     DecimalFormat nf = new DecimalFormat("###.####");// 格式化数字
     switch (cell.getCellType()) {
     case XSSFCell.CELL_TYPE_STRING:
      value = cell.getStringCellValue();
      break;
     case XSSFCell.CELL_TYPE_NUMERIC:
      if("@".equals(cell.getCellStyle().getDataFormatString())){
         value = df.format(cell.getNumericCellValue());
      } else if("General".equals(cell.getCellStyle().getDataFormatString())){
        value = nf.format(cell.getNumericCellValue());
      }else{
        value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
      }
      break;
     case XSSFCell.CELL_TYPE_BOOLEAN:
      value = cell.getBooleanCellValue();
      break;
     case XSSFCell.CELL_TYPE_BLANK:
      value = "";
      break;
     default:
      value = cell.toString();
     }
     if (value == null || "".equals(value)) {
         linked.add("");
      continue;
     }
     linked.add(value);
   }
    list.add(linked);
   }
   return list;
}
   /**
   * 读取Office 2007 excel
   */
private static List<List<Object>> read2007Excel(InputStream stream) throws IOException {
   List<List<Object>> list = new LinkedList<List<Object>>();
   // 构造 XSSFWorkbook 对象,strPath 传入文件路径
   XSSFWorkbook xwb = new XSSFWorkbook(stream);
   // 读取第一章表格内容
   XSSFSheet sheet = xwb.getSheetAt(0);
   Object value = null;
   XSSFRow row = null;
   XSSFCell cell = null;
   for (int i = sheet.getFirstRowNum()+1; i <= sheet
     .getPhysicalNumberOfRows(); i++) {
    row = sheet.getRow(i);
    if (row == null) {
     continue;
    }
    List<Object> linked = new LinkedList<Object>();
    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
     cell = row.getCell(j);
     if (cell == null) {
         linked.add("");
      continue;
     }
     DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
     DecimalFormat nf = new DecimalFormat("###.####");// 格式化数字
     switch (cell.getCellType()) {
     case XSSFCell.CELL_TYPE_STRING:
      value = cell.getStringCellValue();
      break;
     case XSSFCell.CELL_TYPE_NUMERIC:
      if("@".equals(cell.getCellStyle().getDataFormatString())){
        value = df.format(cell.getNumericCellValue());
      } else if("General".equals(cell.getCellStyle().getDataFormatString())){
        value = nf.format(cell.getNumericCellValue());
      }else{
       value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
      }
      break;
     case XSSFCell.CELL_TYPE_BOOLEAN:
      value = cell.getBooleanCellValue();
      break;
     case XSSFCell.CELL_TYPE_BLANK:
      value = "";
      break;
     default:
      value = cell.toString();
     }
     if (value == null || "".equals(value)) {
         linked.add("");
         continue;
     }
     linked.add(value);
    }
    list.add(linked);
   }
   return list;
}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值