Soru C # Excel (.XLS ve .XLSX) dosyası oluşturun.


Kod çalıştıran makinede Excel'in yüklenmesini gerektirmeden C # ile bir Excel Elektronik Tablosu nasıl oluşturabilirim?


1571


Menşei


Bu doğru yer olup olmadığından emin değil, ancak kapalı bir göz atın. Kodunuza> 2003 sınırını koydu, ancak şimdiye kadar bunu büyük bir başarı ile kullandık. - Carl
Bu, açıklandığı gibi sadece .NET Framework ile yapılabilir İşteya da bazı kütüphane ile çok daha kolay GemBox.Spreadsheet. - NixonUposseen


Cevaplar:


ExcelLibrary adlı bir kütüphaneyi kullanabilirsiniz. Google Code’da yayınlanan ücretsiz bir açık kaynak kütüphanesi:

ExcelLibrary

Bu, yukarıda bahsettiğiniz PHP ExcelWriter'in bir portu gibi görünüyor. Henüz yeni .xlsx formatına yazılmayacak, ancak bu işlevselliği eklemeye çalışıyorlar.

Çok basit, küçük ve kullanımı kolaydır. Ayrıca, Excel verileriyle kolayca çalışmak için DataSets ve DataTables kullanmanıza olanak sağlayan bir DataSetHelper vardır.

ExcelLibrary hala eski Excel formatı (.xls dosyaları) için çalışıyor gibi görünüyor, ancak daha yeni 2007/2010 formatları için gelecekte destek ekliyor olabilir.

Ayrıca kullanabilirsiniz EPPlus, yalnızca Excel 2007/2010 biçimindeki dosyalar için (.xlsx dosyaları) çalışır.

Yorumlarda belirtildiği gibi her kitaplık ile bilinen birkaç hata vardır. Sonuç olarak, EPPlus zaman geçtikçe en iyi seçim gibi görünüyor. Daha aktif olarak güncellenmiş ve belgelenmiş gibi görünüyor.

Ayrıca, aşağıda @ АртёмЦарионов tarafından belirtildiği gibi, EPPlus Pivot Tablolar için destek vardır ve ExcelLibrary biraz destek alabilir (ExcelLibrary'de Pivot tablo sorunu)

İşte hızlı başvuru için birkaç link:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU Daha Az Genel Kamu Lisansı (LGPL)

İşte ExcelLibrary için bazı örnek kod:

İşte bir veri tabanından veri alıp bir çalışma kitabı hazırlayan bir örnek. ExcelLibrary kodunun en alttaki tek satır olduğunu unutmayın:

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

Excel dosyasını oluşturmak bu kadar kolay. Excel dosyalarını elle de oluşturabilirsiniz, ancak yukarıdaki işlevler beni gerçekten etkiledi.


877



ExcelLibrary, olağanüstü EPPlus tarafından yerine getirildi - epplus.codeplex.com. Jan düzenli olarak günceller. Onu kullanıyor ve birlikte çalıştığımız en iyi açık kaynak projelerinden biri. - Mark A
Hayır. EppPlus kullanın - epplus.codeplex.com. Bu en yeniler. Biçimlendirmeyi destekler. Kullanıyorum - Bill Paetzke
ExcelLibrary sadece .xls ve EPPlus'u yalnızca .xlsx'i destekledikleri için birbirlerini tamamlarlar. - jmster
-1 Örnek kod gönderecekseniz, doğru olduğundan emin olabilirsiniz. Yönetilmeyen kaynakları açık bir şekilde çöp toplayıcıyla birlikte kullanmak için bu arabirimin Dispose yöntemini kullanın. Nesne artık gerekmediğinde, bir nesnenin tüketicisi bu yöntemi çağırabilir. - ta.speot.is
Lütfen aynı işlevselliğe sahip olana kadar EPPlus'ı ExcelLibrary'a alternatif olarak durdurmayı bırakın (tek kullanımlık XLS, diğer XLSX). EPPlus'u sevdiğim kadarıyla, OP'nin ihtiyaçlarına (XLS) bir cevap değildir. - Chris Rogers


Xlsx biçiminden memnunsanız, benim Codeplex GitHub projesi. EPPlus. ExcelPackage kaynağından başladı, ancak bugün bu bir toplam yeniden yazıyor. Aralıklar, hücre stilleri, grafikler, şekiller, resimler, adlar, otomatik filtreler ve diğer birçok şeyi destekler.


491



Tamamen ücretsiz olan kitaplığım da, Açık XML kullanarak, herhangi bir DataSet, DataTable veya List <>'i doğrudan bir Excel 2007 .xlsx dosyasına aktarmanıza izin verir. Tam kaynak kodu ve demo, burada kullanılabilir: mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm - Mike Gledhill
Lisans şimdi LGPL, sürüm notları burada: epplus.codeplex.com/releases/view/79802 - Simon D
Örnekler yardımcı oldu. Kodumu Microsoft interop kitaplığı (korkunç yavaş) kullanarak birkaç saat içinde bu kitaplığa (sürüm 4.x) kullanarak değiştirmeyi başardım. Benim benchmark, iki sekme ve yaklaşık 750.000 hücre içeren bir dosya yazar. MS interop kullanarak 13 dakika sürdü. EPPlus kullanarak 10 saniye sürdü, kabaca 80x hızlanma. Çok mutlu! - Paul Chernoch
@ JanKällman Bu yöntemleri kullanabildiğinizi göstermek için CodePlex sayfanızı güncellemeniz gerekir: LoadFromCollection<T>, LoadFromDataTable vb. İşte) - PeterX
Bu iş parçacığında netlik sağlamak için LGPL, GPL'nin enfektif kısmı olmadan yazılımın bağlanmasına izin verir. Yaptığınız kaynak değişikliklerini sadece OpenXml uygulamasında açmanız veya kaynak kodunu (ClosedXml derlemelerine başvurmak yerine) doğrudan uygulamanızın içine koymanız gerekiyorsa, uygulamanızı açmanız gerekir. - Chris Marisic


