在Apache的POI跳过空白Excel单元格(Skipping Blank Excel Cells

2019-09-16 22:50发布

我是新来了Apache POI,但我希望做的是阅读,虽然一个Excel文件(.xls的),并将它放入一个ArrayList中存储,这样我以后可以操纵的。 我可以得到整个表,但我的问题就是:我得到整个宕片(〜54183行)。

我想忽略所有空白单元格,它的类型是因为某些原因,当我的是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的名字......我用向量,直到我终于发现了他们,因为1.2或类似的东西都贬值了。

Answer 1:

添加细胞到列表之前,您可以检查单元格的值。 就像是:

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

你只有在有添加一些内容的单元格。



Answer 2:

我想你应该遍历行和单元格,方式POI甚至不会给你空白单元格。

检出HSSFSheet.iterator()其迭代在工作表中的所有行。 然后Row.cellIterator()它迭代该行中的单元格。

而你bascially完成。

如果你是在保留旧的结果变量的两个内环变得意图:

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);
}


Answer 3:

尝试这个

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);
                            }


文章来源: Skipping Blank Excel Cells in Apache POI