2013-03-11 39 views
19

Tôi chuyển từ jxl sang poi vì POI có nhiều tính năng hơn. Tuy nhiên, tôi không thể xử lý các tệp xls được tạo ở định dạng cũ. Bây giờ tôi nhận được lỗi này:Làm thế nào để xử lý các tệp .xls excel cũ bằng cách sử dụng POI?

org.apache.poi.hssf.OldExcelFormatException: The supplied spreadsheet seems to be Excel 5.0/7.0 (BIFF5) format. POI only supports BIFF8 format (from Excel versions 97/2000/XP/2003)

Bây giờ tôi đang suy nghĩ để sử dụng cả hai JXL như giếng như POI tùy theo phiên bản xls để cho các tập tin định dạng xls cũ tôi sẽ sử dụng jxl trong khi đối với các phiên bản mới hơn, tôi sẽ sử dụng POI. Đây có phải là giải pháp tốt không? Có lựa chọn thay thế nào không?

+4

Đó có phải là tệp Excel 5.0/7.0 không? –

+2

Có Tôi đã xác thực rằng đó là tệp Excel 5/7 (Office 95) – Wael

+2

Sử dụng API đơn chắc chắn sẽ tốt hơn vì nó sẽ làm giảm độ phức tạp rất nhiều. Nhưng chỉ có hai là API trưởng thành nhất để đọc Excel. Vì vậy, theo ý kiến ​​của tôi, đó là cách tốt nhất để làm điều đó. –

Trả lời

11

Đối với các file định dạng cũ Excel, bạn có những lựa chọn sau:

  1. HSSF, việc thực hiện POI của định dạng '97 (-2007) tập tin Excel.
    • Nếu bạn chỉ muốn trích xuất nội dung văn bản, sau đó bạn có thể sử dụng OldExcelExtractor chỉ để kéo văn bản và số từ từ tệp.
    • Nếu bạn cần các giá trị từ một tế bào cụ thể, sau đó bạn sẽ cần phải thực hiện một cách tiếp cận một chút như OldExcelExtractor, xử lý các tập tin ở mức kỷ lục , và kiểm tra các tọa độ trên OldStringRecord, NumberRecord, OldFormulaRecord và những người bạn.
  2. Như bạn đã đề cập, JXL cũng có thể xử lý một số trường hợp.
  3. Sử dụng trình điều khiển JDBC/ODBC. Nó không linh hoạt như HSSF nhưng đối với một số định dạng cũ, đó là cách duy nhất để trích xuất thông tin.
+1

Liên kết được tham chiếu bởi văn bản "JDBC/ODBC" dường như không trỏ đến bất kỳ nội dung liên quan nào. – James

+1

@ James Cảm ơn, tôi đã cập nhật liên kết tới url mới, có vẻ như trang trước đã bị xóa :( – dan

+0

Xin chào Cảm ơn câu trả lời của bạn, tôi chỉ biết nếu có cách phát hiện định dạng tệp Excel là BIFF5? – esprittn

-4

theo hiểu biết của tôi, bạn có thể sử dụng mã này để đọc file excel định dạng .xls

FileInputStream in=new FileInputStream(new File("filename.xls")); 
Wookbook wb=new HSSFWorkbook(in); 

để đọc các phiên bản mới excel (2007 trở lên):

FileInputStream in=new FileInputStream(new File("filename.xls")); 
    Wookbook wb=new XSSFWorkbook(in); 

jar bên ngoài các tệp mà bạn sẽ cần:

1. poi-3.9 
2. dom4j-1.6.1 
3. XMLbeams-2.5.0 

nếu bạn đang làm việc chỉ yêu cầu bạn làm việc với .xls thì chỉ poi-3.0 sẽ suf fice. Bạn cần các lọ khác để làm việc với các phiên bản mới của excel.

Các vấn đề liên quan