首页 文章

在Apache POI中跳过空白Excel单元格

提问于
浏览
4

我是Apache POI的新手,但我想做的是通过Excel文件(.xls)读取并将其放入ArrayList进行存储,以便稍后进行操作 . 我可以得到整张纸,但我的问题就在于:我得到整张纸(约54183行) .

我想跳过空白的单元格,它是类型3.由于某种原因,当我在system.out.print中找到ArrayList时,它有所有空白单元格 .

有没有办法跳过那些,而不是将它们添加到我正在尝试创建的ArrayList?

我有以下一点代码:

public ArrayList readExcelFile(String filePath) throws IOException {
    ArrayList cellVectorHolder = new ArrayList();
    try {
        FileInputStream inputFile = new FileInputStream(filePath);
        POIFSFileSystem myFileSystem = new POIFSFileSystem(inputFile);
        HSSFWorkbook wkbk = new HSSFWorkbook(myFileSystem);
        wb = wkbk;
        for (int i = 0; i < wb.getNumberOfSheets(); i++) {
            HSSFSheet wkSheet = wkbk.getSheetAt(i);
            for (Row row : wkSheet) {
                ArrayList cellVector = new ArrayList();
                for (Cell cell : row) {
                    if(cell.getCellType() != 3){
                        cellVector.add(cell);
                    }
                }
                cellVectorHolder.add(cellVector);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return cellVectorHolder;
}

不要介意ArrayList的名字......我一直在使用Vectors,直到我终于发现它们自1.2以后就被折旧了 .

3 回答

  • 1

    在将单元格添加到List之前,您可以检查单元格值 . 就像是:

    if (cell.getStringCellValue() != null &&  cell.getStringCellValue().length() != 0) {   
        cellVector.add(cell); 
    }
    

    如果有某些内容,您只需添加单元格 .

  • 0

    我认为你应该迭代行和单元格,这样POI甚至不会给你空单元格 .

    检查 HSSFSheet.iterator() ,它遍历工作表中的所有行 . 然后 Row.cellIterator() 迭代该行中的Cells .

    而且你已经基本完成了 .

    如果您打算保留旧的结果变量,则两个内部循环变为:

    for (Iterator<Row> rit = wkSheet.iterator();rit.hasNext();) {
        ArrayList cellVector = new ArrayList();
        for(Iterator<Cell> cit = rit.next().cellIterator(); cit.hasNext(); ) { 
                cellVector.add(cit.next());
        }
        cellVectorHolder.add(cellVector);
    }
    
  • 4

    试试这个

    List cellDataList = new ArrayList
    HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem);
                                HSSFSheet hssfSheet = workBook.getSheetAt(0);
                                Iterator rowIterator = hssfSheet.rowIterator();
    
                                int lineNumber = 0;
                                while (rowIterator.hasNext())
                                {
                                    HSSFRow hssfRow = (HSSFRow) rowIterator.next();
    
                                    lineNumber++;
                                    if(lineNumber==1){continue;}
    
    
    
                                    Iterator iterator = hssfRow.cellIterator();
                                    List cellTempList = new ArrayList();
                                    int current = 0, next = 1;
                                    while (iterator.hasNext())
                                    {
                                        HSSFCell hssfCell = (HSSFCell) iterator.next();
    
                                        current = hssfCell.getColumnIndex();
    
    
                                        if(current<next){                                   
    
    
                                        }
                                        else{
    
                                            int loop = current-next;
    
                                            for(int k=0;k<loop+1;k++){
    
    
                                                cellTempList.add(null);
                                                next = next + 1;
                                            }
                                        }
    
                                        cellTempList.add(hssfCell);
    
    
    
                                        next = next + 1;
    
    
    
                                    }
                                    cellDataList.add(cellTempList);
                                }
    

相关问题