Impor dan Ekspor Excel - Apa perpustakaan terbaik? [Tutup]

180

Di salah satu aplikasi ASP.NET kami di C #, kami mengambil kumpulan data tertentu (koleksi SubSonic) dan mengekspornya ke Excel. Kami juga ingin mengimpor file Excel dalam format tertentu. Saya mencari perpustakaan yang bisa saya gunakan untuk tujuan ini.

Persyaratan:

  • File Excel 2007 (Apakah Excel 2003 mendukung lebih dari 64k baris? Saya perlu lebih dari itu.)
  • Tidak memerlukan Excel di server
  • Mengambil koleksi yang diketik dan, jika bisa, mencoba menempatkan bidang angka sebagai angka di Excel.
  • Bekerja dengan baik dengan file besar (100rb hingga 10rb) - cukup cepat.
  • Tidak macet saat mengekspor GUID!
  • Tidak memerlukan biaya banyak uang (tidak ada perpustakaan perusahaan seperti aspose). Gratis selalu bagus, tetapi bisa menjadi perpustakaan komersial.

Perpustakaan apa yang Anda rekomendasikan? Sudahkah Anda menggunakannya untuk data dalam jumlah besar? Apakah ada solusi lain?

Saat ini, saya menggunakan alat sederhana yang menghasilkan HTML yang dimuat oleh Excel nanti, tapi saya kehilangan beberapa kemampuan, ditambah Excel mengeluh ketika kita memuatnya. Saya tidak perlu membuat grafik atau semacamnya, hanya mengekspor data mentah.

Saya sedang memikirkan file CSV datar, tetapi Excel adalah persyaratan pelanggan. Saya dapat bekerja dengan CSV secara langsung, jika saya memiliki alat untuk mengonversi ke dan dari Excel. Mengingat Excel 2007 adalah format file berbasis xml (dan zip), saya menduga perpustakaan semacam ini harus mudah ditemukan. Namun, yang paling penting bagi saya adalah komentar dan pendapat Anda.


EDIT: Ironisnya, menurut saya dan mengikuti jawaban dengan suara terbanyak, pustaka impor & ekspor Excel terbaik tidak ada ekspor sama sekali. Ini bukan kasus untuk semua skenario, tetapi untuk saya. File XLS hanya mendukung baris 64rb. XLSX mendukung hingga 1 juta. Perpustakaan gratis yang saya coba memiliki fitur kinerja yang buruk (satu detik untuk memuat satu baris ketika Anda memiliki 200 ribu baris). Saya belum mencoba yang berbayar, karena saya merasa mereka terlalu mahal untuk nilai yang mereka berikan ketika semua yang Anda butuhkan adalah XLSX <-> CSV konversi rutin yang cepat.

Jason Kealey
sumber
18
"Mengingat Excel 2007 adalah format file berbasis xml (dan zip), saya kira perpustakaan semacam ini seharusnya mudah ditemukan" - hah! Itu seperti mengatakan "Excel 97 berbasis byte, jadi perpustakaan seperti ini seharusnya mudah ditemukan". XML tidak menyiratkan kesederhanaan, dan OOXML adalah anak poster untuk bagaimana membuat XML kurang spesifik dan rumit tak teruraikan. :-)
Ken
Sebenarnya Anda tidak sepenuhnya benar dalam membuat asumsi itu. Ada alat yang tersedia yang membuat pembuatan dokumen OOXML yang bagus setidaknya untuk XLSX, sangat mudah dilakukan dengan C # .NET.
Jenis Anonim
3
Saya telah membuat proposal situs untuk memberikan pertanyaan seperti ini sebagai rumah resmi dari Stack Overflow. Ini disebut Rekomendasi Kode Bantu mewujudkannya dengan bergabung dan mengajukan pertanyaan sekarang!
daviewales
Bagaimana dengan Spire.xls. Hanya $ 800 untuk Edisi Pro. Anda mendapatkan semua konversi Anda serta impor atau eksportir excel Anda. e-iceblue.com/Introduce/…
DotNet Programmer
GemBox. Spreadsheet adalah solusi lain yang layak untuk dicoba, sangat cepat dan memiliki versi gratis dan pro. Juga, versi pro agak murah dan tidak memiliki biaya jelek tersembunyi untuk penyebaran seperti kebanyakan dari mereka.
NixonUposseen

