Raporlama amacıyla yaptığımız ASP.Net web sayfalarında EXCEL’e veri aktarma ile ilgili çok genel bir yöntem vardır. Bu yöntem Response tipini Excel’e çevirmekten geçer. Konuyla ilgili örneği bu adreste inceleyebilirsiniz. Ancak bu yöntemle ürettiğimiz EXCEL belgeleri standart biçime sahiptir. EXCEL belgesi üzerinde biçimlendirme yapmak için XSLT kullanabiliriz.
Örneğimizde kullanmak için bir veritabanı yaratmakla işe başlıyoruz.
CREATE DATABASE Test
go
CREATE TABLE [tbl_Uye]
(
[UyeId] [int] IDENTITY(1,1) NOT NULL,
[Ad1] [nvarchar](50) NULL,
[Ad2] [nvarchar](50) NULL,
[Soyad] [nvarchar](100) NULL,
[TCKimlikNo] [int] NULL,
[DogumTarihi] [smalldatetime] NULL
)
go
Şimdi tbl_Uye tablomuzun içine bir kaç kayıt ekleyelim.
database
Artık raporlamayı yapacağımız kod kısmına geçebiliriz.Visual Studio 2005’te File > New > WebSite diyerek istediğimiz isimde bir proje oluşturuyoruz ve Solution explorer penceremizden projemizin üstünde sağ tuş yaparak add new item diyoruz açılan pencerede raporla adında bir webform oluşturuyoruz ve design sayfamıza toolboxımızdan bir adet button sürüklüyoruz.Buttonumuzun idsini btn Raporla yaptıktan sonra buttonumuza çift tıklayarak kodumuzu yazmaya balşıyoruz.İlk olarak sayfada kullanacağımız namespace’lerimizi yazıyoruz :
Imports System.Data.SqlClient
Imports System.IO
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Data
Imports System.Xml.Xsl.XslCompiledTransform
Şimdi gerekli veriyi depolayacağımız datasetimize verileri aktarabilmek için gerekli kodlamayı yapıyoruz :
'Datasetimizi tanıtıyoruz.
Dim DS As New DataSet
'Veri kaynağımız ile datasetimiz arasında bağlantı kurabilmek için dataadapter ımızı tanıtıyoruz.
Dim DA As SqlDataAdapter = New SqlDataAdapter
'Veri kaynağımıza bağlanmak için connection ımızı tanıtıyoruz.
Dim CNN As SqlConnection = New SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=.")
'sql komutları kullanacağımızı belirtiyoruz.
Dim CMD As SqlCommand = New SqlCommand
'veritabanı bağlantımızı açıyoruz.
CNN.Open()
'connection ımızı çağırıyoruz.
CMD.Connection = CNN
'komut türümüzün text olduğunu belirtiyoruz.
'Eğer procedure kullanacaksak commandtype.storedprocedure yazarak parametrelerimizi ve değerlerini vermemiz gerekir.
CMD.CommandType = CommandType.Text
'Komutumuzu yazıyor ve tbl_Uye tablosundan istediğimiz verileri çekiyoruz.
CMD.CommandText = "Select Ad1,Ad2,Soyad,TCKimlikNo, convert(varchar,DogumTarihi,103) as DogumTarihi from tbl_Uye order by UyeId"
'dataadapter ımıza komutumuzu adapte ediyoruz.
DA.SelectCommand = CMD
'
DA.Fill(DS)
Dataset’imize veriyi doldurduk.Xml dökümanımıza datasource olarak data setimizi veriyoruz.
'Datasetimizi xml dökümanımız için kaynak olarak gösteriyoruz.
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(DS)
'vesilerimizi xsl imize taşıyabilmek için gerekli
Dim xslTran As XslCompiledTransform = New XslCompiledTransform
'xml dökümanımızın server daki yolunu gösteriyoruz.
xslTran.Load(Context.Server.MapPath("Raporla.xsl"))
'xml dökümanımızı taşıyoruz.
xslTran.Transform(xmlDoc, Nothing, Context.Response.OutputStream)
'raporumuzun excel formatında döneceğini belirtiyoruz.
Context.Response.ContentType = "application/vnd.ms-excel"
'Dönüşüm formatımızın 8 bitlik bir unicode olduğunu belirtiyoruz.
Context.Response.Charset = "utf-8"
Context.Response.End()
Raporla.aspx sayfamızdaki işlemimizi tamamladık sırada bir xsl sayfası oluşturarak raporda görmek istediğimiz formatı ayarlamak kalıyor.Şimdi solution explorer ımızda sağ tuş yaparak add new item diyoruz ve açılan pencerede xslt file’ı seçiyoruz,adını raporla vererek add buttonuna basıyoruz.Artık xsl uzantılı sayfamız hazır.Solution explorer’da raporla.xsl sayfamızı çift tıklayarak içine giriyoruz ve body tag’ları arasına aşağıdaki gibi bir kodlama yapıyoruz.Ben renkleri istediğim gibi verdim siz zevkinize göre değiştirebilirsiniz.
Ad1
Ad2
Soyad
TCKimlikNo
Doğum Tarihi
