我在excel工作表中遇到单元格迭代器和空白单元格类型的问题。如何动态处理空白单元格和空白列 < > >代码> java >代码>,如何动态处理Excel表和空白列中的空白单元格。

我在excel工作表中遇到单元格迭代器和空白单元格类型的问题。如何动态处理空白单元格和空白列 < > >代码> java >代码>,如何动态处理Excel表和空白列中的空白单元格。,java,excel,Java,Excel,我在单元格迭代器和空白单元格类型方面面临问题 当我为postgresql db创建动态查询时,在插入查询时,由于excel中的空格,我得到异常。我正在尝试使用poi在空白情况下获取异常 试试看{ DataFormatter DataFormatter=新的DataFormatter(); 工作簿=WorkbookFactory.create(Excel文件); 迭代器sheetIterator=工作簿.sheetIterator(); 列表页=新的ArrayList(); while(shee

我在单元格迭代器和空白单元格类型方面面临问题

当我为
postgresql db
创建动态查询时,在插入查询时,由于excel中的空格,我得到异常。我正在尝试使用
poi
在空白情况下获取异常

试试看{
DataFormatter DataFormatter=新的DataFormatter();
工作簿=WorkbookFactory.create(Excel文件);
迭代器sheetIterator=工作簿.sheetIterator();
列表页=新的ArrayList();
while(sheetIterator.hasNext()){
List sheetList=new ArrayList();
Sheet Sheet=sheetIterator.next();
logger.info(“--sheet name--”+sheet.getSheetName());
if(sheetNames!=null){
用于(字符串sheetName:sheetNames){
如果(sheet.getSheetName().equals(sheetName)){
迭代器rowIterator=sheet.rowIterator();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
列表行=新建ArrayList();
//现在让我们遍历当前行的列
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
CellType类型=cell.getCellType();
if(type==CellType.BLANK){
整数intsample=0;
cell.setCellValue(intsample);
//添加(dataFormatter.formatCellValue(单元格));
行。添加(单元格);
}
else if(type==CellType.STRING){
添加(cell.getRichStringCellValue().toString());
}else if(type==CellType.NUMERIC){
if(HSSFDateUtil.isCellDateFormatted(单元格)){
添加(cell.getDateCellValue());
}else if(dataFormatter.formatCellValue(cell.contains)(“.”){
试一试{
add(Double.parseDouble(dataFormatter.formatCellValue(cell));
}捕获(例外e){
添加(cell.getRichStringCellValue().toString());
}
}否则{
试一试{
add(Long.parseLong(dataFormatter.formatCellValue(cell));
}捕获(例外e){
添加(dataFormatter.formatCellValue(单元格));
}
}
}else if(type==CellType.BOOLEAN){
添加(cell.getBooleanCellValue());
}否则{
添加(dataFormatter.formatCellValue(单元格));
}
}
添加(行);
}
添加(图纸列表);
}
}
}
}
workbook.close();
报税表;
}捕获(例外e){
e、 printStackTrace();
}

CellIterator在迭代一行中的单元格时跳过空单元格。您可以通过使用for循环而不是迭代器来解决此问题:

Row-Row=roweiterator.next();
...
int lastCellIndex=8;//(9-1个单元格)
对于(int i=0;i
我尝试使用celliterator、rowiterator、sheetiterator,但再次跳过单元格。。。
这是我的密码
试一试{
DataFormatter DataFormatter=新的DataFormatter();
工作簿=WorkbookFactory.create(文件);
列表页=新的ArrayList();
对于(int sh=0;shtry {
  DataFormatter dataFormatter = new DataFormatter();
  Workbook workbook = WorkbookFactory.create(excelFile);
  Iterator<Sheet> sheetIterator = workbook.sheetIterator();
  List<List<List<Object>>> sheets = new ArrayList<>();

  while (sheetIterator.hasNext()) {
    List<List<Object>> sheetList = new ArrayList<>();
    Sheet sheet = sheetIterator.next();
    logger.info(" ---sheet name ---" + sheet.getSheetName());
    if (sheetNames != null) {
      for (String sheetName : sheetNames) {
        if (sheet.getSheetName().equals(sheetName)) {
          Iterator<Row> rowIterator = sheet.rowIterator();
            while (rowIterator.hasNext()) {
              Row row = rowIterator.next();
              List<Object> rows = new ArrayList<>();

              // Now let's iterate over the columns of the current row
              Iterator<Cell> cellIterator = row.cellIterator();
              while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                CellType type = cell.getCellType();
                if (type == CellType.BLANK) {
                  Integer intsample = 0;
                  cell.setCellValue(intsample);

                  // rows.add(dataFormatter.formatCellValue(cell));
                  rows.add(cell);   
                }
                else if (type == CellType.STRING) {
                  rows.add(cell.getRichStringCellValue().toString());
                } else if (type == CellType.NUMERIC) {
                  if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    rows.add(cell.getDateCellValue());
                  } else if (dataFormatter.formatCellValue(cell).contains(".")) {
                    try {
                      rows.add(Double.parseDouble(dataFormatter.formatCellValue(cell)));
                    } catch (Exception e) {
                        rows.add(cell.getRichStringCellValue().toString());
                    }
                  } else {
                    try {
                      rows.add(Long.parseLong(dataFormatter.formatCellValue(cell)));
                    } catch (Exception e) {
                      rows.add(dataFormatter.formatCellValue(cell));
                    }
                  }
                } else if (type == CellType.BOOLEAN) {
                  rows.add(cell.getBooleanCellValue());
                } else {
                  rows.add(dataFormatter.formatCellValue(cell));
                }
              }
              sheetList.add(rows);
            }
            sheets.add(sheetList);
          }
        }
      }
    }
    workbook.close();

    return sheets;
  } catch (Exception e) {
    e.printStackTrace();
}
    I am trying like with out using celliterator,rowiterator,sheetiterator.but again skipping cell is happen ...
    here is my code 
  try {
            DataFormatter dataFormatter = new DataFormatter();
            Workbook workbook = WorkbookFactory.create(file);
            List<List<List<Object>>> sheets = new ArrayList<List<List<Object>>>();

            for (int sh = 0; sh < workbook.getNumberOfSheets(); sh++) {

                Sheet sheet = workbook.getSheetAt(sh);
                List<List<Object>> sheetList = new ArrayList<List<Object>>();

                for (int i = 0; i < sheet.getLastRowNum(); i++) {
                    Row row = sheet.getRow(i);

                    List<Object> rows = new ArrayList<Object>();

                    for (int j = 0; j < row.getLastCellNum(); j++) {

                        Cell cell = row.getCell(j);

                        CellType type = cell.getCellType();
                        // System.out.println(type+ " -----type -------");

                        if (type == CellType.STRING) {
                            rows.add(cell.getRichStringCellValue().toString());

                        } else if (type == CellType.NUMERIC) {

                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                rows.add(cell.getDateCellValue());
                            } else if (dataFormatter.formatCellValue(cell).contains(".")) {
                                try {
                                    rows.add(Double.parseDouble(dataFormatter.formatCellValue(cell)));
                                } catch (Exception e) {
                                    rows.add(cell.getRichStringCellValue().toString());
                                }
                            } else {
                                try {
                                    rows.add(Long.parseLong(dataFormatter.formatCellValue(cell)));
                                } catch (Exception e) {
                                    rows.add(dataFormatter.formatCellValue(cell));
                                }
                            }

                        } else if (type == CellType.BOOLEAN) {
                            rows.add(cell.getBooleanCellValue());
                        } else if (type == CellType.BLANK) {

                             cell.setCellValue("NA");
                            //System.out.println(cell);
                                //Cell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                            Integer intsample = 0;
                            //cell.setCellValue(intsample);
                            // rows.add(dataFormatter.formatCellValue(cell));
                            rows.add(cell);

                        } else {
                            rows.add(dataFormatter.formatCellValue(cell));

                        }

                    }

                    sheetList.add(rows);
                    System.out.println(rows);
                }

                sheets.add(sheetList);
                // System.out.println(sheets+"\n");
            }

            workbook.close();

            return sheets;
        } catch (Exception e) {
            e.printStackTrace();
        }