Excel Rendering Extension (Reportviewer excel export problem)
Merhaba,
Visual Studio 2010 da reportviewer kontrolünü kullanırken bildiğimiz üzere kontrol’ün kendine ait bir export sekmesi bulunmaktadır. Buradan excel, word ya da pdf formatında çıktı alabilmekteyiz. Ancak sekmeyi kullanarak excel çıktı almak istediğimizde bize xls formatında çıktı vermekte ve limit lere takılmaktayız. (Max 65536 satır, 255 kolon gibi) Hata kodunun yazılı hali : Excel rendering extension : number of columns exceeds the maximum possible columns per sheet in this format;…
Şimdi size bu sekmeyi kullanmadan kendi export methodumuzu yazmayı anlatacağım.
Öncelikle http://www.microsoft.com/en-us/download/details.aspx?id=35747 ReportViewer 2012 runtime dosyasını indirip çalıştırıyoruz. Bu dosya içerisinde ihtiyacımız olan dll ler bulunmaktadır. Kurulumun tamamlanması ile iş bitmiyor. Bizim bu dosyayı referans olarak projemize eklememiz gerekmektedir. Zira ne yaparsak yapalım VS 2010 bu dosyayı otomatik algılamıyor kendi üzerindeki ile devam ediyor. Dolayısı ile projemizi açıp References kısmında Microsoft.ReportViewer.Winforms referansını bulup silelim. Çünkü bu referans ekli iken aynı isimde farklı bir referans ekleyemeyiz.
Ardından Add Reference diyelim. Browse sekmesine basalım ve şu pathe gidelim.
C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Winforms\ 11.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.WinForms.DLL (Sondan bir önceki sekmenin tam adı değişebilir. Siz 11 olanını seçin 10 zaten projemizde ekli olupta bizim sildiğimiz)
Evet artık projemize RW winforms 11. Versiyonunuda ekledik.
reportViewer1.LocalReport.ListRenderingExtensions(); Methodunu kullanarak hangi formatlarda çıktı alabileceğimizi görüntüleyebiliriz. Basit bir foreachla dönelim hemen.
1 2 3 4 5 6 7 |
string isim = ""; Microsoft.Reporting.WinForms.RenderingExtension[] test = reportViewer1.LocalReport.ListRenderingExtensions(); foreach (var a in test) { isim += a.Name + " "; } MessageBox.Show(isim); |
Buradaki “EXCELOPENXML” bizim ihtiyacımız olan değer.
Artık xlsx formatında çıktı alabilecek duruma geldiğimize göre başlayalım methodumuzu yazmaya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
private void xlsxKaydet() { String mimetype; String encoding; String filename_extension; String[] streamids; Microsoft.Reporting.WinForms.Warning[] warnings; Microsoft.Reporting.WinForms.LocalReport objRDLC = new Microsoft.Reporting.WinForms.LocalReport(); objRDLC.DataSources.Clear(); byte[] byteViewer = reportViewer1.LocalReport.Render("EXCELOPENXML", null, out mimetype, out encoding, out filename_extension, out streamids, out warnings); SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "*xlsx files (*.xlsx)|*.xlsx"; saveFileDialog1.FilterIndex = 2; saveFileDialog1.RestoreDirectory = true; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { FileStream newFile = new FileStream(saveFileDialog1.FileName, FileMode.Create); newFile.Write(byteViewer, 0, byteViewer.Length); newFile.Close(); } } |
Bu kodu kullanarak xlsx formatında çıktı alabilir böylece satır ve kolon limitlerine takılmazsınız.
Bir sonraki yazımda görüşmek üzere,
İyi Çalışmalar Dilerim,
Cevapla
Want to join the discussion?Feel free to contribute!