Php ile geliştirdiğiniz projelerde; müşterilerinizden, var olan verilerinin excel ile gönderilerek, sisteme işlenmesi yönündeki bir taleple karşılaşmışsınızdır. Bu makalede; bu işlemin php ile kolay, hızlı ve veri kaybı olmadan nasıl yapabileceğimizi anlatmaya çalışacağım. İşlemi, PhpExcel kütüphanesini kullanarak yapacağız. Kütüphaneyi bu adresten indirebilirsiniz. İşlemi gerçekleştirirken dikkat edilmesi gereken birkaç nokta var. Bunları da anlattıktan sonra örnek kodu vereceğim. Bunlardan en önemlisi dosya büyüklüğü. Dosya ne kadar büyük olursa işlem o kadar uzun sürüyor. Bu nedenle büyük dosyalarda “max_execution_time” hatası alabilirsiniz. Eğer kullandığınız sunucu kendinize ait ise “max_execution_time” değerini arttırabilirsiniz, ancak paylaşımlı hosting kullanıyorsanız, dosyayı parçalayarak işlemeniz daha mantıklı. Karşılaşabileceğiniz diğer sorun da dosya büyüklüğüyle ilgili olan “max memory usage” hatası. Diğer hatada olduğu gibi burada da çözüm kullandığınız sunucu/hosting türüne göre değeri arttırmak ya da dosyayı parçalayarak işlemek. Bu gibi hatalarla karşılaşma durumuna karşı, kod içerisine bir sayaç yerleştirerek, işlem sonunda değerleri karşılaştırmanız, veri kaybının önüne geçmek için önemli. Karşılaştığım son sorun ise, başlık satırı. Dosya işlenirken başlık satırı da okunuyor ve diğer veriler gibi işlenebiliyor. O nedenle bu satıra da dikkat etmekte yarar var. Aşağıda örnek kodu paylaşıyorum. Bir hata ile karşılaşırsanız lütfen bildiriniz. Yorumlarınızı esirgemeyiniz lütfen.
Veri Okuma
<?php error_reporting(E_ALL);//tüm hata gösterimleri açılıyor. set_time_limit(0);//max_execution_time değeri olabilecek en üst değere getirliyor include 'Classes/PHPExcel/IOFactory.php';//kullandığımız kütüphane $inputFileName = 'dosya.xls';//işlenecek dosya $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); $excel_satirlar = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);//excel dosyasındaki aktif sekme kullanılıyor $i=0;//sayac foreach($excel_satirlar as $excel_satir){ $i++; //veriler değişkene alınıyor $veri_1 = $excel_satir['A']; $veri_2 = $excel_satir['B']; $veri_3 = $excel_satir['C']; $veri_4 = $excel_satir['D']; $veri_5 = $excel_satir['E']; //bu kısımdan sonra verileri nasıl işlemek istiyorsanız ona göre kodları yazmamış gerekiyor. örneğin veri tabanına kaydetmek. } } echo $i;//satır sayısını kontrol için en son kaç satırın işlendiğini sayaçtan ekrana basıyoruz. ?>Not : Her ihtimale karşı okunan verileri sql injection‘a karşı süzmekte yarar var.
Php ile Excel Dosyası Oluşturma için ilgili makaleyi inceleyebilirsiniz.
Çok teşekkürler Güzel Paylaşım
Merhabalar,
Sizin kodlarınıza yakın olarak aşağıdaki kodlar ile aktarım yapmaktayım.
soru 1:
Aşağıda belirttiğim kodlar çalışmaktadır. Fakat Dosya 14 sütun 31000 satır olunca açıp okuyamıyor, nefesi yetmiyor, ancak 2300 satırda okumayı ve aktarmayı yapıyor, Öyleki aktaracağım dosya büyüklüğü 100.000 satırları bulacağı için bu aktarımda işlemi yapamadım.
sorun 2:
Sayfaları okutmak istedim fakat sadece ilk sayfayı okuyor, diğer sayfaları okutamadım,
$excel->sheets[SAYFA][‘cells’][SATIR][SUTUN]; buraya sayfa numarası yazdım olmadı, sayfa adını yazdım olmadı,
büyük dosyaları nasıl aktaracağız, çünkü aktarım web sayfasından form üzerinden olması gerektiği için, csv, sql, aktarım programı navitac gibi onları kullanamıyorum. bir fikir bir yol gösterirseniz sevinirim, teşekkürler
Birinci sorunuzun cevabını makale içerisinde vermiştim. Onun için makaleyi tekrar okumanınızı rica ediyorum 🙂
İkinci sorunuz için ise;
kodu ile excel sekmelerini değiştirebilirsiniz.
Yorumunuz için teşekkürler 🙂
Türkçe karakerler bozuk geliyor, nasıl bir çözüm önerirsiniz?
Tamam sayfayı UTF-8 yapınca türkçe karakterler düzeldi, teşekkürler 🙂
Merhabalar $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); satırı çalışmıyor ve bağlantı sıfırlandı hatası veriyor. sorun ne olabilir acaba…
Kütüphane kodlarının ve okunan excel dosyasının dizinlerinin doğru olduğundan emin misin? Eğer localhost’ta çalışıyorsan bir de sunucuda denemeni tavsiye ederim.
hocam peki veritabanından çekilen verileri nasıl yazdıracağız birde diyelim bir dosya oluşturduk devamlı aynı doayanın üzerine yazabilirmiyiz
Php ile Excel Dosyası Oluşturma makalesinden nasıl yazdırılacağına bakabilirsiniz. Aynı dosyanın üzerine yazabilirsiniz. Ancak o işlemde eski dosya silinip, yeni dosya oluşturuluyor. Hata ile aynı dosyanın üzerine yazarsanız, excel dosyasındaki eski verilerinizi kaybedersiniz yani.
Merhabalar,
Anlatım ve cevaplar çok sade ve anlaşılır, çok teşekküler
Bende bir sorun çıktı.
Ben dosyaları servera koydum, düzenleme yaptım, ilgili dosyaları bir dosya altına koydum. Fakat bu sefer de
Excel dosyayı aktaramıyorum. Dosyalarımı 01_stok_dosya altına koydum. Serverda da …/httpdocs/01_stok_dosya
altında durmaktadır. $klasor1 = “excelorderstat/”; bu kodu belirtiğim kod $klasor1 = “httpdocs/01_stok_dosya/excelorderstat/”; olarak değiştiriyorum fakat excel dosyasını bir türlü atmıyor. Bir sürü yol versiyonunu denedim olmadı. Başka bir yer de mi değişiklik yapmak gerekli?
teşekkürler
Yorumunuz için teşekkürler 🙂
Sorunu tam anlamamakla birlikte tahmin üzerinden yardımcı olmaya çalışayım. Dosyayı okuyan php ile excel farklı klasörlerde sanırım. Bu gibi durumlarda önce bir üst dizine çıkmak, sonra dizin adını yazmak gerekiyor. Yani sizin php kodunuz folder_1 -in içinde, excel dosyanız da folder_1 ile aynı dizinde olup, folder_2 olsun. Bu durumda php-den dizin belirtirken “../folder_2/excel.xls” şeklinde belirtmeniz gerekiyor. Yani “../” ile üst dizinlere çıkıp, sonra dosyanın yolunu belirtmelisiz.
Eğer tahminim yanlış ise lütfen dönüş yapınız.
kullandıgım excel dosyasının ilk satırları başlıklar. 1. satırı atlayıp diğer satırdan okumaya başlamasını nasıl sağlayabiliriz?
$i=0;//sayac değişkenini kontrol edecek bir if döngüsü koyarak 1. satırı pas geçebilirsiniz.
Çok teşekkürler elimdeki alan listesini sayende mysql e aktarabildim.