Ответ 1
Попробуйте Sheet.getPhysicalNumberOfRows()
Ребята Я в настоящее время использую библиотеку POI 3.9 для работы с файлами excel. Я знаю функцию getLastRowNum()
, которая возвращает количество строк в файле Excel.
Единственная проблема: getLastRowNum()
возвращает число с числом, начинающимся с 0.
Итак, если файл Excel использует первые 3 строки, getLastRowNum()
возвращает 2.
Если файл Excel имеет только 1 строку, getLastRowNum()
возвращает 0.
Проблема возникает, когда файл Excel полностью пуст. getLastRowNum()
по-прежнему возвращает 0, поэтому я не могу определить, имеет ли файл Excel 1 строку данных или ее пустую.
Итак, как я могу определить, пустой ли файл Excel или нет?
Попробуйте Sheet.getPhysicalNumberOfRows()
Если вы сделаете чек
if
(getLastRowNum()<1){
res="Sheet Cannot be empty";
return
}
Это гарантирует, что у вас есть хотя бы одна строка с данными, кроме заголовка. Ниже моя программа работает отлично. Файл Excel имеет три столбца, т.е. ID, NAME, LASTNAME
XSSFWorkbook workbook = new XSSFWorkbook(inputstream);
XSSFSheet sheet = workbook.getSheetAt(0);
Row header = sheet.getRow(0);
int n = header.getLastCellNum();
String header1 = header.getCell(0).getStringCellValue();
String header2 = header.getCell(1).getStringCellValue();
String header3 = header.getCell(2).getStringCellValue();
if (header1.equals("ID") && header2.equals("NAME")
&& header3.equals("LASTNAME")) {
if(sheet.getLastRowNum()<1){
System.out.println("Sheet empty");
return;
}
iterate over sheet to get cell values
}else{
SOP("invalid format");
return;
}
Есть две вещи, которые вы можете сделать
использование
int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();
или
int noOfColumns = sh.getRow(0).getLastCellNum();
Существует отличная разница между ними
Вариант 1 дает столбцы, которые фактически заполнены содержимым (если второй столбец из 10 столбцов не заполнен, вы получите 9)
Вариант 2 просто дает вам индекс последнего столбца. Следовательно, сделано 'getLastCellNum()'
Так как Sheet.getPhysicalNumberOfRows()
не учитывает пустые строки, а Sheet.getLastRowNum()
возвращает 0, если есть одна строка или нет строк, я использую комбинацию из двух методов для точного вычисления общего количества строк.
int rowTotal = sheet.getLastRowNum();
if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
rowTotal++;
}
Примечание. Это будет обрабатывать электронную таблицу с одной пустой строкой, поскольку она не имеет ни одного, но для большинства целей это, вероятно, хорошо.
Чтобы найти последнюю строку данных, в случае, если вы создали шаблон таблицы в Excel, где он заполнен частично или между строками пустые. Логика:
int count = 0;
int emptyrow=0;
int irow=0;
while (rowIterator.hasNext()) {
row = (Row) rowIterator.next();
if (count != 0 && !checkIfRowIsEmpty(row)) { }
else{
if(count!=0 && emptyrow==irow){
emptyrow++;
}else{
emptyrow=0;
irow=0;
}
}
if(emptyrow>0){
irow++;
}
if(emptyrow>3){
break;
}
count++;
}