programing

POI 라이브러리를 사용하여 Excel 파일의 행 수를 가져오는 방법은 무엇입니까?

subpage 2023. 5. 9. 22:44
반응형

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. 옵션 1은 실제로 내용으로 채워진 열의 수를 제공합니다(10개의 열 중 두 번째 열이 채워지지 않으면 9개가 됩니다).

  2. 옵션 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

반응형