Jawaban:

41

Saya akan melemparkan tangan saya untuk file csv datar, kalau saja karena Anda punya kontrol terbesar atas kode. Pastikan Anda membaca di baris dan memprosesnya satu per satu (membaca dokumen sampai akhir dan membelah akan memakan semua memori Anda - sama dengan menulis, streaming keluar).

Ya, pengguna harus menyimpan-sebagai CSV di excel sebelum Anda bisa memprosesnya, tetapi mungkin batasan ini dapat diatasi dengan pelatihan dan memberikan instruksi yang jelas pada halaman?

Akhirnya, ketika Anda mengekspor ke pelanggan, jika Anda mengatur jenis mime ke teks / csv, Excel biasanya dipetakan ke jenis itu sehingga tampaknya pengguna adalah 'file Excel'.

tsimon
sumber
4
Saya mencoba pendekatan CSV juga, tetapi ada beberapa masalah dengannya. Misalnya, bagaimana jika Anda ingin memiliki teks multi-baris dalam sel? Saya tidak bisa membuat Excel mengimpor CSV seperti itu.
Igor Brejc
23
CSV memiliki tempatnya tetapi poster bertanya tentang Excel, saya berasumsi bahwa ia harus menginginkan Excel, bukan CSV.
John Scipione
7
CSV jatuh ketika mengekspor kolom seperti 0345. Excel secara otomatis memangkas ini menjadi 345. Yang sama sekali tidak membantu ketika angka utama itu penting.
NotMe
2
Tabel HTML dengan ekstensi file excel tampaknya bekerja dengan sangat baik ... itu akan mengurai beberapa CSS dengan cara yang aneh untuk hal-hal seperti memformat beberapa baris, warna, dan sebagainya - tanpa benar-benar harus membuat file Excel asli
Oskar Duveborn
3
"Simpan sebagai"? Tidak. Jika pelanggan menggunakan Excel, lalu mengapa mereka menghemat satu detik, file yang jauh lebih terbatas untuk berinteraksi dengan produk Anda?
mlibby
41

Saya menemukan Open XML SDK sejak jawaban awal saya. Ini memberikan kelas yang sangat diketik untuk objek spreadsheet, antara lain, dan tampaknya cukup mudah untuk dikerjakan. Saya akan menggunakannya untuk laporan di salah satu proyek saya. Sayangnya, versi 2.0 tidak seharusnya dirilis sampai akhir 2009 atau 2010.

pendiam
sumber
Sangat menarik! Sudahkah Anda mengujinya menggunakan data dalam jumlah besar?
Jason Kealey
Saya belum melakukan tes kinerja. Saya sebagian besar akan bagan dan dan laporan satu halaman, jadi throughput bukan masalah bagi saya. Tampaknya menjadi kode terkelola dapat, meskipun.
cdonner
1
@Jason Kealey: ini benar-benar jawaban terbaik untuk pos ini - ekspor menjadi tidak relevan dengan SpreadsheetML. Semua data dapat diakses dari dalam file. Jika Anda membutuhkan data dalam format yang berbeda, berikan transformasi melalui XSLT atau via Linq.
Todd Main
1
Ini tidak bekerja untuk file ".xls" sama sekali.
quillbreaker
github.com/OfficeDev/Open-XML-SDK sekarang menjadi opensource dan dihosting github (Saya suka kemana MS akan pergi baru-baru ini)
Alex
34

versi baru ExcelPackage ada di sini http://EPPlus.codeplex.com

Saya masih berjuang dengan fungsi ekspor ke excel karena aplikasi saya harus mengekspor beberapa data ke excel-template 2007

proyek ini tampaknya baik untuk saya, dan pengembang sangat responsif terhadap bug dan masalah.

