programing

Apache POI getRow()가 null을 반환하고 .createRow가 실패함

css3 2023. 6. 9. 22:17

Apache POI getRow()가 null을 반환하고 .createRow가 실패함

Apache POI v3.12를 사용할 때 다음과 같은 문제가 발생했습니다. 49개의 행이 있는 XLSX 파일을 사용해야 합니다 [0..48] 템플릿으로 셀을 데이터로 채우고 다른 파일로 작성하면 템플릿을 다시 사용할 수 있습니다.제가 하는 일은 대략 다음과 같습니다.

XSSFWorkbook wbk_template = new XSSFWorkbook(new FileInputStream    (f_wbk_template));
SXSSFWorkbook wbk = new SXSSFWorkbook(wbk_template, 50, true);

Sheet sheet = wbk.getSheet(STR_SHEET_NAME);

나중에/

Row row = sheet.getRow(rownum);
if (null == row) {
    row = sheet.createRow(rownum);
}

디버깅 시 getRow()가 null을 반환하지만 .createRow() 시도가 실패하고 다음 오류가 발생합니다.

java.lang.IllegalArgumentException: Attempting to write a row[2] in the range [0,48] that is already written to disk.
    at org.apache.poi.xssf.streaming.SXSSFSheet.createRow(SXSSFSheet.java:122)
...

내가 뭘 빠트렸나요?Apache 문서 및 포럼에서 읽은 바로는 getRow()가 null을 반환하면 Row()를 생성해야 합니다.시트에 .getPhysicalRows(), .getFirstRowNum() 및 .getLastRowNum()에 따른 행이 없습니다.

감사해요.

자세한 내용은 설명서를 참조하십시오.SXSSFWorkbook다음을 수행하는 생성자XSSFWorkbook파라메타로템플릿 파일의 초기 행을 재정의하거나 액세스할 수 없습니다.기존 행을 덮어쓰려고 하는데 API가 이를 지원하지 않습니다.예외 메시지는 이를 반영합니다.

https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html#SXSSFWorkbook(org.apache.poi.xssf.usermodel.XSSFWorkbook)

사용 사례는 http://jxls.sourceforge.net 을 사용해 보는 것이 좋습니다.

기존 행을 읽거나 편집하려면 먼저 다음에서 수행할 수 있습니다.xssf를 입력한 다음 생성합니다.sxssf파일 기반xssf파일.
코드는 아래와 같습니다.

XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));

//do the read and edit operation with xssf......
......
......

SXSSFWorkbook sXSSFbook = new SXSSFWorkbook(xssfWorkbook); 

//do the write operation with sxssf......
......
......

이 생성자 인수를 확인하십시오.

XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(exportExcelTo));
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook, -1, Boolean.FALSE, Boolean.TRUE);

언급URL : https://stackoverflow.com/questions/30868325/apache-poi-getrow-returns-null-and-createrow-fails