-- Dersler

PHP ile MySQL verilerini Excele Aktarma

MySQL de tuttuğumuz bilgileri bazen Excele aktarmamız gerekebiliyor. Php ile bunu yapmak oldukça basit. Fakat kodlamaya başlamadan önce gidiş haritamızı çizelim. MySQL verilerini aktarırken oluşacak Türkçe karakter sorunlarını çözelim.

  1. Veritabanı bağlantısı oluştur.
  2. Dosya adını belirle.
  3. Hangi tabloyu bastıracağımız belirt.
  4. Döngüye  alarak satırları ve sütunları doldur.
  5. Satır ve sütunlarda oluşacak Türkçe Karakter sıkıntılarını çöz.
  6. Dosyayı serverımıza kaydet.
  7. Yazdırdığımız dosyayı indir.

MySQL veritabanımızı Excele aktarırken öncelikle 2 sayfa oluşturacağız ve bunlar olustur.php ile indir.php adında olacaklar. Ardından aşağıdaki kodları kullanabiliriz.

>> olustur.php

 
<?
// Veritabanı Bağlantısı
$host="alperenozlu.com";
$db="alperenozludatabaseadi";
$user="alperenozlu_kullaniciadi";
$pass="alperenozlu_sifree";
$conn=@mysql_connect($host,$user,$pass) or die("Mysql Baglanamadi");
mysql_select_db($db,$conn) or die("Veritabanina Baglanilamadi");
mysql_set_charset('utf8',$conn);
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci' ");
if(isset($_POST["excelolustur"])){ // FORM SONUC
$dosya = "olusturalacakdosya.xls"; // EXCEL TABLOSU ADI
$yaz = @fopen($dosya,'w+'); 
$tablo_adi = "tabloadi"; // Tablo Adi
$tablo_sorgu = mysql_query("select * from $tabloadi");

fwrite($yaz,"Adt Soyadt Bolumt Emailt Telefont n");
// Bu kod aşağıdaki şemayı çıkarmaktadır.
// A  | B  |   C   |  D  |   E   
// -----------------------------
// ID | Ad | Soyad | Yaş | Email
// -----------------------------

while ($tablo_sonuc = mysql_fetch_row($tablo_sorgu)) {
// Türkçe karakterini çözmek için;
// mb_convert_encoding($tablo_sonuc[sayi], "iso-8859-9", "UTF-8"); kullanılır.
$sutun0 = $tablo_sonuc[0]; // Id olduğu için karakter düzeltmedik. 
$sutun1 = mb_convert_encoding($tablo_sonuc[1], "iso-8859-9", "UTF-8");
$sutun2 = mb_convert_encoding($tablo_sonuc[2], "iso-8859-9", "UTF-8");
$sutun3 = $tablo_sonuc[3]; // Yaş olduğu için karakter düzeltmedik. 
$sutun4 = $tablo_sonuc[4]; // E-posta olduğu için karakter düzeltmedik. 

fwrite($yaz,"$sutun0t $sutun1t $sutun2t $sutun3t $sutun4tn"); 

//Gelen verileri satırlara yazdırdık.
}

mysql_free_result($tablo_sorgu); 
fclose($yaz);
echo "İşlem Tamamlandı"; 
exit;
}
?>
<FORM ACTION="?page=olustur" method="post">
<INPUT TYPE="submit" value="Verileri Aktar" name="excelolustur"> 
</FORM>

İndirme sayfası için ise şöyle bir kod yazabiliriz. ( Bazı excel sürümlerinde otomatik indirmeyebilir, eğer bir hata olursa yorum kısmına yazınız)

>> indir.php

<?php
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="indirelecekdosyaaadi.xls"'); // <-- düzenleyin
header ('Content-Transfer-Encoding: binary');
header('Cache-Control: max-age=0');
$dosyayolu = "uploads/excel.xls"; // <-- düzenleyin
readfile($dosyayolu);

?>

Ardından indir.php’yi çalıştırarak, excel dosyanızı indirebilirsiniz.

Yorum Yap

Yorum

This site uses Akismet to reduce spam. Learn how your comment data is processed.

18 Yorum

  1. hocam gayet iyi çalışıyor fakat adres gibi uzun olan satırlar tabloyu bozuyor bunun için ne yapmak gerekiyor acaba

    • Gelen verinin uzunluğunu kontrol ettirip ona göre işlem yaptırabilirsiniz. Veri uzunluğu kaç karakterden sonra sıkıntı yaşamaya başlıyor ?

      • tam uzunluğuna bakmadım ama adresi tam oloarak cadde sokak mahalle ve şehir ilçe ülke olarak yazılıyor bunun yokmudur bir otomatik sığdır şekli

  2. Bir şey daha soracağım yukarıda

    fwrite($yaz,” Başlık1 t Başlık2 t Başlık3 t Başlık4 t Başlık5 tn”);

    ile yazdırdığımız sütün başlıklarını 53 tane var onların hepsini çevirmenin kısayolu yok mu bu arada elle girdim onları veritabanından gerekli değildiler.

  3. Hocam benim sormak istediğim iki konu var.
    Ben aşağıda ki kodlarla MSQL den odbc ile verileri bağlanıp çekip yazdırıyorum sizin anlattığınız yöntemle.

    1- Çekip explorerda bastığım zaman taploda türkçe karekter sorunu yaşamazken Excele sizin yöntemle yapınca türkçe karekterler soru işareti olarak çıktı Nasıl Çözerim.

    2- Bu excele yazdırdığım zaman ilgili excel sütunun genişliğini ve yazdırdığım zaman verinin punto değerini ve rengini nasıl ayarlarım.

    Şimdiden çok teşekkür ederim.
    Saygılarımla.

    PHP

  4. hocam bır turlu sonuc alamadım
    verıtabanıyla beraber sıkıstırıp eklemenız mukun mu
    bır turlu calıstıramadım sızın ornegı kendıme gore uyarlamama ramen

    • Volkan selamlar,
      Yazıyı yazalı çok zaman geçti, doğal olarak dosya mevcut değil 🙂 .
      Belki buraya aldığın hatayı yazabilir / ekran görüntüsü olarak ekleyebilirsin. Ona göre ilerleyebiliriz.

  5. Merhaba , benzer satırları aktarmaması için ne yapmamalıyız.

    Bir de kategori tablosuna bağlı bir sütun için aynı anda veriler içe aktarıldığında kategori tablosuna da yazdırmak istiyorum. Ne yapmam gerekir.