Mohannad Otaibi
sumber
3
Berfungsi dengan baik, tetapi dilisensikan di bawah GPL - mis. Perangkat lunak apa pun yang menggunakannya harus tersedia dalam kode sumber biasa juga .... tidak selalu merupakan pilihan yang baik ...
marc_s
Ekspor dalam format asli yang nyaman bagi Anda, tulis prog. yang menggunakan EPPlus untuk mengonversi ke Excel, buat itu gratis. Jadikan prog utama Anda menggunakannya sebagai default, tetapi biarkan "plugin" lainnya, hei presto kode asli Anda bebas dari GPL.
5
Tampaknya ini sekarang dilisensikan di bawah LGPL, jadi Anda boleh menggunakannya sebagai perpustakaan yang ditautkan tanpa batasan copyleft.
Brad R
Perhatikan bahwa jika Anda perlu menghasilkan file excel yang memiliki string besar di dalamnya, pustaka ini memiliki kecenderungan untuk secara acak menghasilkan kesalahan 'konten yang tidak dapat dibaca' di excel.
Kevin Laity
1
Berhati-hatilah karena EPPlus membocorkan memori, tidak terlalu bagus untuk data dalam jumlah besar.
user3285954
18

Saya telah menggunakan ClosedXML dan berfungsi dengan baik!

ClosedXML memudahkan pengembang untuk membuat file Excel 2007/2010. Ini memberikan cara berorientasi objek yang bagus untuk memanipulasi file (mirip dengan VBA) tanpa berurusan dengan kerepotan Dokumen XML. Ini dapat digunakan oleh bahasa .NET seperti C # dan Visual Basic (VB).

Druid
sumber
8
Saya suka ironi dalam nama ...
Jagd
Menggunakannya juga dan pengalaman yang sama. Bekerja dengan baik dan sangat fleksibel.
AnthonyVO
14

SpreadsheetGear untuk .NET membaca dan menulis CSV / XLS / XLSX dan melakukan lebih banyak.

Anda dapat melihat sampel ASP.NET langsung dengan kode sumber C # dan VB di sini dan mengunduh uji coba gratis di sini .

Tentu saja saya pikir SpreadsheetGear adalah perpustakaan terbaik untuk mengimpor / mengekspor buku kerja Excel di ASP.NET - tapi saya bias. Anda dapat melihat apa yang dikatakan beberapa pelanggan kami di sisi kanan halaman ini .

Penafian: Saya memiliki SpreadsheetGear LLC

Joe Erickson
sumber
@ Jo Erickson: Dapatkah Anda mengetahui bagaimana cara membaca CSV dan kemudian menghasilkan XML dari CSV hanya membaca menggunakan gear Spreadsheet dan menggunakan XLS yang menghasilkan file XML yang dihasilkan yang berisi struktur itu? Atau bisakah kita menggunakan Spreadsheetgear untuk menghasilkan XML dari CSV secara langsung?
AnkitSablok
5

Saya telah menggunakan Flexcel di masa lalu dan itu hebat. Tapi ini lebih untuk membuat dan memutakhirkan lembar kerja excel secara terprogram.

Duncan
sumber
Saya tidak dapat melihat bahwa ini mendukung Excel 2007 (xlsx). Karena xls hanya mendukung baris 64k, ini adalah batasan bagi saya.
Jason Kealey
@Jason Kealey - Flexcel sekarang mendukung Excel 2007 dan 2010.
Pauk
5

Ekspor CSV sederhana, mudah diimplementasikan, dan cepat. Ada satu masalah potensial yang perlu diperhatikan. Excel (hingga 2007) tidak menyimpan angka nol dalam file CSV. Ini akan memutarbalikkan kode ZIP, id produk, dan data tekstual lainnya yang berisi nilai numerik. Ada satu trik yang akan membuat Excel mengimpor nilai-nilai dengan benar (menggunakan pembatas dan nilai awalan dengan tanda =, jika saya ingat dengan benar, misalnya .., = "02052", ...). Jika Anda memiliki pengguna yang akan melakukan tugas pasca-pemrosesan dengan CSV, mereka harus menyadari bahwa mereka perlu mengubah format menjadi XLS dan tidak menyimpan file kembali ke CSV. Jika mereka melakukannya, nol di depan akan hilang untuk selamanya.

