2012-05-25 7 views
0

내가 읽기 전에 주어진 시트 (이름 또는 번호로)가 파일 (xls 또는 xlsx)에 있는지 확인하고 싶습니다. 이벤트 메모리를 사용하여 메모리 풋 프린트 문제를 해결하고 있으므로 org.apache.poi.ss.usermodel.Workbook 객체를 사용하고 싶지 않습니다.시트가 있는지 확인하는 방법은 무엇입니까?

JDK7과 함께 Apache POI 3.7을 사용하고 있습니다. 누군가 나를 도울 수 있습니까?

감사합니다,

Parag

답변

1

방법은 UserModel 코드를 사용하면 두 가지 형식에 대해 동일합니다 확인합니다.

그러나 이벤트 API에 대해 질문했습니다. 이것들은 훨씬 낮은 수준이므로 두 형식 간의 차이점은 숨길 수있는 것이 없기 때문에 사용자가 처리해야합니다. (사용자의 삶을 원한다면 서버에 더 많은 메모리를 구입하고 UserModel을 사용하십시오!)

.xls 파일 형식 (HSSF)의 경우 시트의 세부 사항이 파일의 맨 위에 저장됩니다 . 파일 처리를 시작하고 BoundSheetRecord (sid = 0x0085)이 지나갈 때까지 기다리십시오. 이 모든 것을 보았을 때 시트가 파일에 있는지 여부를 알 수 있습니다. 그렇다면 정상적으로 처리하십시오. 그렇지 않다면 중단하십시오.

.xlsx 파일 형식 (XSSF)의 경우 파일을 열고 통합 문서 부분을 잡습니다 (상당히 작음). 어떤 시트가 존재하는지 확인한 다음 처리 할 것인지 여부에 따라 결정하십시오. XSSFReader를 사용하는 경우 getWorkbookData()으로 전화하여 통합 문서 파트를 얻은 다음 XmlBeans를 사용하여 처리하십시오 (WorkbookDocument.Factory 통해)

+0

고마워요 Gagravarr! – ParagJ

+0

getWorkbookData()를 사용하여 통합 문서를 가져 왔지만 XmlBeans를 사용하여 시트가 있는지 여부를 확인하는 방법은 무엇입니까? 예를 들어 도와 주실 수 있습니까? 정말 도움이 될 것입니다, 이것이 내가 필요로하는 마지막 것입니다 ... – ParagJ

+1

[XSSFWorkbook] (http://svn.apache.org/repos/asf/poi/trunk/src/ooxml/java)의 출처를 살펴보십시오. /org/apache/poi/xssf/usermodel/XSSFWorkbook.java) 예를 들어, 기본적으로'WorkbookDocument doc = WorkbookDocument.Factory.parse (inputStream);' – Gagravarr

관련 문제