首页 > 代码库 > poi excel文件上传并解析xls文件

poi excel文件上传并解析xls文件

1.jsp页面

<form action="hw/pe_xls_upload" method="post" enctype="multipart/form-data" >    <table>        <tr>            <td>导入硬件序列号/密码Excel文件:</td>            <td><input name="hwFile" type="file"/>&nbsp;&nbsp;</td> <!-- style="width: 400px;height: 25px;" -->            <td><input type="submit" value="上传导入并激活" onclick="javascript:layer.alert(‘正在处理中‘, 16);"/></td>        </tr>    </table>    </form>

2.controller控制器

@RequestMapping("pe_xls_upload")    public String hwXlsUpload(@RequestParam("hwFile") MultipartFile hwFile, HttpServletRequest request){        String msg = "";        if(!hwFile.isEmpty()){            String fileType = hwFile.getContentType();            System.err.println("fileType:" + fileType);            if(!fileType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !fileType.equals("application/vnd.ms-excel") ){                logger.error("上传文件类型错误!fileType:{}", fileType);                msg = "上传文件类型错误";            }else{                try{                    String basePath = SysConf.CON_IMAGE_DIR + "upload/";                    java.io.File dir = new java.io.File(basePath);                    if(!dir.exists()){                        dir.mkdir();                    }                    String fileName = basePath + hwFile.getOriginalFilename();                    File file = new File(fileName);                    FileUtils.writeByteArrayToFile(file, hwFile.getBytes());                    if(file.exists()){                        //Excel文件操作                        Map<String, String> map = null;                        map = CarHwXls.readXls(fileName);                        /*for (Map.Entry<String, String> entry : map.entrySet()){                            System.err.println("$$entry.getKey():" + entry.getKey() + " --- " + entry.getValue());                        }*/                                                //1.硬件导入和激活                        CarHwApiNew.insertHwPsw(map);                        //2.硬件导入和激活                        CarHwApiNew.activeHwCar();                                                msg = "文件上传成功,并导入和激活设备序列号和密码信息成功完成";                    }else{                        msg = "文件上传失败";                    }                }catch(Exception e){                    logger.error("添加硬件设备号:", e);                    msg = e.getMessage();                }            }        }else{            msg = "请选择上传文件";        }                request.setAttribute("msg", msg);        queryHwList(new CarHwSearchBean(),request);                return "hw/list";    }

3.xls工具类

public class CarHwXls {    private static Logger logger = LoggerFactory.getLogger(CarHwXls.class);        /**     * 读取xls文件内容     *      * @return List<XlsDto>对象     * @throws IOException     *             输入/输出(i/o)异常     */    public static Map<String, String> readXls(String xlspath) throws IOException {        Map<String, String> map = new HashMap<String, String>();        /** 检查文件名是否为空或者是否是Excel格式的文件 */           if (xlspath == null || !(WDWUtil.isExcel2003(xlspath) || WDWUtil.isExcel2007(xlspath)))          {              logger.info("文件名不是excel格式");            map.put("msg", "文件名不是excel格式");            return map;          }            /** 检查文件是否存在 */          File file = new File(xlspath);          if (file == null || !file.exists())          {              logger.info("文件不存在");            map.put("msg", "文件不存在");            return map;         }                  InputStream is = new FileInputStream(xlspath);//        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);        /** 根据版本选择创建Workbook的方式 */                  Workbook wb = null;          if (WDWUtil.isExcel2003(xlspath))          {              wb = new HSSFWorkbook(is);          }          else          {              wb = new XSSFWorkbook(is);          }          //        CellStyle cellStyle = wb.createCellStyle(); //        DataFormat format = wb.createDataFormat(); //        cellStyle.setDataFormat(format.getFormat("@"));                        // 循环工作表Sheet        for (int numSheet = 0; numSheet < wb.getNumberOfSheets(); numSheet++) {            Sheet sheet = wb.getSheetAt(numSheet);   //HSSF//            System.out.println("sheet:" + sheet);            if (sheet == null) {                continue;            }            // 循环行Row,从第一行开始。            for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {                Row row = sheet.getRow(rowNum);  //HSSF//                System.out.println("row:"+row);                if (row == null) {                    continue;                }                // 循环列Cell                // 0学号 1姓名 2学院 3课程名 4 成绩                // for (int cellNum = 0; cellNum <=4; cellNum++) {                Cell cell0 = row.getCell(0);  //HSSF//                cell0.setCellStyle(cellStyle);  //设置为文本型//                System.out.println("@@cell0:" + getValue(cell0));                if (cell0 == null || !getValue(cell0).startsWith("96779")) {   //不已96779开头的记录。                      continue;                }                                                Cell cell1 = row.getCell(1);  //HSSF//                cell1.setCellStyle(cellStyle);  //设置为文本型//                System.out.println("$$cell1:" + getValue(cell1));                if (cell1 == null || getValue(cell1).length() != 8) {                    continue;                }                                               map.put(getValue(cell0), getValue(cell1));            }        }//        System.out.println("SIZE:" + list.size());        return map;    }    /**     * 得到Excel表中的值     *      * @param hssfCell     *            Excel中的每一个格子     * @return Excel中每一个格子中的值     */    @SuppressWarnings("static-access")    public static String getValue(Cell cell) {  //HSSF        /*if (cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {            // 返回布尔类型的值            return String.valueOf(cell.getBooleanCellValue());        } else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {            // 返回数值类型的值            return String.valueOf(cell.getNumericCellValue());        } else {            // 返回字符串类型的值            return String.valueOf(cell.getStringCellValue());        }*/        String cellValue = "";        if (null != cell)          {              // 以下是判断数据的类型              switch (cell.getCellType())              {              case HSSFCell.CELL_TYPE_NUMERIC: // 数字  //                cellValue = http://www.mamicode.com/cell.getNumericCellValue() +"";                  DecimalFormat df = new DecimalFormat("0");     //避免科学计数法显示。                cellValue =http://www.mamicode.com/ df.format(cell.getNumericCellValue());                  //                cellValue = http://www.mamicode.com/cell.getStringCellValue();                  break;              case HSSFCell.CELL_TYPE_STRING: // 字符串                  cellValue =http://www.mamicode.com/ cell.getStringCellValue();                  break;              case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean                  cellValue = http://www.mamicode.com/cell.getBooleanCellValue() +"";                  break;              case HSSFCell.CELL_TYPE_FORMULA: // 公式                  cellValue = http://www.mamicode.com/cell.getCellFormula() +"";                  break;              case HSSFCell.CELL_TYPE_BLANK: // 空值                  cellValuehttp://www.mamicode.com/= "";                  break;              case HSSFCell.CELL_TYPE_ERROR: // 故障                  cellValuehttp://www.mamicode.com/= "非法字符";                  break;              default:                  cellValue = "未知类型";                  break;              }          }          return cellValue;            }    /**     * @param args     */    public static void main(String[] args) {        Map<String, String> map = null;        try {            map = CarHwXls.readXls("d://硬件号.xlsx");        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        for (Map.Entry<String, String> entry : map.entrySet()){            System.err.println("entry.getKey():" + entry.getKey() + " --- " + entry.getValue());        }    }}class WDWUtil  {      /**      * @描述:是否是2003的excel,返回true是2003      * @参数:@param filePath 文件完整路径      * @参数:@return      * @返回值:boolean      */    public static boolean isExcel2003(String filePath)      {          return filePath.matches("^.+\\.(?i)(xls)$");      }            /**      * @描述:是否是2007的excel,返回true是2007      * @参数:@param filePath 文件完整路径      * @参数:@return      * @返回值:boolean      */      public static boolean isExcel2007(String filePath)      {          return filePath.matches("^.+\\.(?i)(xlsx)$");      }}  

 

poi excel文件上传并解析xls文件