XLS MySQL PHP kullanıyor?

5 Cevap php

nasıl PHP kullanarak bir mySQL tablodan. XLS belge oluşturabilir?

Ben hiçbir başarı ile, hemen hemen her şeyi denedim.

Temelde, form verilerini almak gerekir ve ben yaptım, ve sonra o tablo verileri almak ve web sunucusu üzerine otomatik olarak kaydedilmesi gereken bir microsoft excel dosyası ayrıştırmak için gereken bir veritabanı içine girdi onu.

    <?php

// DB TABLE Exporter
//
// How to use:
//
// Place this file in a safe place, edit the info just below here
// browse to the file, enjoy!

// CHANGE THIS STUFF FOR WHAT YOU NEED TO DO

     $dbhost  = "-";
     $dbuser  = "-";
     $dbpass  = "-";
     $dbname  = "-";
     $dbtable = "-";

// END CHANGING STUFF

$cdate = date("Y-m-d"); // get current date


// first thing that we are going to do is make some functions for writing out
// and excel file. These functions do some hex writing and to be honest I got 
// them from some where else but hey it works so I am not going to question it 
// just reuse


// This one makes the beginning of the xls file
function xlsBOF() {
    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
    return;
}

// This one makes the end of the xls file
function xlsEOF() {
    echo pack("ss", 0x0A, 0x00);
    return;
}

// this will write text in the cell you specify
function xlsWriteLabel($Row, $Col, $Value ) {
    $L = strlen($Value);
    echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
    echo $Value;
    return;
}



// make the connection an DB query
$dbc = mysql_connect( $dbhost , $dbuser , $dbpass ) or die( mysql_error() );
mysql_select_db( $dbname );
$q = "SELECT * FROM ".$dbtable." WHERE date ='$cdate'";
$qr = mysql_query( $q ) or die( mysql_error() );

// start the file
xlsBOF();

// these will be used for keeping things in order.
$col = 0;
$row = 0;

// This tells us that we are on the first row
$first = true;

while( $qrow = mysql_fetch_assoc( $qr ) )
{
    // Ok we are on the first row
    // lets make some headers of sorts
    if( $first )
    {
        foreach( $qrow as $k => $v )
        {
            // take the key and make label
            // make it uppper case and replace _ with ' '
            xlsWriteLabel( $row, $col, strtoupper( ereg_replace( "_" , " " , $k ) ) );
            $col++;
        }

        // prepare for the first real data row
        $col = 0;
        $row++;
        $first = false;
    }

    // go through the data
    foreach( $qrow as $k => $v )
    {
        // write it out
        xlsWriteLabel( $row, $col, $v );
        $col++;
    }
    // reset col and goto next row
    $col = 0;
    $row++;
}

xlsEOF();
exit();
?>

Ben sadece ben bunu nasıl yapıyor hakkında gitmek istiyorum, bir. Xls dosyasına oluşturulan veri yazmak için bütün bu içine fwrite nasıl entegre anlamaya gibi olamaz?

I need to get this working quite urgently, so any help would be greatly appreciated. Thanx guys.

5 Cevap

Eğer (phpMyAdmin veya SQLyog gibi) veritabanı için ön uç çeşit varsa CSV tablo (ya da herhangi bir SELECT sorgusu sonucu) ihracat ve Excel bu açabilirsiniz.

EDIT after comments: I created an XLS once. It was a bit different, but what I did was put this at the top of my PHP (before any output was generated):

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"name.xls\"");

And in the rest of the script I just echoed out a table (table, tr, td... etc) The execution of this script would give the user a download. I think there are some different options for the Content-disposition attribute (maybe there is one that lets the script save the file).

Benim projelerde PEAR Spreadsheet_Excel_Writer çok kullandım ve iyi çalışıyor. Ama Excel 5.0 düzeyindeki dosyaları, üretir, bu nedenle bu daha gelişmiş anyhing gerekiyorsa bu amaçlar için yeterli değil olabilir, ama bir yerli. Xls üretecek, ve sadece bir. Csv. Xls gibi davrandığından değil.

