Konular

EBooklar

Genelde, herhangi bir biçimlendirme söz konusu olmadığında, veritabanındaki bir bilgiyi ya da başka bir tabloyu excel ortamına aktarmak için csv yöntemini kullanırım. Bu yöntem herkesin bildiği gibi, her sütunu tab ya da noktalı virgül gibi bir karakterle ve her satırı da enter karakteri ile bölmekten ibaret. Ama biçimlendirme söz konusu olduğunda, mesela sütunlara bir genişlik vermek, yazıları bold yapmak, bazı hücreleri sayı ya da para tipine çevirmek gibi biçimlendirmelerde bu yöntem işe yaramamakta.

PHP ile Excel Dosyası OluşturmakBu yüzden Excel'in anlayacağı tarzda dosya üreten basit bir sınıf yazmam gerekti. Aşağıda verdiğim koddaki sınıfı kullanarak Xml Spreadsheet dosyaları oluşturabilirsiniz. Bu sayede Excel'in anlayacağı tarzda biçimli tablolara sahip olacaksınız.

Aşağıdaki kodu, kendinize göre düzenleyebilirsiniz. GetHeader metodunda değişiklikler yaparak daha fazla sitil ve özellik ekleyebilirsiniz. Ya da yapmak istediğiniz sitil ve biçimleri ilk başta Excel ile yapıp, Xml SpreadSheet olarak kaydettikten sonra, GetHeader metodunu yaptığınız bu dosyaya göre düzenleyebilirsiniz. Örnek kullanım, sınıf kodlarının altındadır.

  

<?php

/**
 * ExcelWriter 1.0
 *
 * Programmed by Fatih Tolga Ata
 * fatih at diyezon dot com
 * 13.01.2007
 */




Class ExcelWriter

{   
    var $output = "";
    var $state;
    var $ColumnWidths = array();
    var $Rows = "";
    var $DefaultWidth = 65;

    function ExcelWriter($author, $sheettitle)

    {

        $this->state = "BEGIN";

        $this->output .= $this->GetHeader($author, $sheettitle);

    }

    function Generate()

    {

        if ($this->state != "END")

        {

            $this->output .= $this->GetColumnWidths();

            $this->output .= $this->Rows;

            $this->output .= $this->GetFooter();

            $this->state = "END";

        }

        return $this->output;            

    }

                                   
    function GetHeader($author, $sheettitle)

    {

        $date = date("d-m-Y");

        $time = date("H:i:s");

        return chr(0xEF).chr(0xBB).chr(0xBF).<<<EOH

<?xml version="1.0"?>

<?mso-application progid="Excel.Sheet"?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"

 xmlns:o="urn:schemas-microsoft-com:office:office"

 xmlns:x="urn:schemas-microsoft-com:office:excel"

 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"

 xmlns:html="http://www.w3.org/TR/REC-html40">

 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">

  <Author>$author</Author>

  <LastAuthor>$author</LastAuthor>

  <Created>{$date}T{$time}Z</Created>

  <Version>12.00</Version>

 </DocumentProperties>

 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">

  <WindowHeight>11985</WindowHeight>

  <WindowWidth>19095</WindowWidth>

  <WindowTopX>120</WindowTopX>

  <WindowTopY>45</WindowTopY>

  <ProtectStructure>False</ProtectStructure>

  <ProtectWindows>False</ProtectWindows>

 </ExcelWorkbook>

 <Styles>

  <Style ss:ID="Default" ss:Name="Normal">

   <Alignment ss:Vertical="Bottom"/>

   <Borders/>

   <Font ss:FontName="Arial" x:CharSet="162" x:Family="Swiss" ss:Size="11"

    ss:Color="#000000"/>

   <Interior/>

   <NumberFormat/>

   <Protection/>

  </Style>

  <Style ss:ID="s62">

   <NumberFormat ss:Format="Fixed"/>

  </Style>

  <Style ss:ID="s63">

   <NumberFormat ss:Format="#,##0.00 "YTL""/>

  </Style>

  <Style ss:ID="s64">

   <Font ss:FontName="Arial" x:CharSet="162" x:Family="Swiss" ss:Size="11"

    ss:Color="#000000" ss:Bold="1"/>

  </Style>

 </Styles>

 <Worksheet ss:Name="$sheettitle">

  <Table ss:DefaultColumnWidth="$this->DefaultWidth" ss:DefaultRowHeight="15">



EOH;

    }

    function GetFooter()

    {

        return <<<EOH

  </Table>        

  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">

   <PageSetup>

    <Header x:Margin="0.3"/>

    <Footer x:Margin="0.3"/>

    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>

   </PageSetup>

   <Print>

    <ValidPrinterInfo/>

    <HorizontalResolution>600</HorizontalResolution>

    <VerticalResolution>600</VerticalResolution>

   </Print>

   <Selected/>

   <Panes>

    <Pane>

     <Number>3</Number>

     <ActiveCol>3</ActiveCol>

    </Pane>

   </Panes>

   <ProtectObjects>False</ProtectObjects>

   <ProtectScenarios>False</ProtectScenarios>

  </WorksheetOptions>

 </Worksheet>

</Workbook>

EOH;

    }

    function GetColumnWidths()

    {

        foreach($this->ColumnWidths as $width)

        {

            if ($width == 0)

                $width = $this->DefaultWidth;

            $str .= "   <Column ss:AutoFitWidth="1" ss:Width="$width"/>n";

        }

        return $str;

    }

    function AddRow($data_arr, $type_arr)

    {

        $this->state = "PROCESS";

        $this->Rows .= "   <Row>n";

        for ($i=0; $i <count($data_arr); $i++)

        {

            $type = "String";

            $style = "";

            switch($type_arr[$i])

            {

                case "num":

                    $style = " ss:StyleID="s62"";

                    $type = "Number";

                    break;

                case "cur":

                    $style = " ss:StyleID="s63"";

                    $type = "Number";

                    break;

                case "bold":

                    $style = " ss:StyleID="s64"";

            }

            $this->Rows .= "    <Cell$style>";

            $this->Rows .= "<Data ss:Type="$type">".$data_arr[$i]."</Data>";

            $this->Rows .= "</Cell>n";

        }

        $this->Rows .= "   </Row>n";          

    }

}