pendiam
sumber
1
Untuk apa pun yang harus dipertahankan sebagai teks, cukup cantumkan '(apostrof) di awal
phuclv
Fakta lain yang menyenangkan: Saya tidak bisa membuka file yang dipisah koma di banyak tempat, seperti Jerman. Yang membuat csv format buruk untuk berbagi data dengan kontak internasional
Christian Sauer
4

Selama bertahun-tahun, saya telah menggunakan JExcel untuk ini, proyek Java open-source yang sangat baik. Itu juga. NET-bisa dengan menggunakan J # untuk mengkompilasinya, dan saya juga telah sukses besar dengan itu dalam inkarnasi ini. Namun, baru-baru ini saya perlu memigrasi kode ke .NET asli untuk mendukung aplikasi IIS 64-bit di mana saya membuat output Excel. Versi J # 32-bit tidak mau dimuat.

Kode untuk CSharpJExcel adalah LGPL dan saat ini tersedia di halaman ini , sementara kami bersiap untuk menggunakannya di situs JExcel SourceForge. Ini akan dikompilasi dengan VS2005 atau VS2008. Contoh-contoh dalam dokumentasi JExcel asli akan bergerak dengan baik ke versi .NET.

Semoga bermanfaat bagi seseorang di sini.

Chris Laforet
sumber
Kedua tautan tidak lagi berfungsi ... tapi saya menemukan beberapa cuplikannya dan sepertinya lebih ramah Java, tidak terlalu untuk pengembang .NET. Namun, saya memang menemukan perpustakaan lain yang berlawanan, itu adalah perpustakaan .NET asli ( GemBox.Spreadsheet ), yang juga porting ke Jawa ( GemBox.Spreadsheet untuk Jawa ).
Hazel Patton
3

Saya telah bekerja dengan excel jetcell untuk waktu yang lama dan benar-benar dapat merekomendasikannya. http://www.devtriogroup.com/exceljetcell

  • Produk komersial
  • File Excel XLS & XLSX
  • Berdasarkan mesin sendiri di jaring murni.
Robert Tyson
sumber
3

Situs berikut menunjukkan cara mengekspor DataTable, DataSet, atau Daftar <> ke file Excel .xlsx "2007" yang layak (daripada mengekspor file .csv, dan meminta Excel untuk membukanya).

Ini menggunakan pustaka OpenXML, jadi Anda tidak perlu menginstal Excel di server Anda.

Basis Pengetahuan Mikes - ExportToExcel

Semua kode sumber diberikan, gratis , dan juga sebagai aplikasi demo.

Sangat mudah untuk menambahkan ke aplikasi Anda sendiri, Anda hanya perlu memanggil satu fungsi, meneruskan nama file Excel, dan sumber data Anda:

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

Semoga ini membantu.

Mike Gledhill
sumber
2

Periksa proyek ExcelPackage , menggunakan format file Office Open XML Excel 2007, ringan dan open source ...

