Apache POI количество строк - PullRequest
7 голосов
/ 01 апреля 2012

Я использую Apache POI java и хочу получить общее количество строк, которые не являются пустыми. Я успешно обработал целую строку со всеми ее столбцами. Теперь я предполагаю, что я получаю лист Excel с несколькими строками, а не с одной строкой ... так как это сделать? Я думал о том, чтобы получить общее количество строк (int n), а затем зацикливаться, пока i <= n, но не уверен. </p>

Предложения приветствуются:)

Примечание: версия Apache POI 3.8. Я не имею дело с форматом Xlsx ... только xls.

Да, я попробовал этот код, но получил 20 взамен .... что невозможно, учитывая, что у меня только 5 строк

FileInputStream fileInputStream = new FileInputStream("COD.xls");
            HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
            HSSFSheet worksheet = workbook.getSheet("COD");
            HSSFRow row1 = worksheet.getRow(3);
            Iterator rows = worksheet.rowIterator(); 
            int noOfRows = 0;
            while( rows.hasNext() ) {
                HSSFRow row = (HSSFRow) rows.next();
                noOfRows++;                
            }
            System.out.println("Number of Rows: " + noOfRows);

Ответы [ 5 ]

6 голосов
/ 30 октября 2012
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
    if ((tempRow = sheet.getRow(i)) != null) {
           //Your Code Here
    }
}
5 голосов
/ 20 ноября 2013

Проблема в том, что POI рассматривает пустые строки как физические строки.Иногда это происходит в Excel, и хотя они не видны глазу, строки, безусловно, существуют.

Если вам нужно было открыть свой лист Excel и выбрать все, что находится под вашими данными, то удалите его (я знаю, что этопустой вид, но в любом случае сделайте это), POI вернет правильный номер.

1 голос
/ 12 сентября 2014

Возможно, вы захотите получить getPhysicalNumberOfRows (), кроме getLastRowNum ()?

0 голосов
/ 23 декабря 2016
worksheet.getLastRownNum() // *base index 0*

Этот метод даст вам номер последней строки, где вы могли бы заполнить строку, даже если вы заполнили 5 строк, могут быть случаи, когда вы могли бы заполнить некоторые пробелы в оставшихся 15 строках или в 21-й строке, потому что из которых это дает последний номер строки как 20.

Могут быть случаи, когда в каждую 5-ю строку вы вводите данные (начиная с 1), тогда ваша 5-я запись будет в 21-й строке, поэтому, опять же, если вы используете этот метод, вы получите 20 в результате.

0 голосов
/ 14 января 2015

Вы можете перебирать строки, которые не являются пустыми, используя это:

Iterator<Row> rowIterator = sheet.rowIterator();
      while (rowIterator.hasNext()) {
        Row row = (Row) rowIterator.next();
        // Your code here
      }

Спасибо

...