Php ile Excel’e Aktar Fonksiyonu (Export Excel with Php)

27
Bu sayfa 2.804 kez görüntülendi.

php-ile-excele-aktar-fonksiyonu-export-excel-with-php

01. Açıklama

Aşağıdaki fonksiyon yardımı ile herhangi bir html tabloyu Excel dosyası olarak çıktı alabileceksiniz. Üstelik Türkçe karakter problemi de yaşamayacaksınız. Hemen kodları veriyorum.

02. exportExcel() Fonksiyonu

function exportExcel($filename='ExportExcel',$columns=array(),$data=array(),$replaceDotCol=array()){
    header('Content-Encoding: UTF-8');
    header('Content-Type: text/plain; charset=utf-8'); 
    header("Content-disposition: attachment; filename=".$filename.".xls");
    echo "\xEF\xBB\xBF"; // UTF-8 BOM
     
    $say=count($columns);
     
    echo '<table border="1"><tr>';
    foreach($columns as $v){
        echo '<th style="background-color:#FFA500">'.trim($v).'</th>';
    }
    echo '</tr>';
 
    foreach($data as $val){
        echo '<tr>';
        for($i=0; $i < $say; $i++){
 
            if(in_array($i,$replaceDotCol)){
                echo '<td>'.str_replace('.',',',$val[$i]).'</td>';
            }else{
                echo '<td>'.$val[$i].'</td>';
            }
        }
        echo '</tr>';
    }
}

03. Örnek Kullanım

/* TANIMLAMALAR */

$columns=array();

$data=array();

/*
 $replaceDotCol
 Decimal kolonlardaki noktayı (.) virgüle (,) dönüştürüelecek kolon numarası belirtilmelidir.
 Örneğin; Kolon 4'ün verilerinde nokta değilde virgül görülmesini istiyorsanız
 ilgili kolonun array key numarasını belirtmelisiniz. İlk kolonun key numarası 0'dır.
*/
$replaceDotCol=array(3); 


/* Sütun Başlıkları */
$columns=array(
    'Kolon 1',
    'Kolon 2',
    'Kolon 3',
    'Kolon 4 Decimal'
);


/* Satır Verileri */
$data[]=array(
    'Satır 1 Kolon 1 Verisi',
    'Satır 1 Kolon 2 Verisi',
    'Satır 1 Kolon 3 Verisi',
    17.45
);

$data[]=array(
    'Satır 2 Kolon 1 Verisi',
    'Satır 2 Kolon 2 Verisi',
    'Satır 2 Kolon 3 Verisi',
    35.10
);

$data[]=array(
    'Satır 3 Kolon 1 Verisi',
    'Satır 3 Kolon 2 Verisi',
    'Satır 3 Kolon 3 Verisi',
    40.01
);

exportExcel('DosyaAdi',$columns,$data,$replaceDotCol);

04. Çıktı

php-ile-excele-aktar-fonksiyonu-export-excel-with-php-cikti

05. Php Dosyasını İndir

Dosyayı İndir

06. Güncelleme (30.04.2017)

MSO Formatları Listesi

Stil Kodu ve Değeri Açıklama
mso-number-format:”0″ Ondalıklı rakamları gizler
mso-number-format:”0\.000″ Noktadan sonra 3 rakamı gösterir
mso-number-format:”\#\,\#\#0\.000″ Binlik ayrıcı ile noktadan sonra 3 rakamı gösterir
mso-number-format:”mm\/dd\/yy” Tarih formatı (ay/gün/yıl)
mso-number-format:”mmmm\ d\,\ yyyy” Başka bir tarih formatı
mso-number-format:”m\/d\/yy\ h\:mm\ AM\/PM” Tarih formatı
mso-number-format:”Short Date” 01/03/1998
mso-number-format:”Medium Date” 01-mar-98
mso-number-format:”d\-mmm\-yyyy” 01-mar-1998
mso-number-format:”Short Time” 5:16
mso-number-format:”Medium Time” 5:16 am
mso-number-format:”Long Time” 5:16:21:00
mso-number-format:”Percent” Yüzde gösterir (2 ondalık rakamlı)
mso-number-format:”0%” Yüzde gösterir (ondalığı göstermez)
mso-number-format:”0\.E+00″ Bilimsel gösterim
mso-number-format:”\@” Herşeyi yazı yapar
mso-number-format:”\#\ ???\/???” Kesirler (3 basamağa kadar) (312/943)
mso-number-format:”\0022£\0022\#\,\#\#0\.00″ Para birimi gösterimi (£12.76)
mso-number-format:”\#\,\#\#0\.00_ \;\[Red\]\-\#\,\#\#0\.00\” 2 ondalık ve negatif sayılar kırmızı renkli (1.56 -1.56)