CMS
sumber
1
Tampak bagus tapi satu komentar mengatakan itu buruk dengan file besar (skenario saya)
Jason Kealey
1
Menarik - ini dilisensikan sebagai GPL, bukan LGPL. Karena itu, ia harus digunakan dalam aplikasi GPL. (Juga, disayangkan bahwa pembangunan tampaknya telah berhenti.)
Jason Kealey
1
Saya mencoba ExcelPackage, tetapi harus mengabaikannya - gagal ketika Anda mencoba memasukkan tanda kutip tunggal (') dalam sel.
Igor Brejc
2

Saya sudah mencoba CSharpJExcel dan tidak akan merekomendasikannya, setidaknya tidak sampai ada beberapa dokumentasi yang tersedia. Bertentangan dengan komentar pengembang itu bukan port asli langsung.

pengguna483711
sumber
2

Saya tahu ini agak terlambat, tetapi saya merasa harus menjawab xPorter (menulis) dan xlReader (membaca) dari xPortTools.Net . Kami menguji beberapa perpustakaan dan tidak ada yang mendekati kinerja (saya berbicara tentang menulis jutaan baris dalam hitungan detik di sini). Tidak bisa mengatakan cukup banyak hal baik tentang produk ini!

DanP
sumber
2

Kamu bisa memakai Microsoft.Jet.OLEDB.4.0

RG.
sumber
1
Salah satu persyaratan saya adalah agar Excel tidak berjalan di server.
Jason Kealey
2
Saya tidak berpikir itu berjalan !!
Soner Gönül
2
MS office tidak diperlukan untuk "Microsoft.Jet.OLEDB.4.0" (untuk xls) "Microsoft.ACE.OLEDB.12.0 untuk xlsx". Anda hanya harus menggunakan Drivers, jadi tidak ada kesempatan untuk menjalankan Excel di server @Jason Kealey
Sanjay Goswami
1
Saya menggunakan ini untuk XLS (bukan persyaratan asli), dan untuk kelengkapan ... Ada beberapa masalah penting: (1) Ini hanya 32-bit, jadi Anda harus mengatur IIS untuk mengizinkannya. (2) Ekspornya sangat lambat. (3) Memiliki batas baris dan kolom yang kurang terdokumentasi. (4) Itu bersikeras "ketik mengendus" kolom yang diimpor kecuali Anda memiliki akses registri, dan itu umumnya salah.
philw
1

Kami baru saja mengidentifikasi kebutuhan yang serupa. Dan saya pikir penting untuk mempertimbangkan pengalaman pengguna.

Kami hampir saja dialihkan ke jalur yang sama:

  1. Mempersiapkan / bekerja dalam file spreadsheet
  2. Menyimpan file
  3. Impor file
  4. Bekerja dengan data dalam sistem

... alur kerja

Add-in Express memungkinkan Anda untuk membuat tombol dalam Excel tanpa semua yang membosankan dengan VSTO. Maka alur kerja menjadi:

  1. Mempersiapkan / bekerja dalam file spreadsheet
  2. Impor file (menggunakan tombol di dalam Excel )
  3. Bekerja dengan data dalam sistem

Minta kode di belakang tombol gunakan API "asli" Excel (via Add-in Express) dan dorong langsung ke sistem penerima. Anda tidak bisa mendapatkan lebih transparan untuk pengembang atau pengguna. Layak dipertimbangkan.

Program.X
sumber
1

Ada artikel dan perpustakaan yang cukup bagus tentang CodeProject oleh Yogesh Jagota:

Perpustakaan Impor-Ekspor Excel XML

Saya telah menggunakannya untuk mengekspor data dari kueri SQL dan sumber data lainnya ke Excel - berfungsi dengan baik untuk saya.

Bersulang

marc_s
sumber
1
Menarik, tetapi membutuhkan file XML. Tidak dapat membaca / menulis file xls atau xlsx.
Jason Kealey
1

Anda dapat mencoba pustaka berikut, cukup mudah dan itu hanya pembungkus ringan di atas Open XML SDK Microsoft (Anda bahkan dapat menggunakan kembali pemformatan, gaya, dan bahkan seluruh lembar kerja dari file Excel sekunder): http://officehelper.codeplex.com

aron.sinoai
sumber
Rilis baru perpustakaan baru-baru ini diterbitkan.
aron.sinoai
0

Spreadsheetgear adalah perpustakaan komersial terbaik yang kami temukan dan gunakan. Perusahaan kami melakukan banyak impor dan ekspor excel canggih dan Spreadsheetgear mendukung banyak fitur excel canggih yang jauh melampaui apa pun yang dapat Anda lakukan dengan CSV sederhana, dan cepat. Ini tidak gratis atau sangat murah tetapi layak karena dukungannya sangat baik. Pengembang benar-benar akan merespons Anda jika Anda mengalami masalah.

pilavdzice
sumber
0

Bagaimana dengan perpustakaan java POI apache. Saya belum menggunakannya untuk Excel, tetapi tidak menggunakannya untuk Word 2007.

harijay
sumber