Excel'i İçe ve Dışa Aktar - En iyi kütüphane nedir? [kapalı]


180

C # 'daki ASP.NET uygulamalarımızdan birinde, belirli bir veri toplama (SubSonic toplama) alıp Excel'e aktarıyoruz. Ayrıca Excel dosyalarını belirli bir biçimde içe aktarmak istiyoruz. Bu amaçla kullanabileceğim bir kütüphane arıyorum.

Gereksinimler:

  • Excel 2007 dosyaları (Excel 2003 64 binden fazla satırı destekliyor mu? Bundan daha fazlasına ihtiyacım var.)
  • Sunucuda Excel gerektirmez
  • Yazılan bir koleksiyonu alır ve mümkünse Excel'de sayısal alanları sayısal olarak koymaya çalışır.
  • Büyük dosyalarla (100k - 10M) iyi çalışır - yeterince hızlı.
  • GUID'leri dışa aktarırken çökmez!
  • Bir yığın paraya mal olmaz (aspose gibi hiçbir kurumsal kütüphane). Ücretsiz her zaman harika, ama ticari bir kütüphane olabilir.

Hangi kütüphaneyi öneriyorsunuz? Büyük miktarlarda veri için kullandınız mı? Başka çözümler var mı?

Şu anda, Excel tarafından daha sonra yüklenen HTML üreten basit bir araç kullanıyorum, ancak bazı yetenekleri kaybediyorum, ayrıca Excel yüklediğimizde şikayet ediyor. Grafikler veya bunun gibi bir şey oluşturmam gerekmiyor, sadece ham verileri dışa aktarıyorum.

Düz CSV dosyalarını düşünüyorum, ancak Excel bir müşteri gereksinimi. Excel'e ve Excel'den dönüştürmek için bir aracım olsaydı, CSV ile doğrudan çalışabilirim. Excel 2007'nin xml tabanlı (ve sıkıştırılmış) bir dosya biçimi olduğu göz önüne alındığında, bu tür kitaplıkların kolay bulunabileceğini tahmin ediyorum. Ancak benim için en önemli şey yorumlarınız ve görüşleriniz.


DÜZENLEME: İronik olarak, bence ve en çok oy alan cevabı takiben, en iyi Excel ithalat ve ihracat kütüphanesi hiç ihracat değildir. Bu tüm senaryolar için geçerli değildir, ama benim için geçerli. XLS dosyaları yalnızca 64 bin satırı destekler. XLSX 1M'ye kadar destekler. Denediğim ücretsiz kütüphaneler kötü performansa sahip (200k satırınız olduğunda bir satır yüklemek için bir saniye). İhtiyacınız olan tek şey hızlı bir XLSX <-> CSV dönüşüm rutini olduğunda sundukları değer için overpriced olduklarını düşündüğüm için ücretli olanları denemedim.


18
"Verilen Excel 2007 xml tabanlı (ve sıkıştırılmış) bir dosya biçimidir, bu tür bir kütüphane bulmak kolay olmalı sanırım" - hah! Bu, "Excel 97 byte tabanlıdır, bu nedenle bu tür bir kütüphanenin bulunması kolay olmalıdır" demek gibidir. XML basitlik anlamına gelmez ve OOXML, XML'in nasıl anlaşılır ve tanımlanamaz şekilde karmaşık hale getirileceğinin poster çocuğudur. :-)
Ken

Aslında bu varsayımı yaparken tamamen doğru değilsiniz. En azından XLSX için iyi biçimlendirilmiş bir OOXML belgesi oluşturmayı, C # .NET ile yapmayı çok kolay hale getiren araçlar vardır.
İsimsiz Tip

3
Stack Overflow'dan uzak resmi bir ev gibi sorular vermek için bir site teklifi oluşturdum. Adı Kod Önerileri Şimdi katılarak soru sorarak gerçeğe dönüşmesine yardımcı olun!
daviewales

Spire.xls hakkında ne. Pro Edition için sadece 800 dolar. Tüm dönüşümlerinizi ve excel ithalat veya ihracatçınızı alırsınız. e-iceblue.com/Intduce/…
DotNet Programcı