?> 

Bu da örnek kullanım:

 

<?

//Bu header fonksiyonları dosyayı download ettirebilmek içindir

header("Pragma: no-cache");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Cache-Control: private", false);

header("Content-Type: application/octet-stream");

header("Content-Disposition: attachment; filename="exceldosyasi.xml"");

header("Content-Transfer-Encoding: binary");

/////////////////////////////////////////////////////



    //sınıfı oluşturalım

    $writer = new ExcelWriter("Yazar ismi","Sheet adı");

    //sütun genişliklerini belirleyelim.

    $writer->ColumnWidths = array(165,0,50,0); //Sıfırın manası varsayılan değerdir.

    $veriler = array("deneme",15,20,"Bold yazı");

    $tipler = array("", "num", "cur", "bold"); //""=> String, "num"=>Sayı, "cur"=>Para, "bold"=>Bold String

    $writer->AddRow($veriler, $tipler);

    $excel = $writer->Generate();

    header("Content-Length: ".strlen($excel)."");

    echo $excel;

?>

 


Yorumunuzu Ekleyin


Yorumlar

  1. Mahir
    Selamlar güzel bir konu ama kullanamadım. Örnek olarak açıklayabilirmisiniz.
    09 Ocak 2010 13:47:26, Cumartesi Like



  • Kurallı İfadeler (regex Engine)
  • Kurallı İfadeler (regex Engine) ~ 29,783

    Bir regex'in gerçekte nasıl çalıştığını bilmek daha efektif çalışan regex ifadeleri oluşturmamızı ve regex'leri daha isabetli oluşturmamızı sağlar. Bu yazımızda oluşturduğunuz regex ifadelerinin neden beklediğiniz sonuçları vermediğini ve umduğunuz eşleşm...




  • PHP ile PDF dosya oluşturmak
  • PHP ile PDF dosya oluşturmak ~ 23,572

    Php ile yeni bir pdf dosyası oluşturmak : Öncelikle php ile pdf işlemleri yapmak için bir pdf kütüphanesine ihtiyacınız olacak


  • PHP nedir?
  • PHP nedir? ~ 22,007

    HTML kodlarının arasına yerleştirilmiş php kodlarından ayrıştırıp işleyerek sonuçta saf HTML formatında bir çıktı üretmek ve Web sunucusuna iletmektir.


  • $_FILES
  • $_FILES ~ 20,893

    Örnek kod ve açıklamalar



  • Oop - Nesne Yönelimli Programlama
  • Oop - Nesne Yönelimli Programlama ~ 18,269

    Artık ister istemez her programcının bulaştığı bu teknik hakkında sayısız makale yazılmıştır bu güne kadar. Bu makale de onlardan biri


  • Xampp Kurulumu ~ 17,344

    Xampp apache, mysql, php ve phpmyadmin için kolay ve basit kurulum sağlayan bir uygulamadır.




  • Verileri doğrulamak için PHP ile filtreleme işlemleri
  • Verileri doğrulamak için PHP ile filtreleme işlemleri ~ 16,337

    Ziyaretçilerden gelen verilerin istediğimiz formata uygunluğunu kontrol etmeliyiz ki, güvenlik açığı yaratmayalım. E-postaları, web adreslerini, bilgi girişlerini ve dahasını Her birine uygun farklı fonksiyonlar yazıldı bu vakte kadar. Ancak PHP 5.2.0 ve ...


  • En iyi 25 php template motoru
  • En iyi 25 php template motoru ~ 15,814

    Php tabanlı web siteleri dizayn ederken, php kodlarını html kodlar arasına gömeriz. Fakat gün gelir bu kodları düzenlemek istediğimizde çok büyük bir çaba gerektirir. Bu tarz durumlarla başa çıkabilmek için ve daha kararlı bir sistem kodlamak için t...



  • Php Mysql to XML
  • Php Mysql to XML ~ 15,531

    Bu yapıyı geliştirerek mysql veritabanınızdaki datalarınızı xml standartlarına dönüştürebilirsiniz.


  • Dizi Tanımlamaları
  • Dizi Tanımlamaları ~ 15,299

    PHP’de array tanımlayıcısını kullanarak içerisinde elemanları yerleştirmek yoluyla ya da index numarasını köşeli parantezler içerisinde belirterek atama yaparak dizi oluşturmak mümkündür



  • Php ile Oturum Yönetimi (SESSION)
  • Php ile Oturum Yönetimi (SESSION) ~ 15,011

    Türkçesi oturum anlamına gelen session bilgilerin saklanması için kullanılan mantıksal bir nesnedir.Session oturum yönetimini kullanarak şifreli sayfalar oluşturarak ve bu sayfaları belirlediğiniz kullanıcıların görmesini sağlayabilirsiniz.


  • $_SERVER
  • $_SERVER ~ 14,791

    $_SERVER host bilgileri, header bilgileri, yollar ve script yolları gibi bilgileri içeren bir dizidir. Bu dizideki değerler web server tarafından üretilir. Tüm server yazılımlarının, tüm değerleri atayacağına dair bir kesinlik yoktur. Yazılım bazıl...