Apache POI를 사용하여 .xls와 .xlsx 파일을 모두 읽을 수 있는 방법이 있습니까?
나는 xls와 xlsx 파일을 모두 읽을 수 있는 메소드를 만들어야 합니다.제가 조사한 바에 따르면, HSSF는 xls를 읽을 때 사용하고 XSSF는 xlsx를 읽을 때 사용합니다.Apache POI에서 두 파일을 모두 읽을 수 있는 부분이 있습니까?또한 ss.user 모델을 발견했지만 xls와 xlsx를 모두 만족시킬 만한 충분한 코드를 찾지 못했습니다.
예, POI에서 제공하는 새로운 인터페이스 세트가 두 유형 모두에서 작동합니다.
WorkbookFactory.create() 메서드를 사용하여 다음 워크북을 가져옵니다. http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html
다음을 사용하여 파일 확장명(예: 많은 CSV 파일에 xls 확장명이 있지만 POI로 구문 분석할 수 없음)에 의존하지 않고 Excel 파일을 확인할 수 있습니다.
//simple way to check for both types of excel files
public boolean isExcel(InputStream i) throws IOException{
return (POIFSFileSystem.hasPOIFSHeader(i) || POIXMLDocument.hasOOXMLHeader(i));
}
Apache POI에 대한 exp를 많이 해본 적은 없지만, 제가 알기로는 클래스 "워크북"별 워크북을 참조하면 xls & xlsx를 모두 읽고 쓸 수 있습니다.
개체 쓰기를 만들 때만 하면 됩니다.
.xls-의 경우
Workbook wb = new HSSFWorkbook();
.xlsx-의 경우
Workbook wb = new XSSFWorkbook();
파일 형식에 대한 매개 변수를 전달하고 If 문을 사용하여 WorkBook 개체를 만들 수 있습니다.
Apache에서 제공하는 poi-ooxml 및 poi-ooxml-jar를 사용하여 읽을 수 있습니다.
아래 코드를 사용합니다.
Workbook wb = null;
excelFileToRead = new FileInputStream(fileName);
wb = WorkbookFactory.create(excelFileToRead);
Sheet sheet = wb.getSheet(sheetName);
위의 코드는 xls와 xlsx 파일을 모두 읽을 것입니다.
톰의 답변 덕분에 추가, foll. code를 사용하여 입력 스트림을 얻을 수 있습니다. 그렇지 않으면 우리가 직면할 수도 있습니다.Exception in thread "main" java.io.IOException: mark/reset not supported
InputStream inputStream = new FileInputStream(new File("C:\\myFile.xls"));
if(! inputStream.markSupported()) {
inputStream = new PushbackInputStream(fileStream, 8);
}
사용할 수 있습니다.
Workbook wb = WorkBookFactory().create(inputStream);
한 가지 옵션은 파일 이름을 확인하고 파일 이름이 .xls인지 xlsx인지 확인한 다음 if 조건을 사용하여 전환하는 것입니다. poi에서 작업한 지 오래되었지만 속성은 .xls에 대한 HSSF와 같고 .xlsx에 대한 XSSF는 http://poi.apache.org/ 사이트를 참조하는 것 같습니다. 왜 Apache POI를 사용해야 합니까?라는 항목의 마지막 줄입니다.
읽기 프로세스를 추상화하는 방법을 찾고 있는 것 같습니다. XLS든 XLSX든 상관없다고 말하고 코드를 수정하지 않고 작동하기를 원합니다.
Apache Tika는 파일 읽기와 콘텐츠 구문 분석을 추상화하는 훌륭한 라이브러리이며 POI와 많은 다른 라이브러리를 사용하고 있으며 모든 라이브러리에 대한 멋진 추상화를 가지고 있습니다.
PDF/XLS/XLSX를 읽는 것은 텍스트 파일을 읽는 것과 비슷하며, 모든 작업은 장면 뒤에서 수행됩니다.
자세한 내용은 이 문서를 참조하십시오.http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika
언급URL : https://stackoverflow.com/questions/19129961/is-there-any-way-to-read-both-xls-and-xlsx-files-using-apache-poi
'programing' 카테고리의 다른 글
jQuery - 클래스의 요소에서 속성 값 목록을 가져옵니다. (0) | 2023.08.15 |
---|---|
가능한 AOP 사용 사례는 무엇입니까? (0) | 2023.08.15 |
Swift의 포괄적인 스위치 설명에 대한 Noop (0) | 2023.08.15 |
jQuery가 gzip/deflate를 사용하도록 설정된 URL에 대해 AJAX를 강제로 호출할 수 있습니까? (0) | 2023.08.15 |
"바를 포함하는 foo"의 CSS 선택기? (0) | 2023.08.15 |