88

Cái nào trong số 2 API đơn giản hơn để đọc / ghi / chỉnh sửa bảng excel? Các API này không hỗ trợ tiện ích mở rộng CSV?

Sử dụng JXL cho file.xls và file.xlsx, tôi nhận được một ngoại lệ như:

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)

Cả hai phần mở rộng .xls và .xlsx. Phiên bản Java tôi đang sử dụng là: JDK1.6

|
  • 1

    Thế còn: "API nào có để đọc / ghi bảng tính Microsoft Excel (JXL, Apache POI, v.v.) trong Java? Các kịch bản tốt nhất để sử dụng từng API là gì?"

    – Dương Việt Dương 04:34:25 09/12/2014
249

Tôi đã sử dụng cả JXL (bây giờ là "JExcel") và Apache POI . Lúc đầu tôi đã sử dụng JXL, nhưng bây giờ tôi sử dụng Apache POI.

Đầu tiên, đây là những điều mà cả hai API có chức năng kết thúc giống nhau:

  • Cả hai đều miễn phí
  • Kiểu dáng ô: căn chỉnh, hình nền (màu sắc và hoa văn), đường viền (loại và màu sắc), hỗ trợ phông chữ (tên phông chữ, màu sắc, kích thước, đậm, in nghiêng, gạch ngang, gạch chân)
  • Công thức
  • Siêu liên kết
  • Vùng tế bào hợp nhất
  • Kích thước của hàng và cột
  • Định dạng dữ liệu: Số và ngày
  • Gói văn bản trong các ô
  • Panes đóng băng
  • Hỗ trợ tiêu đề / chân trang
  • Đọc / ghi bảng tính hiện có và mới
  • Cả hai đều cố gắng giữ các đối tượng hiện có trong bảng tính mà họ đọc còn nguyên vẹn nhất có thể.

Tuy nhiên, có nhiều điểm khác biệt:

  • Có lẽ sự khác biệt đáng kể nhất là Java JXL không hỗ trợ định dạng ".xlsx" của Excel 2007+; nó chỉ hỗ trợ định dạng ".xls" BIFF (nhị phân) cũ. Apache POI hỗ trợ cả hai với một thiết kế chung.
  • Ngoài ra, phần Java của API JXL được cập nhật lần cuối vào năm 2009 (3 năm, 4 tháng trước khi tôi viết bài này), mặc dù có vẻ như có API C #. Apache POI được duy trì tích cực.
  • JXL không hỗ trợ Định dạng có điều kiện, Apache POI thực hiện, mặc dù điều này không đáng kể, bởi vì bạn có thể định dạng có điều kiện các ô bằng mã của riêng bạn.
  • JXL không hỗ trợ định dạng văn bản phong phú , nghĩa là định dạng khác nhau trong một chuỗi văn bản; Apache POI không hỗ trợ nó.
  • JXL chỉ hỗ trợ các xoay văn bản nhất định: ngang / dọc, +/- 45 độ và xếp chồng lên nhau; Apache POI hỗ trợ bất kỳ số nguyên độ cộng với xếp chồng.
  • JXL không hỗ trợ vẽ hình; Apache POI nào.
  • JXL hỗ trợ hầu hết các cài đặt Thiết lập trang như Phong cảnh / Chân dung, Lề, Kích thước giấy và Thu phóng. Apache POI hỗ trợ tất cả những điều đó cộng với việc lặp lại hàng và cột.
  • JXL không hỗ trợ Split Panes; Apache POI nào.
  • JXL không hỗ trợ tạo hoặc thao tác biểu đồ; sự hỗ trợ đó chưa có trong Apache POI, nhưng API đang dần hình thành.
  • Apache POI có một bộ tài liệu và ví dụ phong phú hơn JXL.

Ngoài ra, POI không chỉ chứa API "usermodel" chính mà còn là API dựa trên sự kiện nếu tất cả những gì bạn muốn làm là đọc nội dung bảng tính.

Tóm lại, vì tài liệu tốt hơn, nhiều tính năng hơn, phát triển tích cực và hỗ trợ định dạng Excel 2007+, tôi sử dụng Apache POI.

|
  • 1

    Cảm ơn lời giải thích công phu.

    – Ngô Công Lộc 07:02:36 21/02/2013
  • 1

    +1 cho rõ ràng, súc tích và cực kỳ hữu ích

    – Tạ Diệu Nga 06:53:48 02/10/2013
  • 1

    getContents()phương pháp bẩn trong JExcelAPI giúp tôi tiết kiệm rất nhiều thời gian. Với POI, bạn phải kiểm tra loại ô của mình, sau đó lấy giá trị của nó (nếu là ô Số, bạn cần kiểm tra xem đó có phải là ô Ngày không) theo loại của nó và cuối cùng chuyển đổi nó thành giá trị Chuỗi bằng các phương thức khác nhau, điều đó thật bất tiện. Không thể tưởng tượng POI không cung cấp một phương thức bẩn nhưng tiện lợi như JExcelAPI.

    – Trịnh Tuyết Sương 08:16:17 23/04/2014
  • 1

    Một điều rất tích cực nếu POI là cách đọc dựa trên sự kiện. Đặc biệt là trên các thiết bị di động (= Android), điều này giúp ích rất nhiều khi xử lý các kích thước heap và GC giới hạn. Đọc XLS đơn giản với JXL thường đạt đến giới hạn bộ nhớ ứng dụng, khiến ứng dụng bị sập.

    – Hồ Nguyên Hoàng 10:00:52 16/09/2014
  • 1

    Một trong những yếu tố quan trọng khiến tôi chuyển sang POI là tính linh hoạt khi sử dụng API hấp, đây là điều bắt buộc khi bạn muốn đọc excel với lượng dữ liệu khổng lồ. Bạn sẽ không muốn dữ liệu wole được tải vào bộ nhớ khi bạn mở excel, nếu dữ liệu trong excel là rất lớn. Với tính năng phát trực tuyến, toàn bộ nội dung của excel / bất kỳ tài liệu văn phòng nào của bạn sẽ không được tải vào bộ nhớ ngay sau khi bạn phân tích trang tính.

    – Đỗ Kim Hoàng 13:40:34 05/10/2014
12

Tôi đã sử dụng POI.

Nếu bạn sử dụng điều đó, hãy chú ý đến các trình định dạng ô đó: tạo một và sử dụng nhiều lần thay vì tạo mỗi lần cho ô, đó là sự khác biệt lớn về mức tiêu thụ bộ nhớ hoặc dữ liệu lớn.

|
5

Tôi không quen thuộc với JXL và chúng tôi sử dụng POI. POI được duy trì tốt và có thể xử lý cả định dạng .xls nhị phân và định dạng dựa trên xml mới được giới thiệu trong Office 2007.

Tệp CSV không phải là tệp excel, chúng là tệp dựa trên văn bản, vì vậy các thư viện này không đọc chúng. Bạn sẽ cần phải phân tích ra một tệp CSV. Tôi không biết về bất kỳ thư viện tệp CSV nào, nhưng tôi cũng không nhìn.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.