2008-08-18 22 views
5

Excel çalışma kitaplarına .Net'den erişmem gerekiyor. Bunu yapmanın farklı yolları hakkında her şeyi biliyorum (bunları bir blog post'da yazdım) ve yerel bir .NET bileşeni kullanmanın en hızlı olacağını biliyorum. Ama soru şu ki, bileşenlerden hangisi kazanır? Onları kıyaslayan var mı? Syncfusion XlsIO kullanıyorum, ancak bu bazı önemli işlemler için çok yavaştır (binlerce Adlandırılmış aralığı içeren bir çalışma kitabındaki satırları silmek gibi)..Net Excel IO bileşen ölçütlerine sahip olan var mı?

cevap

5

Uygun bir değerlendirme yapmamıştım, ancak diğer bazı bileşenleri denedim ve SpreadsheetGear'un daha önce kullandığım XlsIO'dan çok daha hızlı olduğunu buldum. Bulgularımın bir kısmını bu post

1

Orijinal sorunuzda size yardımcı olamıyoruz, ancak bir OleDbConnection kullanarak Excel dosyalarına erişebildiğinizden ve bu nedenle bir veritabanı olarak ele alabileceğinizi biliyor musunuz? Daha sonra, çalışma sayfalarını bir DataTable'a aktarabilir, uygulamanızdaki verilere ihtiyacınız olan tüm değişiklikleri gerçekleştirebilir ve ardından bir OleDbConnection kullanarak dosyayı yeniden kaydedebilirsiniz.

+0

Paul, teşekkürler. Bunun farkındaydım (belki de blog mesajıma eklemeliyim). Ancak bu durumda, gerçekten ihtiyacım olan veriler değil. Hücre stili ve biçimlendirme, vb. Gibi şeyler Sam –

0

'da yazdım Evet ama onları hem Syncfusion'a (hem de benchmarkları yayınlamamanızı rica ediyorum) nezaketle yayınlamayacağım çünkü deneyimli değilim Bu yüzden testlerim muhtemelen bir şekilde kusurludur, ancak çoğunlukla, gerçekten kıyaslama yaptığınız şey, kimin kazanacağı ve ne kadar büyük bir fark yarattığıdır.

"Performans" örneklerinden birini aldım ve bunları karşılaştırmak için EPPlus'ta aynı rutini ekledim. XLSIO, satır/sütun oranına bağlı olarak sadece basit eklentilerle yaklaşık% 15 daha hızlıydı (birkaçını denedim), bellek kullanımı çok benzer görünüyordu. Tüm satırlar eklendikten sonra, her 10 satırdan sonra silinir ve daha sonra yeni bir satır 2 satır eklenir, bu durumda XLSIO önemli ölçüde daha yavaş bir rutin ekledim.

Genel bir ölçüt sizin için işe yaramaz. Kullandığınız belirli senaryolarda birbirinize karşı denemeniz gerekir.

EPPlus'ı birkaç yıldır kullanıyordum ve performans gayet iyi, bağırmayı hatırlamıyorum.

Sizin için daha değerli olan, işlevsellik, destek (Syncfusion, deneyimlerimde iyi olmuştur), Belgelendirme, kaynak koduna erişim, önemliyse ve - önemli olarak - API'nin size ne kadar anlamlı geldiğini, sözdizimi oldukça farklı olabilir. Örneğin. Adlandırılan Stiller

XLSIO

headerStyle.BeginUpdate(); 
workbook.SetPaletteColor(8, System.Drawing.Color.FromArgb(255, 174, 33)); 
headerStyle.Color = System.Drawing.Color.FromArgb(255, 174, 33); 
headerStyle.Font.Bold = true; 
headerStyle.Borders[ExcelBordersIndex.EdgeLeft] .LineStyle = ExcelLineStyle.Thin; 
headerStyle.Borders[ExcelBordersIndex.EdgeRight] .LineStyle = ExcelLineStyle.Thin; 
headerStyle.Borders[ExcelBordersIndex.EdgeTop] .LineStyle = ExcelLineStyle.Thin; 
headerStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; 
headerStyle.EndUpdate(); 

EPPlus

ExcelNamedStyleXml headerStyle = xlPackage.Workbook.Styles.CreateNamedStyle("HeaderStyle"); 
headerStyle.Style.Fill.PatternType = ExcelFillStyle.Solid; // <== needed or BackgroundColor throws an exception 
headerStyle.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 174, 33)); 
headerStyle.Style.Font.Bold = true; 
headerStyle.Style.Border.Left.Style = ExcelBorderStyle.Thin; 
headerStyle.Style.Border.Right.Style = ExcelBorderStyle.Thin; 
headerStyle.Style.Border.Top.Style = ExcelBorderStyle.Thin; 
headerStyle.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;