Makale Özeti

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.

Makale

ASP.NET İLE XSLT KULLANARAK EXCEL RAPORLAMA

 

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.

 

<xsl:template match="/">

    <html>

    <body>

<table width="100%" border="0">

 

                <tr>

                               <xsl:if test="(position() mod 2 = 1)">

                               <xsl:attribute name="bgcolor">#6699ff</xsl:attribute>

                               </xsl:if>

                                               <td><b>Ad1</b></td>

                                               <td><b>Ad2</b></td>

                                               <td><b>Soyad</b></td>

                                               <td><b>TCKimlikNo</b></td>

                                               <td><b>Doğum Tarihi</b></td>

                </tr>

                               <xsl:for-each select="NewDataSet/Table">

                <tr>

                               <xsl:if test="(position() mod 2 = 1)">

                               <xsl:attribute name="bgcolor">#ccffff</xsl:attribute>

                               </xsl:if>

                                               <td align="left"><xsl:value-of select="Ad1"/></td>

                                               <td align="left"><xsl:value-of select="Ad2"/></td>

                                               <td align="left"><xsl:value-of select="Soyad"/></td>

                                               <td align="left"><xsl:value-of select="TCKimlikNo"/></td>

                                               <td align="left"><xsl:value-of select="DogumTarihi"/></td>

                </tr>

                                               </xsl:for-each>

</table>

    </body>

    </html>

</xsl:template>

 

Artık raporumuz hazır projemizi build ettikten sonra çalıştırıp button'u tıkladıktan sonra raporu görebilirsiniz.Raporumuzun görüntüsü aşağıdaki gibi olmalıdır :

 

/Makaleler/Resimler/1000001414_rapor_Goruntu.JPG

 

Örnek Proje