POI 라이브러리를 사용하여 Excel 파일의 행 수를 가져오는 방법은 무엇입니까?
여러분 저는 현재 POI 3.9 라이브러리를 사용하여 엑셀 파일 작업을 하고 있습니다.나는 알고 있습니다.getLastRowNum()함수 - Excel 파일의 여러 행을 반환합니다.
유일한 문제는getLastRowNum()카운트가 0부터 시작하는 숫자를 반환합니다.
그래서 만약 엑셀 파일이 처음 3줄을 사용한다면,getLastRowNum()2를 반환합니다.Excel 파일에 행이 하나만 있으면,getLastRowNum()0을 반환합니다.
엑셀 파일이 완전히 비어 있을 때 문제가 발생합니다. getLastRowNum()여전히 0을 반환하므로 Excel 파일에 데이터 행이 하나 있는지 또는 비어 있는지 확인할 수 없습니다.
그러면 엑셀 파일이 비어 있는지 어떻게 탐지할 수 있습니까?
TrySheet.get 물리적 행 수()
부터Sheet.getPhysicalNumberOfRows()빈 행을 카운트하지 않고Sheet.getLastRowNum()행이 하나이거나 행이 없는 경우 모두 0을 반환합니다. 두 가지 방법을 조합하여 총 행 수를 정확하게 계산합니다.
int rowTotal = sheet.getLastRowNum();
if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
rowTotal++;
}
참고: 이렇게 하면 하나의 빈 행이 있는 스프레드시트가 없는 것으로 간주되지만 대부분의 경우 문제가 없을 수 있습니다.
당신이 할 수 있는 두 가지가 있습니다.
사용하다
int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();
또는
int noOfColumns = sh.getRow(0).getLastCellNum();
그들 사이에는 미묘한 차이가 있습니다.
옵션 1은 실제로 내용으로 채워진 열의 수를 제공합니다(10개의 열 중 두 번째 열이 채워지지 않으면 9개가 됩니다).
옵션 2는 마지막 열의 인덱스를 제공합니다.이것으로 끝
'getLastCellNum()'
검사를 하는 경우
if
(getLastRowNum()<1){
res="Sheet Cannot be empty";
return
}
이렇게 하면 헤더를 제외한 데이터가 있는 행이 하나 이상 있어야 합니다.아래는 잘 작동하는 나의 프로그램입니다.Excel 파일에는 세 개의 열이 있습니다.ID, 이름, 성
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;
}
마지막 행의 getLastRowNum() 반환 인덱스입니다.
따라서 총 행 수 =을 알고 싶다면 LastRowNum() +1을 얻습니다.
이것이 효과가 있기를 바랍니다.
int rowTotal = sheet.getLastRowNum() +1;
Sheet.getPhysicalNumberOfRows()일부 빈 행은 포함되지 않습니다.모든 행에 대해 루프를 수행하려면 루프 크기를 확인하는 데 사용하지 마십시오.
마지막 데이터 행을 찾기 위해 엑셀에서 테이블 템플릿을 작성한 경우, 테이블 템플릿이 부분적으로 채워지거나 행 사이에 비어 있습니다.논리:
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++;
}
언급URL : https://stackoverflow.com/questions/16234486/how-to-get-row-count-in-an-excel-file-using-poi-library
'programing' 카테고리의 다른 글
| XAML에서 매개 변수화된 생성자 호출 (0) | 2023.05.09 |
|---|---|
| 이상한 mongodb 및 mongoose 오류: 마스터 및 slaveOk=false 오류가 아닙니다. (0) | 2023.05.09 |
| postgre에서 왼쪽으로 0 채우기SQL (0) | 2023.05.04 |
| View Model이 양식을 닫는 방법을 선택합니다. (0) | 2023.05.04 |
| WPF 및 초기 초점 (0) | 2023.05.04 |