Bir süre önce büyük boyutlu bir excel dosyasındaki verileri veritabanına eklemem gerekti. İnternette araştırma yaptığımda bir çok makale gördüm ama hepsi nedense çok karışık anlatımlı. Veriyi çekerken çıldırdım resmen. Class’ı verip anlatımında insanı çıldırtmak için elinden geleni yapanlar var.(Sıkıyorsa anla der gibi) Class’ı indirmek için buraya tıklayın.
Karşılaşabileceğiniz Sorunlar;
Sorun: Büyük dosyalarda “max_execution_time” hatası
Çözüm : 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ı.
Sorun: Dosya büyüklüğüyle alakalı olan “max memory usage” hatası
Çö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.
Kullanımına gelirsek;
<?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.
?>