从Excel工作表中读取数据时会跳过空行

时间:2015-06-24 09:43:30

标签: java excel

我尝试从excel中读取数据并存储在矢量列表中。但是当我在我的系统中应用以下代码时,我有两个问题,希望能得到一些指导。

1)当我运行系统时,它将读取excel文件中的所有数据,但它会跳过这些空白数据。如何将其设为空字符串而不是跳过。

结果:从这个Excel file你可以看到值145和2DHatchback之间是空白数据,但系统会跳过它,怎么能我把它作为空字符串" "?。 [PAS, 04/01/2015, ALFA ROMEO, 145, 2D HATCHBACK, 5 SP MANUAL, 1598.42, GZ095G, 02, 01, 02, MULTI POINT F/INJ, ITALY, 9400, 7800]

2)当我试图删除excel中的几行数据时,我的矢量结果仍将保留已删除的数据,但保持为空。

结果:从Excel file开始,如果我手动删除第11行和第12行,当i system.out.println向量结果时,它将显示为[, , ][, , ]表示已删除的行。

Readexcel.java

public Vector getexcel(String filename)
    {  
        String filetype =  filename.substring(filename.lastIndexOf(".")+1);
        Vector cellVectorHolder = new Vector();

        try
        {
            Workbook workBook = WorkbookFactory.create(new FileInputStream(filename));
            Sheet sheet = workBook.getSheetAt(0);
            Iterator rowIter = sheet.rowIterator();
             if(filetype.equals("xlsx"))
            {
                while(rowIter.hasNext())
                {
                    XSSFRow row = (XSSFRow) rowIter.next();
                    Iterator cellIter = row.cellIterator();
                    Vector cellStoreVector=new Vector();

                 if(row.getRowNum()>1)
                    {
                        while(cellIter.hasNext())
                        {
                            XSSFCell cell = (XSSFCell) cellIter.next();
                         Integer cellType = cell.getCellType();
                         String cellTypeDesc    = "";
                         String cellValue       = "";

                              switch (cellType) 
                              {
                              case 0:
                                  cellTypeDesc = "NUMERIC";
                                  String doubleValue = cell.getRawValue();

                                  if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                      if (HSSFDateUtil.isValidExcelDate(Double.parseDouble(doubleValue))) {
                                          Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(doubleValue));

                                          DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
                                          cellValue = df.format(date);   
                                      }
                                  } else {

                                      cellValue = String.valueOf(doubleValue);
                                  }
                                  break;
                              case 1:
                                  cellTypeDesc = "STRING";
                                  cellValue = cell.getStringCellValue();

                                  break;   
                              case 3:
                                  cellTypeDesc = "BLANK";
                                  cellValue = "";
                                  break;
                              }

                            cellStoreVector.addElement(cellValue);
                        }
                    }
                    cellVectorHolder.addElement(cellStoreVector);
                }
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        return cellVectorHolder;
    }

1 个答案:

答案 0 :(得分:0)

Excel存储空字段,因此您需要手动检查

您应该检查仅包含空单元格的行。只需在将其添加到cellStoreVector

之前写一张支票

此外,如果rowNumber增加超过1,您可以自己添加空行向量。因此,请存储上一个rowNumber并与当前rowNumber

进行比较