C# Razor – Dinamik Excel Oluşturma

By | February 9, 2012

Aşağıdaki örnekte “view” dosyamıza gönderilen model içerisindeki veriler ile dinamik olarak excel oluşturma, kaydetmeden kullanıcıya gönderme ele alınmıştır.

Bu işlemin birden fazla yolu olduğu gibi benim bu yolu tercih etmemin ana sebebi, sunucu tarafında fiziksel olarak bir excel dosyası oluşturup göndermenin bant genişliğini ve sunucuyu daha fazla kullanmasından kaynaklanmaktadır.

Dosyayı fiziksel olarak yaratmadan xml şeklinde kullanıcıya göndermek, daha az işlem gücü ve kaynak kullanımı ile yapılabilmektedir.

örnekte C# .Net framework 4 ve mvc 3 yapısı kullanılmıştır.

ExportToExcel.cshtml adını verdiğim View Dosyası

@model acenta.com.Models.TurHesaplasma

@{
   
    Layout = null;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-Disposition", "attachment; filename=hesaplasma.xls");


}

<?xml version="1.0" encoding="utf-16"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
    <Styles>
        <Style ss:ID="s25">
                <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
                <Borders>
                    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
                </Borders>
                <Interior ss:Color="#FFA500" ss:Pattern="Solid"/>
            </Style>
    </Styles>

    <ss:Worksheet ss:Name="Sheet1">
        <ss:Table>
           
            <ss:Row>
                <ss:Cell><ss:Data ss:Type="String">Tur Adı</ss:Data></ss:Cell>
                <ss:Cell><ss:Data ss:Type="String">@Model.TerminDetay.Tour.name</ss:Data></ss:Cell>
                <ss:Cell></ss:Cell>
                <ss:Cell><ss:Data ss:Type="Number">25</ss:Data></ss:Cell>
            </ss:Row>

            <ss:Row>
                <ss:Cell ss:Formula="=SUM(R[+2]C:R[+52]C)"></Cell>
                <ss:Cell></ss:Cell>
                <ss:Cell></ss:Cell>
                <ss:Cell ss:Formula="=SUM(R[+2]C:R[+52]C)"></Cell>
                <ss:Cell></ss:Cell>
                <ss:Cell></ss:Cell>
                <ss:Cell ss:Formula="=SUM(R[+2]C:R[+52]C)"></Cell>
            </ss:Row>

        </ss:Table>
    </ss:Worksheet>
</ss:Workbook>

Yukarıdaki örnekte mevcut kullanımın tamamına ait kodları paylaşamayacağım için “string”, “numeric” ve “formula” veri tiplerinin kullanımını örnek olarak ekledim.

SUM fonksiyonu excel’in türkçe versiyonunda TOPLA olarak geçmesine rağmen, xml dosyamızı “xls” uzantılı olarak bu formatta gönderdiğimizde fonksiyon otomatik olarak “TOPLA” fonksiyonu işlevi kazanıyor.

“SUM(R[+2]C:R[+52]C)” bu formülde “Row +2 ve Column” yani formulün bulunduğu satırdan iki satır aşağı inerek başla ve sütun aynı kalsın, “Row +52 ve Column” yani 52 satır aşağı ve sütun aynı kalacak şekilde 50 satırlık hücreyi topla.

SUM(RC[+2]:RC[+4]) şeklinde yapsaydık satır aynı kalacaktı, yana doğru iki sütundaki paralel hücreleri toplayacaktı.

Xml tipinde excel üretmenin dezavantajı şu satır ve şu sütuna git ve şunları yaz şeklinde komut kullanmaya imkan tanımaması, eğer bunları yapmak istiyorsanız excel’e çıkartma işlemi için internette çeşitli framework’ler mevcut. (örn: www.codeproject.com/KB/cs/WriteDataToExcel.aspx)

Aynı çalışmanın farklı bir örneği için : http://stackoverflow.com/questions/7417198/export-to-excel-file-in-mvc3-asp-net

Leave a Reply

Your email address will not be published. Required fields are marked *