Aşağıdaki açık kaynak projeleriyle başarıya ulaştım:

  • OOXML biçimleri için ExcelPackage (Office 2007)

  • .XLS biçimi için NPOI (Office 2003). NPOI 2.0 (Alpha) ayrıca XLSX'i de destekler.

Blog yayınlarıma bir göz atın:

C # olarak Excel tabloları .XLS ve .XLSX oluşturma

Excel Tablosu ve dinamik Grafik ile NPOI


147



NPOI - Satır ve Sütun referansları üzerine bir not sıfır tabanlı. Mevcut bir şablonu doldurmak için iyi çalışır. - John M
NPOI 2 şu anda Beta'da ve ben basit ihracatlar için projelerimde bunu sorunsuz kullanıyorum. - Travis
İşe yarıyor. Aynı zamanda, en çok icat edilen sınıf ve isim-alanı isimlerinin birçoğuna sahiptir - alay etmek yerine temel veri formatını zalimce taklit eder. - Roman Starkov
Bu soru ve cevapları gerçekten eskidir. NPOI şimdi gitmek için bir yoldur ve bu cevabı, EPPlus ve ExcelLibrary ile harcadığım zamanın en üstte olmasını diliyorum. Hem .xls hem de .xlsx için çalışan bir çözüm bulmaya çalışıyorum. npoi.codeplex.com. Ve Java sürümü de olsa, bulduğum en iyi belgeler poi.apache.org - SurfingSanta
NPOI, Codeplex'ten Github. - jerhewet


Ve Microsoft Office için Açık XML SDK 2.0'ı kullanmanın yolu nedir?

Birkaç faydası:

  • Office'in yüklü olması gerekmez
  • Microsoft tarafından yapılmıştır = iyi MSDN belgeleri
  • Projede kullanmak için sadece bir Net.
  • SDK, diff, validator, vb. Gibi birçok araçla gelir.

Bağlantılar:


141



