API apa yang lebih baik untuk Membaca lembar Excel di java - JXL atau Apache POI [tutup]

94

Manakah dari 2 API yang lebih sederhana untuk membaca / menulis / mengedit lembar excel? Apakah API ini tidak mendukung ekstensi CSV?

Menggunakan JXL untuk file.xls dan file.xlsx, saya mendapatkan pengecualian seperti:

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)

Baik untuk ekstensi .xls dan .xlsx. Versi Java yang saya gunakan adalah: JDK1.6

Swagatika
sumber
1
Bagaimana dengan: "API mana yang tersedia untuk membaca / menulis spreadsheet Microsoft Excel (JXL, Apache POI, dll) di Java? Apa skenario terbaik untuk menggunakan masing-masingnya?"
Cléssio Mendes

Jawaban:

258

Saya telah menggunakan JXL (sekarang "JExcel") dan Apache POI . Awalnya saya menggunakan JXL, tapi sekarang saya menggunakan Apache POI.

Pertama, berikut adalah hal-hal di mana kedua API memiliki fungsi akhir yang sama:

  • Keduanya gratis
  • Penataan sel: perataan, latar belakang (warna dan pola), batas (jenis dan warna), dukungan font (nama font, warna, ukuran, tebal, miring, coretan, garis bawah)
  • Rumus
  • Hyperlink
  • Wilayah sel yang digabungkan
  • Ukuran baris dan kolom
  • Pemformatan data: Angka dan Tanggal
  • Pembungkusan teks di dalam sel
  • Panel Bekukan
  • Dukungan Header / Footer
  • Baca / Tulis spreadsheet yang ada dan baru
  • Keduanya berusaha untuk menjaga objek yang ada di spreadsheet yang mereka baca sedapat mungkin utuh.

Namun, ada banyak perbedaan:

  • Mungkin perbedaan yang paling signifikan adalah bahwa Java JXL tidak mendukung format ".xlsx" Excel 2007+; itu hanya mendukung format BIFF (biner) ".xls" yang lama. Apache POI mendukung keduanya dengan desain yang sama.
  • Selain itu, bagian Java dari JXL API terakhir diperbarui pada tahun 2009 (3 tahun, 4 bulan yang lalu saat saya menulis ini), meskipun sepertinya ada C # API. Apache POI dipertahankan secara aktif.
  • JXL tidak mendukung Pemformatan Bersyarat, Apache POI mendukungnya, meskipun ini tidak terlalu signifikan, karena Anda dapat memformat sel secara bersyarat dengan kode Anda sendiri.
  • JXL tidak mendukung pemformatan teks kaya , yaitu pemformatan berbeda dalam string teks; Apache POI mendukungnya.
  • JXL hanya mendukung rotasi teks tertentu: horizontal / vertikal, +/- 45 derajat, dan bertumpuk; Apache POI mendukung bilangan bulat derajat apa pun plus ditumpuk.
  • JXL tidak mendukung bentuk gambar; Apache POI tidak.
  • JXL mendukung sebagian besar pengaturan Page Setup seperti Landscape / Portrait, Margins, Paper size, dan Zoom. Apache POI mendukung semua itu ditambah Baris dan Kolom Berulang.
  • JXL tidak mendukung Split Panes; Apache POI tidak.
  • JXL tidak mendukung pembuatan atau manipulasi Bagan; dukungan itu belum ada di Apache POI, tetapi API perlahan mulai terbentuk.
  • Apache POI memiliki kumpulan dokumentasi dan contoh yang lebih lengkap daripada JXL.

Selain itu, POI tidak hanya berisi API "model pengguna" utama, tetapi juga API berbasis peristiwa jika Anda hanya ingin membaca konten spreadsheet.

Kesimpulannya, karena dokumentasi yang lebih baik, lebih banyak fitur, pengembangan aktif, dan dukungan format Excel 2007+, saya menggunakan Apache POI.

rgettman
sumber
Terima kasih atas penjelasannya.
Swagatika
8
1 untuk jelas, ringkas, dan sangat membantu
Ron
1
getContents()metode kotor di JExcelAPI menghemat banyak waktu saya. Dengan POI, Anda harus memeriksa jenis selnya, lalu mendapatkan nilainya (jika itu sel Numerik, Anda perlu memeriksa apakah itu sel Tanggal) sesuai dengan jenisnya, dan akhirnya mengubahnya menjadi nilai String dengan metode berbeda, itu sangat merepotkan. Tidak dapat membayangkan POI tidak menyediakan metode yang kotor tapi nyaman seperti yang dilakukan JExcelAPI.
LiuYan 刘 研
1
Suatu hal yang sangat positif jika POI adalah bacaan berbasis peristiwa. Terutama pada perangkat seluler (= Android), ini sangat membantu saat menangani ukuran heap dan GC yang terbatas. Membaca XLS sederhana dengan JXL sering kali mencapai batas memori aplikasi, menyebabkan aplikasi macet.
dermatthias
2
Salah satu faktor penting yang membuat saya bermigrasi ke POI adalah fleksibilitas untuk menggunakan steaming API yang merupakan suatu keharusan ketika Anda ingin membaca excel dengan data yang sangat banyak. Anda tidak ingin data wole dimuat ke dalam memori saat Anda membuka excel, jika data di excel sangat besar. Dengan streaming, seluruh konten excel / dokumen kantor apa pun tidak akan dimuat ke memori segera setelah Anda mengurai sheet.
Ashok Koyi
12

Saya telah menggunakan POI.

Jika Anda menggunakannya, perhatikan pemformat sel tersebut: buat satu dan gunakan beberapa kali alih-alih membuat setiap kali untuk sel, itu adalah perbedaan konsumsi memori yang besar atau data yang besar.


sumber
5

Saya tidak terbiasa dengan JXL dan tetapi kami menggunakan POI. POI terpelihara dengan baik dan dapat menangani format biner .xls dan format berbasis xml baru yang diperkenalkan di Office 2007.

File CSV bukanlah file excel, mereka adalah file berbasis teks, jadi perpustakaan ini tidak membacanya. Anda perlu mengurai sendiri file CSV. Saya tidak mengetahui pustaka file CSV apa pun, tetapi saya juga belum melihatnya.

jwesley.dll
sumber