使用Java获取给定excel中特定行的列数

使用Java获取给定excel中特定行的列数,java,excel,apache-poi,Java,Excel,Apache Poi,我想要excel中特定行的列数。这怎么可能?我使用了POI API 但我只能将列计数为7 try { fileInputStream = new FileInputStream(file); workbook = new HSSFWorkbook(fileInputStream); Sheet sheet = workbook.getSheet("0");

我想要excel中特定行的列数。这怎么可能?我使用了POI API

但我只能将列计数为7

    try
            {
                fileInputStream = new FileInputStream(file);
                workbook = new HSSFWorkbook(fileInputStream);
                Sheet sheet = workbook.getSheet("0");


                int numberOfCells = 0;
                Iterator rowIterator = sheet.rowIterator();
                /**
                 * Escape the header row *
                 */
                if (rowIterator.hasNext())
                {
                    Row headerRow = (Row) rowIterator.next();
                    //get the number of cells in the header row
                    numberOfCells = headerRow.getPhysicalNumberOfCells();
                }
                System.out.println("number of cells "+numberOfCells);

}
我想要特定行号的列数,比如说10。
excel列不同

您可以做两件事

使用

他们之间有细微的差别

  • 选项1给出了实际填充内容的列数(如果10列中的第2列未填充,则得到9列)
  • 选项2只提供最后一列的索引。因此完成了“getLastCellNum()”
  • /**计算图纸行中非空单元格的最大数量*/
    私有int getColumnsCount(XSSFSheet XSSFSheet){
    int结果=0;
    迭代器rowIterator=xssfSheet.Iterator();
    while(roweiterator.hasNext()){
    行=行迭代器。下一步();
    列表单元格=新的ArrayList();
    迭代器cellIterator=row.cellIterator();
    while(cellIterator.hasNext()){
    cells.add(cellIterator.next());
    }
    对于(int i=cells.size();i>=0;i--){
    Cell=cells.get(i-1);
    if(cell.toString().trim().isEmpty()){
    细胞。移除(i-1);
    }否则{
    结果=cells.size()>结果?cells.size():结果;
    打破
    }
    }
    }
    返回结果;
    }
    
    有时使用
    row.getLastCellNum()
    会给您一个比文件中实际填充的值更高的值。
    我使用下面的方法获取包含实际值的最后一列索引

    private int getLastFilledCellPosition(Row row) {
            int columnIndex = -1;
    
            for (int i = row.getLastCellNum() - 1; i >= 0; i--) {
                Cell cell = row.getCell(i);
    
                if (cell == null || CellType.BLANK.equals(cell.getCellType()) || StringUtils.isBlank(cell.getStringCellValue())) {
                    continue;
                } else {
                    columnIndex = cell.getColumnIndex();
                    break;
                }
            }
    
            return columnIndex;
        }
    

    根据,已经添加了一个,所以您不应该自己添加一个。由于解释性名称,我也喜欢后者。
    int noOfColumns = sh.getRow(0).getLastCellNum();
    
    /** Count max number of nonempty cells in sheet rows */
    private int getColumnsCount(XSSFSheet xssfSheet) {
        int result = 0;
        Iterator<Row> rowIterator = xssfSheet.iterator();
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            List<Cell> cells = new ArrayList<>();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                cells.add(cellIterator.next());
            }
            for (int i = cells.size(); i >= 0; i--) {
                Cell cell = cells.get(i-1);
                if (cell.toString().trim().isEmpty()) {
                    cells.remove(i-1);
                } else {
                    result = cells.size() > result ? cells.size() : result;
                    break;
                }
            }
        }
        return result;
    }
    
    private int getLastFilledCellPosition(Row row) {
            int columnIndex = -1;
    
            for (int i = row.getLastCellNum() - 1; i >= 0; i--) {
                Cell cell = row.getCell(i);
    
                if (cell == null || CellType.BLANK.equals(cell.getCellType()) || StringUtils.isBlank(cell.getStringCellValue())) {
                    continue;
                } else {
                    columnIndex = cell.getColumnIndex();
                    break;
                }
            }
    
            return columnIndex;
        }