GemBox.Spreadsheet , kontrol etmeye değer, süper hızlı ve hem ücretsiz hem de pro sürümlerine sahip başka bir çözümdür. Ayrıca, pro sürümü oldukça ucuz ve çoğu gibi dağıtım için herhangi bir gizli crappy maliyeti yok.
NixonUposseen

Yanıtlar:


41

Sadece kod üzerinde en büyük kontrole sahip olduğunuz için, düz csv dosyaları için elimi atacağım. Sadece satırları okuduğunuzdan ve bunları birer birer işlediğinizden emin olun (belgeyi sonuna kadar okumak ve bölmek tüm hafızanızı tüketir - yazmakla aynı şekilde, dışarı akıtın).

Evet, işlemeden önce kullanıcının Excel'de CSV olarak kaydetmesi gerekecek, ancak belki de bu sınırlama eğitim ve sayfada açık talimatlar sağlayarak aşılabilir mi?

Son olarak, müşteriye dışa aktardığınızda, mime türünü text / csv olarak ayarlarsanız, Excel genellikle bu türle eşlenir, böylece kullanıcıya 'Excel dosyası' olarak görünür.


4
CSV yaklaşımını da denedim, ancak bununla ilgili birkaç sorun var. Örneğin, bir hücrede çok satırlı bir metin olmasını isterseniz ne olur? Excel'in böyle bir CSV dosyasını içe aktarmasını sağlayamadım.
Igor Brejc

23
CSV'nin yeri var ama poster Excel hakkında sordu, sanırım CSV'yi değil Excel'i istiyor.
John Scipione

7
CSV, 0345 gibi sütunları dışa aktarırken düşer. Excel bunu otomatik olarak 345'e keser. Bu, önde gelen basamak önemli olduğunda hiç yardımcı olmaz.
NotMe

2
Bir excel dosya uzantısına sahip HTML tablosu oldukça iyi çalışıyor gibi görünüyor ... aslında bir yerel Excel dosyası oluşturmak zorunda kalmadan, birden fazla satır, renk ve benzeri biçimlendirme gibi şeyler için bazı CSS'yi tuhaf bir şekilde ayrıştıracak
Oskar Duveborn

3
"Farklı kaydet"? Hayır. Müşteri Excel kullanıyorsa, neden ürününüzle etkileşim kurmak için ikinci, çok daha sınırlı bir dosyayı kurtaralım?
mlibby

41

Orijinal cevabımdan bu yana Open XML SDK'yı keşfettim . Diğer şeylerin yanı sıra, elektronik tablo nesneleri için güçlü yazılan sınıflar sağlar ve çalışmak oldukça kolaydır. Bunu projelerimden birindeki raporlar için kullanacağım. Ne yazık ki, sürüm 2.0'ın 2009 veya 2010'un sonlarına kadar yayınlanması beklenmiyor.


Çok ilginç! Büyük miktarlarda veri kullanarak test ettiniz mi?
Jason Kealey

Performans testi yapmadım. Çoğunlukla grafikler ve tek sayfalık raporlar yapacağım, bu nedenle iş hacmi benim için bir sorun değil. Yine de yönetilen kod olabildiğince hızlı görünüyor.
cdonner

1
@Jason Kealey: bu yazıdaki gerçekten en iyi cevap - ihracat SpreadsheetML ile alakasız hale geliyor. Tüm verilere dosyadan erişilebilir. Verilere farklı bir biçimde ihtiyacınız varsa, XSLT veya Linq aracılığıyla bir dönüşüm sağlayın.
Todd Main

1
Bu, ".xls" dosyaları için hiçbir şekilde çalışmaz.
Quillbreaker

