45

我想要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列不一样

4

3 回答 3

87

你可以做两件事

利用

int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();

或者

int noOfColumns = sh.getRow(0).getLastCellNum();

它们之间有细微的差别

  1. 选项 1 给出了实际填充内容的列数(如果 10 列的第二列未填充,您将得到 9)
  2. 选项 2 只是为您提供最后一列的索引。因此完成了'getLastCellNum()'
于 2013-08-28T13:52:03.743 回答
0
/** 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;
}
于 2017-11-18T07:44:23.467 回答
0

有时 usingrow.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;
    }
于 2020-08-06T17:09:45.360 回答