Bu DLL dosyasının 5 MB'ın üzerinde olduğunu ve Office 2007 formatlarıyla sınırlı olduğunu unutmamak gerekir. Ama kesinlikle benim için çalışan en kolay ve hızlı çözüm. - Josh Brown
Sadece bir kafa v2.5 çıktı ve indirilebilir İşte. - Snuffleupagus
SDK, XML'i sınıflara dönüştürür, böylece her bir XML etiketi bir etikete eşlenir ve daha sonra sınıf hiyerarşisini (her bir örnekte bir alt örnek / etiket koleksiyonu) doğru şekilde oluşturmanız gerekir. Bu, çok karmaşık olan bir Excel dosyasının XML yapısını bilmeniz gerektiği anlamına gelir. Yukarıda belirtilen EPPlus gibi bir ambalajı kullanmanız daha kolay bir işlemdir. - Tsahi Asher
Microsoft Açık XML SDK - Açık XML Writer'in harika bir örneğini şu adreste bulabilirsiniz: polymathprogrammer.com/2012/08/06/...  Veya yığın taşması çözümüne bakın stackoverflow.com/questions/11370672/... - Greg
Microsoft Açık XML SDK'nın Açık XML Yazıcısı'nı harika buldum. Yukarıdaki çözümleri kullanarak, (Özellikle de Vincent Tom'un örneği (Poly Math)), büyük veri kümeleriyle akan bir yazarı oluşturmak kolaydır ve kayıtları sizin için yaptıklarınızla çok daha karmaşık bir şekilde değil, benzer şekilde yazar. CSV; ama bunun yerine xml yazıyorsun. Açık XML, Microsoft'un yeni Office formatlarını göz önünde bulundurduğu zihniyettir. Ayrıca, XML içeriğinde arama yapmak istiyorsanız, bunları .xslx'den .zip dosyalarına her zaman yeniden adlandırabilirsiniz. - Greg


Excel dosyalarını oluşturmak ve değiştirmek için OLEDB'yi kullanabilirsiniz. Şuna göz at: OLEDB kullanarak Excel okuma ve yazma.

Tipik örnek:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

DÜZENLEME - Daha fazla bağlantı:


95



Birisi x64’te çalışırken işe yarar mı? Eminim Jet sadece uygulamanızın 32 bitlik bir modda derlenmesi veya çalıştırılması durumunda çalışır. - Lamar
Bu bağlantıyı yeni test ettim ve Windows Server 2008 R2 x64 RC'de başarısız oldu, 2007 Office Sistem Sürücüsünü yüklemek zorunda gibi görünüyor: Veri Bağlantı Bileşenleri [microsoft.com/downloads/... - Chris Richner
Bu konuda çok dikkatli olun - büyük çirkin bir klozudur (örneğin, bazen bir sütun türünü tahmin eder ve uymayan tüm verileri atar). - dbkk
Bu yöntem kullanılırsa çok dikkatli olunmalıdır. Mükemmel bir formatta olmayan veriler için çok çılgın buldum. - Kenny Mann
OleDb'yi büyük bir projede kullanmak zorunda kalan bir kişi olarak, BUNU UZDAN KALDIM! Bazen formatı anlayamadığı için bir hücre değeri almak mümkün değildir. Silme işlemi yok. En ufak bir sağlayıcı değişikliği ile bile tamamen farklı ve öngörülemeyen çalışır. Kanıtlanmış bir ticari çözüm için gitmek istiyorum. - Caner Öncü


Ticari çözüm, .NET için SpreadsheetGear yapacağım.

Canlı ASP.NET (C # ve VB) örneklerini görebilirsiniz. İşte ve bir değerlendirme sürümünü indir İşte.

Feragatname: SpreadsheetGear LLC'nin sahibiyim


73



Harika bir ürününüz var ama bence birçok insan ücretsiz çözümler bekliyor. Bu oyları açıklayabilir. - md1337


Kullandığım birkaç seçenek:

XLSX bir zorunluluk ise: ExcelPackage iyi bir başlangıç ​​ama geliştirici üzerinde çalışmayı bıraktığında öldü. ExML oradan aldı ve birkaç özellik ekledi. ExML Kötü bir seçenek değil, hala birkaç üretim web sitesinde kullanıyorum.

Yine de tüm yeni projelerim için kullanıyorum NPOI, .NET bağlantı noktası Apache POI. NPOI 2.0 (Alfa) ayrıca XLSX'i destekler.


56



XLS'yi desteklemeniz gerekiyorsa ExcelPackage'a dikkat edin. Onunla çok uğraştım ve sonunda ExcelLibrary'a geçtim. - Jeremy
Kesinlikle doğru. XLSX desteğine ihtiyacınız varsa ExcelPackage / ExML yalnızca iyi bir seçenektir. - Nate
ExcelPackage'ın bir halefi olduğunu unutmayın: EPPlus (epplus.codeplex.com) XLSX'i destekler. Örneğin NPOI ile karşılaştırıldığında tek endişem performanstır, örn. Çok fazla sütun olduğunda. - Pragmateek


Son derece hafif bir seçenek, HTML tablolarını kullanmak olabilir. Bir dosyada kafa, gövde ve tablo etiketleri oluşturun ve bir .xls uzantılı bir dosya olarak kaydedin. Formüller dahil olmak üzere çıktıyı stillemek için kullanabileceğiniz Microsoft'a özgü özellikler vardır.

Bunu bir web uygulamasında kodlayamayabileceğinizi anlıyorum, ama burada bir örnek Bir HTML dosyası ile bir Excel dosyasının bileşimi. Bir konsol uygulaması, masaüstü uygulaması veya hizmeti kodlarken bu teknik kullanılabilir.


54



Bu çok ad hoc ama çalışır (açılışta bir uyarı veren excel söz değil) ve çok basit, bir çözüm olarak bir yere sahip olmayı hak ediyor. Her ne kadar sadece bir excel dosyasını dışa aktarabileceğinizi göstermek için :)) - Luka Ramishvili
Bu çözüm benim için iyi çalıştı, sadece .xlsx uzantısını kullanamadığınızı unutmayın - Jill
Kuruluşumdaki bazı kişiler, Office 2010 ve sonraki sürümlerde bu şekilde yapılan excel dosyalarını açamıyor. Sorunun ne olduğunu bilmiyorum, ama kendi OpenXML uygulamamı yapmak zorunda kaldım. (Sogger'ın cevabı bakın) - Kristen Hammack