Ben doğru alırsanız attılar komut doğru çalışan ve doğru bir xls dosyası oluşturur ve http://php.net/manual/en/book.outcontrol.php bakmak, sadece çıkış kaydetmek istiyorum edilir. Ob_get_clean ile (), size oluşturduğunuz xls dosyası almak ve bir yerde sunucuya yazabilirsiniz.

Belki de, (muhtemelen o da bazı html / xml tablo okuyabilirsiniz. Csv,) aynı zamanda Excel okuyabileceği bir formata veri kaydetme gibi diğer seçenekleri düşünebiliriz.

I) (ob_get_clean ile denedim, ancak işe yaramadı, burada şimdi üzerinde çalıştığım kodu:

<?php

// DB TABLE Exporter
//
// How to use:
//
// Place this file in a safe place, edit the info just below here
// browse to the file, enjoy!

// CHANGE THIS STUFF FOR WHAT YOU NEED TO DO

     $dbhost  = "-";
     $dbuser  = "-";
     $dbpass  = "-";
     $dbname  = "-";
     $dbtable = "-";

// END CHANGING STUFF

$cdate = date("Y-m-d"); // get current date


// first thing that we are going to do is make some functions for writing out
// and excel file. These functions do some hex writing and to be honest I got 
// them from some where else but hey it works so I am not going to question it 
// just reuse


// This one makes the beginning of the xls file
function xlsBOF() {
    $output = pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
    return;
}

// This one makes the end of the xls file
function xlsEOF() {
    $output .= pack("ss", 0x0A, 0x00);
    return;
}

// this will write text in the cell you specify
function xlsWriteLabel($Row, $Col, $Value ) {
    $L = strlen($Value);
    $output .= pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
    $file = fopen("exported.xls","w");
    fwrite($file, "$output");
    fclose($file);
    return;
}



// make the connection an DB query
$dbc = mysql_connect( $dbhost , $dbuser , $dbpass ) or die( mysql_error() );
mysql_select_db( $dbname );
$q = "SELECT * FROM ".$dbtable." WHERE date ='$cdate'";
$qr = mysql_query( $q ) or die( mysql_error() );


// Ok now we are going to send some headers so that this 
// thing that we are going make comes out of browser
// as an xls file.
// 
//header("Pragma: public");
//header("Expires: 0");
//header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
//header("Content-Type: application/force-download");
//header("Content-Type: application/octet-stream");
//header("Content-Type: application/download");

//this line is important its makes the file name
//header("Content-Disposition: attachment;filename=export_".$dbtable.".xls ");

//header("Content-Transfer-Encoding: binary ");

// start the file
xlsBOF();

// these will be used for keeping things in order.
$col = 0;
$row = 0;

// This tells us that we are on the first row
$first = true;

while( $qrow = mysql_fetch_assoc( $qr ) )
{
    // Ok we are on the first row
    // lets make some headers of sorts
    if( $first )
    {
        foreach( $qrow as $k => $v )
        {
            // take the key and make label
            // make it uppper case and replace _ with ' '
            xlsWriteLabel( $row, $col, strtoupper( ereg_replace( "_" , " " , $k ) ) );
            $col++;
        }

        // prepare for the first real data row
        $col = 0;
        $row++;
        $first = false;
    }

    // go through the data
    foreach( $qrow as $k => $v )
    {
        // write it out
        xlsWriteLabel( $row, $col, $v );
        $col++;
    }

    // reset col and goto next row
    $col = 0;
    $row++;

}

xlsEOF();
exit();



?>

Bu herhangi bir mantıklı olmadığını ben bile bilmiyorum, ama ben böyle işe yarayabilir, exported.xls dosyaya veri denemek ve yazmak için xlsBOF, xlsEOF ve xlsWriteLabel fonksiyonları içine fwrite eklendi?