• Excel文件上传,解析,下载(二 Excel文件解析)


    文件上传之后的操作是对Excel文件进行解析的操作,按照Excel文件来进行批量创建的操作,这边使用的是POI对Excel文件进行操作

    通过文件的路径获得文件 HSSFWorkbook是2003版本的,XSSFWorkbook是2003以上的版本的,两个类实现了Workbook 这个接口。

     1 public Workbook getFileExcel(String fileName, String filePath)
     2     {
     3         InputStream is = null;
     4         Workbook workBook = null;
     5         try {
     6             is = new FileInputStream(filePath + File.separator + fileName);
     7             logger.debug("获得文件" + filePath + File.separator + fileName);
     8             if (fileName.contains(".xls")) {
     9                 workBook = new HSSFWorkbook(is);
    10                 //return workBook;
    11             }else if (fileName.contains(".xlsx")) {
    12                 // 暂时先不考虑这样的问题,如果客户需要代码放开即可使用
    13                 // workBook = new XSSFWorkbook(is);
    14                 //return workBook;
    15             }
    16         } catch (FileNotFoundException e) {
    17             logger.error("未发现文件" + filePath + File.separator + fileName);
    18             logger.error(e.getMessage());
    19         } catch (IOException e) {
    20             logger.error("读取文件失败" + filePath + File.separator + fileName);
    21             logger.error(e.getMessage());
    22         }
    23         return workBook;
    24     }

    将表格当中的数据转换成你所想要的对象

    1.workBook.getSheetAt(numSheet) 遍历sheet页
    2.
    Row currentRow = currSheet.getRow(rowNum) 遍历行
    3.excelOfRowDigester 此方法将每一行的数据解析成一个对象
    4.row.getCell(colums[i])获取每个单元格的数据
     1 private List<Spare> excelFileDigester(Workbook workBook) {
     2         List<Spare> spares = new ArrayList<Spare>();
     3         for (int numSheet = 0; numSheet < workBook.getNumberOfSheets(); numSheet++) {
     4             Sheet currSheet = workBook.getSheetAt(numSheet);
     5             if (currSheet == null) {
     6                 continue;
     7             } else {
     8                 for (int rowNum = 1; rowNum < getExcelColumAndRowNum().get(
     9                         SpareTransaction.ROW); rowNum++) {
    10                     Row currentRow = currSheet.getRow(rowNum);
    11                     if (currentRow == null) {
    12                         continue;
    13                     } else {
    14                         //这一部分需要抽取出来
    15                         Spare sp = this.excelOfRowDigester(currentRow);
    16                         logger.debug("rowNumTotal:"+getExcelColumAndRowNum().get(SpareTransaction.ROW));
    17                         logger.debug("rowNum:"+rowNum);
    18                         logger.debug(sp.toString());
    19                         spares.add(sp);
    20                     }
    21                 }
    22             }
    23         }
    24         return spares;
    25     }
     1 private Spare excelOfRowDigester(Row row) {
     2         Spare sp = new Spare();
     3         SpareTransaction.setMAPCHECKCOLUMN();
     4         Map<String, String> columnType = SpareTransaction.getMAPCHECKCOLUMN();
     5         Integer[] colums = this.getCheckColumn(); 
     6         for (int i = 0; i < colums.length; i++) {
     7             // 获取验证后的数据 如何获取 哪一些需要用来封装对象
     8             String columnName = columnType.get(String.valueOf(colums[i]));
     9             if (SpareTransaction.NAME.equals(columnName)) {
    10                 sp.setSpareName(String.valueOf(row.getCell(colums[i])));
    11             }
    12             if (SpareTransaction.NAME.equals(columnName)) {
    13                 sp.setSpareNo(String.valueOf(row.getCell(colums[i])));
    14             }
    15             if (SpareTransaction.RESTYPE.equals(columnName)) {
    16                 sp.setSpareTypeId(this.searchValuesFromDirectory(String.valueOf(row
    17                         .getCell(colums[i]))));
    18             }
    19             if (SpareTransaction.STOREHOUST.equals(columnName)) {
    20                 // 查找所在的机房适配的ID
    21                 sp.setRoomId(this.searchValuesFromDirectory(String.valueOf(row
    22                         .getCell(colums[i]))));
    23             }
    24             if (SpareTransaction.SLOT.equals(columnName)) {
    25                 //设置插槽
    26                 String slotName = String.valueOf(row.getCell(Integer
    27                         .valueOf(SpareTransaction.SLOTCOLUMN)));
    28                 String layerName = String.valueOf(row.getCell(Integer
    29                         .valueOf(SpareTransaction.LAYERCOLUMN)));
    30                 String despositName = String.valueOf(row.getCell(Integer
    31                         .valueOf(SpareTransaction.STORECHESTCOLUMN)));
    32                 sp.setBlongSlotId(this.searchValuesFromDirectory(despositName
    33                         + SpareTransaction.SPARESPLITER + layerName
    34                         + SpareTransaction.SPARESPLITER + slotName));
    35             }
    36         }
    37         //批量创建设置状态待入库状态
    38         sp.setSpareStatusId(SpareTransaction.PREP_INTO_HOUSE_STATE);
    39         return sp;
    40     }

    不同的单元格取值的方式不同数值

     1 public String getCell(Cell cell) {
     2         if (cell == null)
     3             return "";
     4         switch (cell.getCellType()) {
     5         case Cell.CELL_TYPE_NUMERIC:
     6             return cell.getNumericCellValue() + "";
     7         case Cell.CELL_TYPE_STRING:
     8             return cell.getStringCellValue();
     9         case Cell.CELL_TYPE_FORMULA:
    10             return cell.getCellFormula();
    11         case Cell.CELL_TYPE_BLANK:
    12             return "";
    13         case Cell.CELL_TYPE_BOOLEAN:
    14             return cell.getBooleanCellValue() + "";
    15         case Cell.CELL_TYPE_ERROR:
    16             return cell.getErrorCellValue() + "";
    17         }
    18         return "";
    19     }
  • 相关阅读:
    buuctf-web [强网杯 2019]随便注 1
    buuctf-crypto 引用可打印
    buuctf-crypto 变异凯撒
    buuctf-misc 文件中的秘密
    buuctf-misc LSB
    nginx 模块配置
    cloudflare CDN下nginx获取用户真实IP地址
    使用nginx后如何在web应用中获取用户ip及原理解释
    获取用户真实 ip 地址的 nginx 相关配置
    解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
  • 原文地址:https://www.cnblogs.com/binarysheep/p/5238121.html
Copyright © 2020-2023  润新知