Bu sayfa 2.804 kez görüntülendi.

27 YORUMLAR

    • Merhaba Taner Hocam,

      Fonksiyon içerisindeki aşağıdaki satırları silip veya yorum satırı yapıp, çıktıyı paylaşabilir misiniz?
      Bu sayede hatanın kaynağını bulabiliriz.

      header(“Content-disposition: attachment; filename=”.$filename.”.xls”);
      echo “\xEF\xBB\xBF”; // UTF-8 BOM

      • PhpExcel Classını tavsiye etmem çünkü while veya foreach döngülerini bu classa uydurmak bir hayli zor ve zahmetli. Hatta birçok kişi bunu yapamadığı için PhpExcel classından vazgeçmiştir. Ancak Xlsx formatında veri aktarımı da sadece PhpExcel türü classlar ile yapılabilmektedir. Buradaki aktarım şekli sadece xls 2003 formatında hatta table-td düzeninde düz kodlama olarak yansıtılmaktadır. Bunu anlamak için indireceğeiniz xls formatındaki dosyanın kaynak kodunu notepad içerisinde görebilirsiniz. Ancak 2007 xlsx formatındaki bir dosyanın içeriğini bu şekilde okuyamazsınız. Kısacası yukarıda bahsi geçen konu ile php dosyalarınızı excele aktarılması tavsiye edilmez. İlerleyen yıllarda bu size güncellik ve xls desteği/dilkodu formatlama vs. açısından sorun çıkaracaktır.

  1. $data[]=array(
    ‘Satır 3 Kolon 1 Verisi’,
    ‘Satır 3 Kolon 2 Verisi’,
    ‘Satır 3 Kolon 3 Verisi’,
    40.01
    );

    içinde while ile veri çekerek nasıl kullanabilirim? Teşekkürler

    • Merhaba Kutsi,
      Aşağıdaki kodlar işini görecektir.

      $data=array();
      $sql=mysql_query("SELECT * FROM uyeler");
      while($row=mysql_fetch_row($sql)){
          $data[]=$row;
      }
      
      // While döngüsü ile $data arrayına değerleri ekledik.
      • Yardım için teşekkürler. SQL sorgumu sizin kodunuza eklemeden test ettim sorun yok ekrana basıyor ancak sizin kodu, verdiğiniz şekilde modifiye edince gelmesi gereken data (Kolon Başlıkları) ve diğer hiçbir şey gelmiyor. Bir yerde break oluyor anladığım kadarıyla. Zira altında bıraktığım sabit verileri de göstermiyor XLS dosyası içinde.. Çözüm öneriniz varsa mutlu olurum…

  2. $docroot = $_SERVER[‘DOCUMENT_ROOT’];

    $dbfile=$docroot.”/admin/_include/mysql-conf.php”;
    include($dbfile);

    //Connect to Database
    connecttodb();

    function exportExcel($filename=’ExportExcel’,$columns=array(),$data=array(),$replaceDotCol=array()){
    header(‘Content-Encoding: UTF-8’);
    header(‘Content-Type: text/plain; charset=utf-8′);
    header(“Content-disposition: attachment; filename=”.$filename.”.xls”);
    echo “\xEF\xBB\xBF”; // UTF-8 BOM

    $say=count($columns);

    echo ”;
    foreach($columns as $v){
    echo ”.trim($v).”;
    }
    echo ”;

    foreach($data as $val){
    echo ”;
    for($i=0; $i < $say; $i++){

    if(in_array($i,$replaceDotCol)){
    echo '’.str_replace(‘.’,’,’,$val[$i]).”;
    }else{
    echo ”.$val[$i].”;
    }
    }
    echo ”;
    }
    }

    /* TANIMLAMALAR */

    $columns=array();

    $data=array();

    /*
    $replaceDotCol
    Decimal kolonlardaki noktayı (.) virgüle (,) dönüştürüelecek kolon numarası belirtilmelidir.
    Örneğin; Kolon 4’ün verilerinde nokta değilde virgül görülmesini istiyorsanız
    ilgili kolonun array key numarasını belirtmelisiniz. İlk kolonun key numarası 0’dır.
    */
    $replaceDotCol=array(3);

    /* Sütun Başlıkları */
    $data[]=array();
    $sql=mysql_query(“SELECT subeadi FROM bayiler”);
    while(list($bayim)=mysql_fetch_row($sql)){

    $data[]=$bayim;

    }

    /* Satır Verileri */
    $data[]=array(
    ‘Satır 1 Kolon 1 Verisi’,
    ‘Satır 1 Kolon 2 Verisi’,
    ‘Satır 1 Kolon 3 Verisi’,
    17.45
    );

    $data[]=array(
    ‘Satır 2 Kolon 1 Verisi’,
    ‘Satır 2 Kolon 2 Verisi’,
    ‘Satır 2 Kolon 3 Verisi’,
    35.10
    );

    $data[]=array(
    ‘Satır 3 Kolon 1 Verisi’,
    ‘Satır 3 Kolon 2 Verisi’,
    ‘Satır 3 Kolon 3 Verisi’,
    40.01
    );

    exportExcel(‘DosyaAdi’,$columns,$data,$replaceDotCol);

    ?>

  3. merabalar kalite performans yönetim sistemi projesi yazdım.ilgili sayfalara tıklanınca performans bilgilerini excel ile almak istiyorum nasıl yapacağımı anlamadım yardımcı olur musunuz? Kolay gelsin

  4. Merhaba, bir sorun yaşadım da çözümü konusunda yardım isteyecektim. Veritabanında veri çekerek excel çıktısı aldığımda sayfada ne varsa hepsini excel’e aktarmaya çalıştı yani menü vs. ne varsa. Bunu önlemenin bir yolu var mı acaba?

  5. bu cok kalıtelı olmus ama ben elle duzenlemelerı yaparım yeterkı kayıt edecek halde bana xls versın dersenız
    asp de kullandıgım bır sıstemı php de gordum daha yenı basladıgım ıcın php scrıptıne oturtamam ama kodu vereyım mantık aynı bu dırek php sayfanızı xls formatına donusturur
    dıkatt edılmesı gerken kısım dıv degıl bıdlıgınız standart tablo ıle yapın ozaman her tablo bır hucre mantıgında verır

    kod :
    header(“Content-type: application/vnd.ms-excel; name=’excel'”);
    header(“Content-Disposition: attachment; filename=exportfile.xls”);
    header(“Pragma: no-cache”);
    header(“Expires: 0”);

    deneyın yapan yapılmıs halını yayınlasın ısteyen arkadaslar dırek burdan ulassın

  6. iyi günler ben php ile değilde js ile yapıyorum excel export işlemni mevcut table lımı basıyorum sıkıntı yok ama ben customize etmek istiyorum header ve footer eklemek istiyorum nasıl yapabilirim

    • Selam Hamit,
      Hocam HTML olarak bastığımız için sadece mso-*-* ile başlayan formatları kullanabiliyoruz. Numara formatı, text formatı gibi… Html data sayfayı yan çevirmeye daha önce denk gelmedim. Muhtemelen böyle bir özelliği yoktur diye düşünüyorum. Kolay gelsin.

  7. iyi geceler, verdiğiniz mysql sorgusunuda kullanarak veriyi başarılı şekilde excel aktardı, fakat son kaydı almıyor. yani bir satır eksik aktarıyor excel e yaprdımcı olurmusunuz… teşekkürler

CEVAP VER

Please enter your comment!
Please enter your name here

Yorum onaylama sistemi etkin; yorumunuzun yayınlanması biraz zaman alabilir.