Java에서 Excel 시트를 읽는 데 더 나은 API는 무엇입니까-JXL 또는 Apache POI [닫힌]


94

엑셀 시트 읽기 / 쓰기 / 편집이 더 간단한 API는 무엇입니까? 이러한 API는 CSV 확장을 지원하지 않습니까?

file.xls 및 file.xlsx에 JXL을 사용하면 다음과 같은 예외가 발생합니다.

jxl.read.biff.BiffException: Unable to recognize OLE stream
    at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
    at jxl.read.biff.File.<init>(File.java:127)
    at jxl.Workbook.getWorkbook(Workbook.java:268)
    at core.ReadXLSheet.contentReading(ReadXLSheet.java:46)
    at core.ReadXLSheet.init(ReadXLSheet.java:22)
    at core.ReadXLSheet.main(ReadXLSheet.java:72)

.xls 및 .xlsx 확장자 용입니다. 내가 사용하는 Java 버전은 JDK1.6입니다.


1
"Java에서 Microsoft Excel 스프레드 시트 (JXL, Apache POI 등)를 읽고 쓸 수있는 API는 무엇입니까? 각각을 사용하는 가장 좋은 시나리오는 무엇입니까?"
Cléssio Mendes 2014-12-09

답변:


258

난 둘 다 사용하고 JXL (지금 "JExcel")와 아파치 POI를 . 처음에는 JXL을 사용했지만 지금은 Apache POI를 사용합니다.

첫째, 두 API가 동일한 최종 기능을 갖는 항목은 다음과 같습니다.

  • 둘 다 무료입니다
  • 셀 스타일 : 정렬, 배경 (색상 및 패턴), 테두리 (유형 및 색상), 글꼴 지원 (글꼴 이름, 색상, 크기, 굵게, 기울임 꼴, 취소 선, 밑줄)
  • 방식
  • 하이퍼 링크
  • 병합 된 셀 영역
  • 행과 열의 크기
  • 데이터 형식 : 숫자 및 날짜
  • 셀 내 텍스트 줄 바꿈
  • 틀 고정
  • 머리글 / 바닥 글 지원
  • 기존 및 새 스프레드 시트 읽기 / 쓰기
  • 두 가지 모두 스프레드 시트에있는 기존 개체를 가능한 한 그대로 유지하려고합니다.

그러나 많은 차이점이 있습니다.

  • 가장 중요한 차이점은 Java JXL이 Excel 2007+ ".xlsx"형식을 지원하지 않는다는 것입니다. 이전 BIFF (이진) ".xls"형식 만 지원합니다. Apache POI는 공통 디자인으로 두 가지를 모두 지원합니다.
  • 또한 JXL API의 Java 부분은 C # API가있는 것처럼 보이지만 2009 년에 마지막으로 업데이트되었습니다 (3 년, 4 개월 전에 작성). Apache POI는 적극적으로 유지됩니다.
  • JXL은 조건부 서식을 지원하지 않지만 Apache POI는 그다지 중요하지는 않지만 자신의 코드로 셀을 조건부 서식으로 지정할 수 있기 때문에 중요하지 않습니다.
  • JXL은 서식 있는 텍스트 형식, 즉 텍스트 문자열 내의 다른 형식을 지원하지 않습니다 . Apache POI는이를 지원합니다.
  • JXL은 가로 / 세로, +/- 45도, 스택 등 특정 텍스트 회전 만 지원합니다. Apache POI는 모든 정수 각도 플러스 스택을 지원합니다.
  • JXL은 도형 그리기를 지원하지 않습니다. Apache POI는 그렇습니다.
  • JXL은 가로 / 세로, 여백, 용지 크기 및 확대 / 축소와 같은 대부분의 페이지 설정 설정을 지원합니다. Apache POI는이 모든 기능과 반복되는 행 및 열을 지원합니다.
  • JXL은 분할 창을 지원하지 않습니다. Apache POI는 그렇습니다.
  • JXL은 차트 생성 또는 조작을 지원하지 않습니다. Apache POI에는 아직 지원이 없지만 API가 천천히 형성되기 시작했습니다.
  • Apache POI에는 JXL보다 더 광범위한 문서 및 예제가 있습니다.

또한 POI에는 기본 "usermodel"API뿐만 아니라 스프레드 시트 콘텐츠를 읽는 것이 원하는 경우 이벤트 기반 API도 포함됩니다.

결론적으로 더 나은 문서, 더 많은 기능, 활발한 개발 및 Excel 2007+ 형식 지원으로 인해 Apache POI를 사용합니다.


정교한 설명에 감사드립니다.
Swagatika 2013

8
명확하고 간결한 +1, 매우 도움이

1
getContents()JExcelAPI 의 더티 메소드는 저에게 많은 시간을 절약 해줍니다. POI를 사용하면 셀 유형을 확인한 다음 해당 유형에 따라 값 (숫자 셀인 경우 날짜 셀인지 확인해야 함)을 가져 와서 마지막으로 다른 방법으로 문자열 값으로 변환해야하므로 매우 불편합니다. POI가 JExcelAPI처럼 더럽지 만 편리한 방법을 제공하지 않는다는 것을 상상할 수 없습니다.
LiuYan 刘 研 2014

1
POI가 이벤트 기반 판독이라면 매우 긍정적입니다. 특히 모바일 장치 (= Android)에서는 제한된 힙 크기와 GC를 처리 할 때 많은 도움이됩니다. JXL로 간단한 XLS를 읽는 경우 종종 앱 메모리 제한에 도달하여 앱이 충돌합니다.
dermatthias 2014 년

2
POI로 마이그레이션하게 만든 중요한 요소 중 하나는 방대한 양의 데이터로 엑셀을 읽고 싶을 때 필수 인 steaming API를 사용할 수있는 유연성입니다. 엑셀의 데이터가 큰 경우 엑셀을 열 때 wole 데이터가 메모리에로드되는 것을 원하지 않습니다. 스트리밍을 사용하면 Excel / 모든 Office 문서의 전체 내용이 시트를 구문 분석 한 직후 메모리에로드되지 않습니다.
Ashok Koyi 2014 년

12

POI를 사용했습니다.

그것을 사용한다면 셀 포맷터를 주시하십시오. 셀에 대해 매번 생성하는 대신 하나를 생성하고 여러 번 사용하면 엄청난 메모리 소비 차이 또는 대용량 데이터입니다.


5

나는 JXL에 익숙하지 않지만 POI를 사용합니다. POI는 잘 관리되며 이진 .xls 형식과 Office 2007에 도입 된 새로운 xml 기반 형식을 모두 처리 할 수 ​​있습니다.

CSV 파일은 Excel 파일이 아니며 텍스트 기반 파일이므로 이러한 라이브러리는 파일을 읽지 않습니다. CSV 파일을 직접 구문 분석해야합니다. CSV 파일 라이브러리에 대해 알지 못하지만 나도 보지 못했습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.