2011-01-20 34 views
6

Có thư viện Java hiệu quả về bộ nhớ để đọc các tệp Microsoft Excel lớn (cả .xls và .xlsx) không? Tôi có kinh nghiệm rất hạn chế với Apache POI, và nó dường như là một bộ nhớ khổng lồ từ những gì tôi nhớ lại (mặc dù có lẽ đây chỉ là để viết và không phải để đọc). Có cái gì tốt hơn? Hoặc tôi có đang xác định sai và/hoặc lạm dụng POI không?Thư viện Java hiệu quả của bộ nhớ để đọc các tệp Excel?

Điều quan trọng là phải có giấy phép nguồn mở "thân thiện".

+0

chỉ có một khác mà tôi biết là http://jexcelapi.sourceforge.net/. Tôi chưa bao giờ sử dụng nó bản thân mình vì vậy không thể thực sự bình luận về việc sử dụng bộ nhớ. – CoolBeans

+0

Có bao nhiêu bộ nhớ quá nhiều cho bạn? –

+0

Phụ thuộc quá nhiều. Lý tưởng nhất là nếu tập tin là như vậy mà nó có thể được xử lý nếu lần đầu tiên được lưu dưới dạng .csv, tôi muốn nó nếu nó có thể được xử lý như một tập tin Excel. Lý tưởng có thể là không thể, nhưng tôi muốn được gần gũi hơn. –

Trả lời

5

Thư viện POI của Apache có số event-based API có kích thước bộ nhớ nhỏ hơn. Thật không may, nó chỉ hoạt động với HSSF (Định dạng Bảng tính Khủng khiếp) và không phải XSSF (Định dạng Bảng tính XML - cho các tệp OOXML).

+0

Cảm ơn, nhưng đó là một bummer rằng nó không làm việc cho XSSF, vì đó là những gì sẽ được sử dụng cho các tập tin với rất nhiều (> 65536) của hàng. –

+3

Thực ra có vẻ như có một công việc xung quanh cho XSSF. Bất cứ ai có thể bình luận về điều này: http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api –

+0

@Michael có vẻ như đó là một cách giải quyết tốt, mặc dù hơi liên quan nhiều hơn. Vì XSSF là XML cuối cùng, bạn đang sử dụng trình phân tích cú pháp SAX để phân tích cú pháp tệp excel. –

1

Các định dạng tệp Excel (cả) lớn và cực kỳ phức tạp và mọi thứ đọc tất cả các nội dung có thể của chúng sẽ lớn và phức tạp như nhau. Hãy nhớ rằng chúng có thể chứa phạm vi, macro, liên kết, nội dung được nhúng, v.v.

Tuy nhiên, nếu bạn đọc thứ gì đó đơn giản như lưới số, tôi khuyên bạn nên chuyển đổi bảng tính thành một cái gì đó đơn giản như CSV và sau đó đọc định dạng đó.

+0

CSV là định dạng ưa thích, nhưng đôi khi người dùng có thể có số tiền dữ liệu CSV được lưu trữ trong tệp .xls. Tôi không muốn yêu cầu họ mở Excel, lưu dưới dạng CSV và sau đó quay lại ứng dụng của tôi. Rõ ràng đó là một công việc xung quanh mà sẽ làm việc, nhưng nó xa lý tưởng. –

0

Hãy xem JExcel:

http://jexcelapi.sourceforge.net/

Tôi không thể giải thích cho bộ nhớ, nhưng rõ ràng với bảng tính lớn của bạn sẽ tiêu thụ rất nhiều bộ nhớ để xử lý.

Bạn sẽ có thể sử dụng nó cho xls và xlsx:

Read XLSX file in Java

+1

API JExcel không xử lý các tệp 'xlsx' –

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