github.com/OfficeDev/Open-XML-SDK artık açık kaynak kodlu ve github barındırılıyor (MS'in son zamanlarda nereye gittiğini seviyorum)
Alex

34

ExcelPackage yeni sürümü burada http://EPPlus.codeplex.com

Uygulamamın excel-template 2007'ye bazı verileri dışa aktarması gerektiğinden, excel işlevine dışa aktarma ile mücadele ediyorum

Bu proje benim için iyi görünüyor ve geliştirici hatalara ve sorunlara çok duyarlı.


3
İyi çalışıyor, ancak GPL altında lisanslanmıştır - örneğin, onu kullanan herhangi bir yazılım da düz kaynak kodunda mevcut olmalıdır .... her zaman iyi bir seçim değildir ...
marc_s

Size uygun yerel bir formatta dışa aktarın, bir program yazın. Excel'e dönüştürmek için EPPlus kullanan bu ücretsiz. Ana prog'unuzu varsayılan olarak kullanın, ancak diğer "eklentilere" izin verin, gerçek kodunuz GPL'den ücretsizdir.

5
Bunun LGPL altında lisanslandığı anlaşılıyor, bu yüzden onu copyleft kısıtlamaları olmadan bağlantılı bir kütüphane olarak kullanmanız iyi.
Brad R

İçinde büyük dizeleri olan bir excel dosyası oluşturmanız gerekirse, bu kitaplığın excel'de rasgele 'okunamayan içerik' hataları oluşturma eğiliminde olduğunu unutmayın.
Kevin Laity

1
EPPlus'ın bellek sızdırdığını, büyük miktarda veri için gerçekten iyi olmadığını unutmayın.
user3285954

18

ClosedXML kullanıyorum ve harika çalışıyor!

ClosedXML, geliştiricilerin Excel 2007/2010 dosyaları oluşturmasını kolaylaştırır. XML Belgelerinin zorluklarıyla uğraşmadan dosyaları (VBA'ya benzer) manipüle etmek için güzel bir nesne yönelimli yol sağlar. C # ve Visual Basic (VB) gibi herhangi bir .NET dili tarafından kullanılabilir.


8
Adındaki ironiyi seviyorum ...
Jagd

Hem de aynı deneyimi kullandım. İyi çalışır ve çok esnektir.
AnthonyVO

14

.NET için SpreadsheetGear , CSV / XLS / XLSX'i okur ve yazar ve daha fazlasını yapar.

Sen C # ve VB kaynak kodu ile canlı ASP.NET örnekleri görebilirsiniz burada ve ücretsiz deneme indirmek burada .

Tabii ki SpreadsheetGear ASP.NET Excel çalışma kitaplarını içe / dışa aktarmak için en iyi kütüphane olduğunu düşünüyorum - ama önyargılıyım. Bazı müşterilerimizin söylediklerini bu sayfanın sağ tarafında görebilirsiniz .

Feragatname: SpreadsheetGear LLC şirketine sahibim


@Joe Erickson: Bir CSV okuma ve daha sonra CSV dışında bir XML üretme sadece elektronik tablo dişli kullanarak ve bu yapıyı içeren bir sonuç XML dosyası üreten bu XLS kullanarak nasıl gideceğini anlatabilir misiniz? Veya doğrudan CSV'den XML oluşturmak için Spreadsheetgear'ı kullanabilir miyiz?
AnkitSablok


5

Geçmişte Flexcel'i kullandım ve harikaydı. Ancak bu, excel çalışma sayfalarını programlı olarak oluşturmak ve güncellemek için daha fazlaydı.


Bunun Excel 2007'yi (xlsx) desteklediğini göremiyorum. Xls sadece 64k satırı desteklediğinden, bu benim için bir sınırlama.
Jason Kealey

@Jason Kealey - Flexcel artık Excel 2007 ve 2010'u destekliyor.
Pauk

5

CSV dışa aktarma işlemi basit, uygulanması kolay ve hızlıdır. Yine de dikkat çekmeye değer bir sorun var. Excel (2007'ye kadar) CSV dosyalarında önde gelen sıfırları korumaz. Bu, posta kodlarını, ürün kimliklerini ve sayısal değerler içeren diğer metin verilerini bozar. Excel'in değerleri doğru bir şekilde içe aktarmasını sağlayacak bir hile vardır (doğru hatırlıyorsam, sınırlayıcıları ve önek değerlerini = işaretiyle kullanarak, örneğin .., = "02052", ...). CSV ile işleme sonrası görevler yapacak kullanıcılarınız varsa, biçimi XLS olarak değiştirmeniz ve dosyayı tekrar CSV'ye kaydetmemesi gerektiğini bilmeleri gerekir. Eğer yaparlarsa, önde gelen sıfırlar iyilik için kaybolacaktır.


1
Metin olarak korunması gereken herhangi bir şey için, başlangıçta bir '(kesme işareti) koyun
phuclv

Bir başka eğlenceli gerçek: Almanca gibi bir çok yerde bir virgülle ayrılmış dosya açamıyorum. Bu da csv'yi uluslararası iletişim bilgileriyle paylaşmak için kötü bir format haline getiriyor
Christian Sauer

4

Yıllardır, bunun için mükemmel bir açık kaynaklı Java projesi olan JExcel'i kullandım . Ayrıca derlemek için J # kullanarak .NET-mümkün oldu ve ben de bu enkarnasyon onunla büyük bir başarı oldu. Ancak, son zamanlarda Excel çıktısı oluşturduğum bir 64-bit IIS uygulamasını desteklemek için kodu yerel .NET'e geçirmem gerekiyordu. 32-bit J # sürümü yüklenmez.

CSharpJExcel kodu LGPL'dir ve şu anda bu sayfada mevcuttur, biz JExcel SourceForge sitesinde dağıtmaya hazırlanırken. VS2005 veya VS2008 ile derlenecektir. Orijinal JExcel belgelerindeki örnekler oldukça iyi bir şekilde .NET sürümüne geçecektir.

Umarım burada birisi için faydalıdır.


Her iki bağlantı da artık çalışmıyor ... ama bazı parçacıkları buldum ve .NET geliştiricileri için çok fazla Java dostu değil gibi görünüyor. Ancak, karşısındaki başka bir kütüphane buldum , aynı zamanda Java ( GemBox.Spreadsheet for Java ) için taşınan bir yerel .NET kütüphanesi ( GemBox.Spreadsheet ).
Hazel Patton


3

Aşağıdaki site, bir DataTable, DataSet veya List <> 'in "uygun" Excel 2007 .xlsx dosyasına nasıl aktarılacağını (.csv dosyasını dışa aktarmak ve Excel'in açmasını sağlamak yerine) gösterir.

Eğer, bu yüzden açık XML kütüphaneleri kullanan yok Excel sunucuda yüklü olması gerekir.

Mikes Bilgi Bankası - ExportToExcel

Tüm kaynak kodu ücretsiz olarak bir demo uygulaması olarak verilir.

Kendi uygulamalarınıza eklemek çok kolaydır, sadece bir işlevi çağırmanız, Excel dosya adını ve veri kaynağınızı aramanız yeterlidir:

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

Bu yardımcı olur umarım.


2

ExcelPackage projesini kontrol edin, Excel 2007'nin Office Open XML dosya biçimini kullanır, hafif ve açık kaynaklıdır ...


1
İyi görünüyordu ama bir yorum büyük dosyalar (benim senaryom) ile kötü olduğunu söylüyor
Jason Kealey

1
İlginç - LGPL değil, GPL olarak lisanslanmıştır. Bu nedenle, GPL uygulamalarında kullanılmalıdır. (Ayrıca, gelişimin durduğu talihsiz gibi görünüyor.)
Jason Kealey

1
ExcelPackage'ı denedim, ancak terk etmek zorunda kaldım - bir hücreye tek tırnak (') koymayı denediğinizde başarısız oluyor.
Igor Brejc

2

CSharpJExcel denedim ve en azından bazı belgeler mevcut olana kadar, tavsiye etmem. Geliştiriciler aksine öyle yorumlar değil düz bir yerli portu.


2

Bu oldukça geç olduğunu biliyorum ama cevap mecbur hissediyorum Xporter (yazma) ve xlReader dan (okuma) xPortTools.Net . Oldukça az sayıda kütüphaneyi test ettik ve performans yolunda hiçbir şey yaklaşmadı (saniyeler içinde milyonlarca satır yazmaktan bahsediyorum). Bu ürünler hakkında yeterince iyi şeyler söyleyemem!


2

Kullanabilirsiniz Microsoft.Jet.OLEDB.4.0


1
Gereksinimlerimden biri, Excel'in sunucuda çalışmasını sağlamak değil.
Jason Kealey

2
sanmıyorum yani çalışıyor!
Soner Gönül

2
MS Office "xlsx için Microsoft.Jet.OLEDB.4.0" (xls için) "xlsx için Microsoft.ACE.OLEDB.12.0" için gerekli değildir. sadece Sürücüleri kullanmanız gerekiyor, bu yüzden Excel'de sunucu çalıştırmak için bir şans yok @Jason Kealey
Sanjay Goswami

1
Bunu XLS (orijinal gereksinim değil) ve bütünlük için kullandım ... Bazı önemli sorunlar var: (1) Sadece 32 bit, bu yüzden IIS'yi buna izin verecek şekilde ayarlamanız gerekecek. (2) İhracatta çok yavaş. (3) Kötü belgelenmiş satır ve sütun sınırları vardır. (4) Kayıt defteri erişiminiz yoksa, içe aktarılan sütunlarda "tür koklama" konusunda ısrar eder ve genellikle yanlış olur.
philw

1

Biz de benzer bir ihtiyaç tespit ettik. Kullanıcı deneyimini dikkate almanın önemli olduğunu düşünüyorum.

Neredeyse aynı şeyleri takip ettik:

  1. Elektronik tablo dosyasında hazırlama / çalışma
  2. Dosyayı kaydet
  3. Önemli dosya
  4. Sistemdeki verilerle çalışma

... iş akışı

Eklenti Express , VSTO ile ilgili tüm bu sıkıcı mucking olmadan Excel'de bir düğme oluşturmanıza izin verir. Ardından iş akışı şöyle olur:

  1. Elektronik tablo dosyasında hazırlama / çalışma
  2. Dosyayı içe aktar ( Excel içindeki düğmeyi kullanarak )
  3. Sistemdeki verilerle çalışma

Düğmenin arkasındaki kodun "yerel" Excel API'sını (Add-in Express aracılığıyla) kullanmasını ve doğrudan alıcı sistemine aktarmasını sağlayın. Geliştirici veya kullanıcı için daha fazla şeffaf olamazsınız. Dikkate değer.


1

Yogesh Jagota'nın CodeProject hakkında oldukça iyi bir makale ve kütüphane var:

Excel XML Alma-Verme Kütüphanesi

SQL sorgularından ve diğer veri kaynaklarından Excel'e veri aktarmak için kullandım - benim için iyi çalışıyor.

Şerefe


1
İlginç, ancak XML dosyaları gerektirir. Xls veya xlsx dosyaları okunamıyor / yazılamıyor.
Jason Kealey

1

Aşağıdaki kütüphaneyi deneyebilirsiniz, yeterince kolaydır ve Microsoft'un Açık XML SDK'sına göre hafif bir sarıcıdır (ikincil Excel dosyasından biçimlendirmeyi, stilleri ve hatta tüm çalışma sayfalarını yeniden kullanabilirsiniz): http://officehelper.codeplex.com


Kütüphanenin yeni sürümü yakın zamanda yayınlandı.
aron.sinoai

0

Spreadsheetgear, bulduğumuz ve kullandığımız en iyi ticari kütüphanedir. Firmamız birçok gelişmiş excel ithalat ve ihracat yapar ve Spreadsheetgear basit CSV ile yapabileceğiniz her şeyin ötesinde birçok gelişmiş excel özelliğini destekler ve hızlıdır. Ücretsiz ya da çok ucuz değil ama buna değer çünkü destek mükemmel. Bir sorunla karşılaşırsanız geliştiriciler size gerçekten yanıt verecektir.


0

Apache POI java kütüphanesine ne dersiniz? Excel için kullanmadım, ancak Word 2007 için kullandım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.