PHP: Microsoft Excell Dosya Okuma Sınıfı (class.oleread.php)

PHP dili farklı formatlı dosya ve veri türlerine işleyebilmektedir. Bu yazıda Microsft Excel dosyasının içeriğini okuyan Oleread PHP sınıfını inceleyeceğiz.

PHP Excel

Görseldeki gibi demo.xls dosyasında yazılan verileri PHP ile okuyacağız.

Uygulama için örnek bir index.php dosyası yazalım.


<?php
require_once 'Excel/reader.php';

$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('demo.xls');

$satir=$data->sheets[0]['numRows']; //satir sayisi
$sutun=$data->sheets[0]['numCols'];//sutun sayisi

echo "<b>Satır sayısı: ".$satir;

echo "<br>Sütun sayısı: ".$sutun ."</b>";
?>
<table border="1" width="100%" align="left">
<?php
for ($i = 1; $i <= $satir; $i++) {
?>
<tr>
<?php
for ($j = 1; $j <= $sutun; $j++) {
?>
<td><?=$data->sheets[0]['cells'][$i][$j]?></td>
<?php
}
?>
</tr>
<?php
}
?>
</table>

Uygulamanın çalışır demosunu incelemek için tıklayınız.

Uygulama dosyalarını zip şeklinde indirmek için tıklayınız.

13 thoughts on “PHP: Microsoft Excell Dosya Okuma Sınıfı (class.oleread.php)

  • şimdilik biyerde kullanmayabilirsin muhammed, elbet bi işin düşer, bu yolla farklı bir uygulama yapman gerekebilir.

  • malesef hata verdi neden olabilir?

    Deprecated: Assigning the return value of new by reference is deprecated in C:\wamp\www\excel\Excel\reader.php on line 504

  • Merhaba,
    Cok sekmeli ve bi hayli veri girilmis 1 excel dosyasi var. Php ile dosyanin tarihini ve ekrana girilen bilgisi bu dosya icerisinde aratmak istiyorum..
    Acaba yardimci olabilirmisiniz?
    tesekkurler

  • Normal stirng (Metinsel) ifadelerde sorun yok ancak excell de tarih saat oalrak tanımlı alanın değerini mesela saati farklı yazıyo 1 saat fazla gibi buna bakabilrmisiniz rica etsem !

  • excel deki tarih saat alanlarında farklı değerler veriyor. yukarıdada bahsedildiği gibi 1 saat fazla oluyor tarih.buna çözüm nedir

  • Peki bu uygulamayı kullanarak belirli bir satırdan başlatabilir miyiz aksi taktirde çok uzun sürüyor işlem mesela 3000. satırdan başlamasını istiyorum. Yardımcı olursanız sevinirim.

  • onu denedim fakat işlem yine sonuç vermiyo sanırım saydırma işlemini de yaptığı için. Elimde 5000 satıra yakın bi excel dosyası var ve dosyayı excelde açamıyorum haliyle bu yönteme başvurdum içerisindeki bilgileri acil görmem lazım. Oleread PHP sınıfına dışarıdan müdahaleyle satır saydırma işlemini belirli bi satırdan başlatma imkanımız var mı?

  • merhabalar,
    aynı olmamakla beraber aşağıdaki kodlar çalışmaktadır. iki sorunun çözümü hakkında yardımcı olursanız sevinirim
    soru 1:
    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
    require_once ‘Excel/reader.php’;
    //yeni excel dosyamız
    $data = new Spreadsheet_Excel_Reader();
    //çıkış karakter kodu. Yani Türkçe karakterler için ayar yaptık
    setOutputEncoding(‘ISO-8859-9′);
    $kaynak1 = $_FILES[“dosya”][“tmp_name”]; //yüklenen dosyanın dı
    $klasor1 = “excelorderstat/”; // alınan excel dosyasının kopyalanacağı hedef yerimiz
    $yukle1 = $klasor1.basename($_FILES[‘dosya’][‘name’]);
    $yukle2 = basename($_FILES[‘dosya’][‘name’]); // dosyanın adını attığımız değişken
    if(move_uploaded_file($kaynak1, $yukle1))
    {
    echo “Dosya “. basename($_FILES[‘dosya’][‘name’]). ” Başarıyla yüklendi…”;
    }
    else
    {
    echo “Dosya Yükleme İşlemi Başarısız… “;
    }
    $data->read(‘excelorderstat/’.$yukle2);
    for($i = 2; $i sheets[0][‘numRows’]; $i++) { //i=2 demek excelin ikinci satırından başlanacakdemektir.
    $SO_NO = $data->sheets[0][‘cells’][$i][1]; //1.sütundaki satırı oKur
    $MUS_NO = $data->sheets[0][‘cells’][$i][2]; //2. sütundaki satırı okur
    $MUS_AD = $data->sheets[0][‘cells’][$i][3];
    $ITEM_NO = $data->sheets[0][‘cells’][$i][4];
    $URUN_ADI = $data->sheets[0][‘cells’][$i][5];
    $SAT_ADEDI = $data->sheets[0][‘cells’][$i][6];
    $TOPLAM_TUTAR = $data->sheets[0][‘cells’][$i][7];
    $SIP_SEK = $data->sheets[0][‘cells’][$i][8];
    $SIP_TAR = $data->sheets[0][‘cells’][$i][9];
    $FAT_TAR = $data->sheets[0][‘cells’][$i][10];
    $MUS_REF = $data->sheets[0][‘cells’][$i][11];
    $SAT_KOD = $data->sheets[0][‘cells’][$i][12];
    $SIP_TAR1 = date(‘Y-m-d’) ;
    $FAT_TAR1 = date(‘Y-m-d’) ;
    $yeni1 = “INSERT INTO orderstatm
    ( SO_NO, MUS_NO, MUS_AD, ITEM_NO, URUN_ADI, SAT_ADEDI, TOPLAM_TUTAR, SIP_SEK, SIP_TAR, FAT_TAR, MUS_REF, SAT_KOD ) values
    (‘$SO_NO’, ‘$MUS_NO’, ‘$MUS_AD’,’$ITEM_NO’,’$URUN_ADI’, ‘$SAT_ADEDI’, ‘$TOPLAM_TUTAR’, ‘$SIP_SEK’, ‘$SIP_TAR1′, ‘$FAT_TAR1′, ‘$MUS_REF’, ‘$SAT_KOD’ )”;
    $SQL = mysql_query($yeni1) ;
    }
    echo “yükleme işlemi başarı ile gerçekleşti.”;

  • Merhaba Kodlar çok güzel ve anlaşılır olmuş (benim gibi hiç bir şey bilmeyen biri için çok açıklayıcı bence )

    ama benim bir sorum olacak kodlar üzerinde oynama yaparak kendime uyarladım
    ama şekilde olduğu gibi çektiğimde
    $urunid = $data->sheets[0][‘cells’][$i][1]; //1.sütundaki satırı oKur
    $urunadı = $data->sheets[0][‘cells’][$i][2]; //2. sütundaki satırı okur
    $urunacıklama = $data->sheets[0][‘cells’][$i][3];

    3 sütünda benim excelimde html kodları bulunmakta ” ”

    bu satırdaki html kodlarını kaldırıp sadece içinde yazan veriyi almakta
    benim ihtiyacım olan hücrenin hiç değişmeden alınması
    yardımcı olursanız sevinirim

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir