mysql to xls script

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

mysql to xls script

Δημοσίευση από acerbitch » 29 Σεπ 2011 14:23

Καλησπέρα στην ομάδα! Εχώ ένα php script που εξάγει τα δεδομένα ένός πίνακα της DB μου σε ένα αρχείο xls με επιτυχία. Το πρόβλημα μου είναι ότι τοποθετεί όλες της στήλες της Βάσης σε μία μόνο στήλη στο xls. Οι γραμμές μπαίνουν σωστά.

Υπάρχει καμία ιδέα για το τι μπορεί να φταίει;!

Σας παραθέτω των κώδικα:

Κώδικας: Επιλογή όλων

<?php
  //
  // establish database connection
  //
  $conn = mysql_connect&#40; 'localhost', 'username', 'password' &#41; or die&#40; mysql_error&#40; &#41; &#41;;
  mysql_select_db&#40; 'database', $conn &#41; or die&#40; mysql_error&#40; $conn &#41; &#41;;
  //
  // execute sql query
  //
  $query = sprintf&#40; 'SELECT * FROM table' &#41;;
  $result = mysql_query&#40; $query, $conn &#41; or die&#40; mysql_error&#40; $conn &#41; &#41;;
  //
  // send response headers to the browser
  // following headers instruct the browser to treat the data as a csv file called export.csv
  //
  header&#40; 'Content-Type&#58; text/csv' &#41;;
  header&#40; 'Content-Disposition&#58; attachment;filename=export.csv' &#41;;
  //
  // output header row &#40;if atleast one row exists&#41;
  //
  $row = mysql_fetch_assoc&#40; $result &#41;;
  if &#40; $row &#41;
  &#123;
    echocsv&#40; array_keys&#40; $row &#41; &#41;;
  &#125;
  //
  // output data rows &#40;if atleast one row exists&#41;
  //
  while &#40; $row &#41;
  &#123;
    echocsv&#40; $row &#41;;
    $row = mysql_fetch_assoc&#40; $result &#41;;
  &#125;
  //
  // echocsv function
  //
  // echo the input array as csv data maintaining consistency with most CSV implementations
  // * uses double-quotes as enclosure when necessary
  // * uses double double-quotes to escape double-quotes 
  // * uses CRLF as a line separator
  //
  function echocsv&#40; $fields &#41;
  &#123;
    $separator = '';
    foreach &#40; $fields as $field &#41;
    &#123;
      if &#40; preg_match&#40; '/\\r|\\n|,|"/', $field &#41; &#41;
      &#123;
        $field = '"' . str_replace&#40; '"', '""', $field &#41; . '"';
      &#125;
      echo $separator . $field;
      $separator = ',';
    &#125;
    echo "\r\n";
  &#125;
?>
Thanks!

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

mysql to xls script

Δημοσίευση από mrpc » 29 Σεπ 2011 17:41

Μάλλον το πρόβλημα είναι η γραμμή $separator = ''; .
Βάλε κάτι άλλο εκεί, ανάλογα με το format που θέλεις να δημιουργήσεις. π.χ.:
$separator = ',';

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

mysql to xls script

Δημοσίευση από fafos » 29 Σεπ 2011 18:07

esy tou zhtas na ftiaxei csv... pos thes na dosei xls?

Κώδικας: Επιλογή όλων

<?php
  //
  // establish database connection
  //
  $conn = mysql_connect&#40; 'localhost', 'username', 'password' &#41; or die&#40; mysql_error&#40; &#41; &#41;;
  mysql_select_db&#40; 'database', $conn &#41; or die&#40; mysql_error&#40; $conn &#41; &#41;;
  //
  // execute sql query
  //
  $query = sprintf&#40; 'SELECT * FROM table' &#41;;
  $result = mysql_query&#40; $query, $conn &#41; or die&#40; mysql_error&#40; $conn &#41; &#41;; 
  
 $filename = "export.xls";//onoma arxeiou
 
 
// 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&#40;"Pragma&#58; public"&#41;;
header&#40;"Expires&#58; 0"&#41;;
header&#40;"Cache-Control&#58; must-revalidate, post-check=0, pre-check=0"&#41;;
header&#40;"Content-Type&#58; application/force-download"&#41;;
header&#40;"Content-Type&#58; application/octet-stream"&#41;;
header&#40;"Content-Type&#58; application/download"&#41;;

//this line is important its makes the file name
header&#40;"Content-Disposition&#58; attachment;filename=$filename"&#41;;

header&#40;"Content-Transfer-Encoding&#58; binary "&#41;;

    // This one makes the beginning of the xls file
    function xlsBOF&#40;&#41; &#123;
        echo pack&#40;"ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0&#41;;
        return;
    &#125;

    // This one makes the end of the xls file
    function xlsEOF&#40;&#41; &#123;
        echo pack&#40;"ss", 0x0A, 0x00&#41;;
        return;
    &#125;

    // this will write text in the cell you specify
    function xlsWriteLabel&#40;$Row, $Col, $Value &#41; &#123;
        $L = strlen&#40;$Value&#41;;
        echo pack&#40;"ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L&#41;;
        echo $Value;
        return;
    &#125;





    // start the file
    xlsBOF&#40;&#41;;

    // 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&#40; $qrow = mysql_fetch_assoc&#40;$result&#41; &#41;
    &#123;
        // Ok we are on the first row
        // lets make some headers of sorts
        if&#40; $first &#41;
        &#123;
            foreach&#40; $qrow as $k => $v &#41;
            &#123;
                // take the key and make label
                // make it uppper case and replace _ with ' '
                xlsWriteLabel&#40; $row, $col, strtoupper&#40; ereg_replace&#40; "_" , " " , $k &#41; &#41; &#41;;
                $col++;
            &#125;

            // prepare for the first real data row
            $col = 0;
            $row++;
            $first = false;
        &#125;

        // go through the data
        foreach&#40; $qrow as $k => $v &#41;
        &#123;

            // write it out
            xlsWriteLabel&#40; $row, $col, $v &#41;;
            $col++;
        &#125;

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

    &#125;

    xlsEOF&#40;&#41;;
    ?>
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

mysql to xls script

Δημοσίευση από acerbitch » 29 Σεπ 2011 18:30

Ευχαριστώ πολύ για τον χρόνο σας! Fafo δοκίμασα το script που μου έδωσες, υπάρχει πρόβλημα όμως, μου εμφανίζει τα αποτελέσματα στον browser και δεν μου δημιουργεί αρχείο xls.

Κοίταξα στον server και το log file έγραφε [29-Sep-2011 09:19:48] PHP Warning: Cannot modify header information - headers already sent by (output)...

any suggestions?

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

mysql to xls script

Δημοσίευση από mrpc » 29 Σεπ 2011 18:40

Ή έχεις κάποιο χαρακτήρα (ή κενό / κενή γραμμή) πριν την έναρξη του script, ή το αποθήκευσες με windows notepad σε utf8 και έπεσες θύμα του BOM.

acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

mysql to xls script

Δημοσίευση από acerbitch » 29 Σεπ 2011 18:44

acerbitch έγραψε:Ευχαριστώ πολύ για τον χρόνο σας! Fafo δοκίμασα το script που μου έδωσες, υπάρχει πρόβλημα όμως, μου εμφανίζει τα αποτελέσματα στον browser και δεν μου δημιουργεί αρχείο xls.

Κοίταξα στον server και το log file έγραφε [29-Sep-2011 09:19:48] PHP Warning: Cannot modify header information - headers already sent by (output)...

any suggestions?
Λύθηκε το θέμα! Το αρχείο που είχα σώσει είχε BOM χαρακτήρες, το καθάρισα και λειτουργεί σωστά τώρα. Ευχαριστώ πολύ fafos, είσαι όντως ο script master!

acerbitch
Δημοσιεύσεις: 37
Εγγραφή: 02 Φεβ 2009 11:33

mysql to xls script

Δημοσίευση από acerbitch » 29 Σεπ 2011 18:45

mrpc έγραψε:Ή έχεις κάποιο χαρακτήρα (ή κενό / κενή γραμμή) πριν την έναρξη του script, ή το αποθήκευσες με windows notepad σε utf8 και έπεσες θύμα του BOM.
Ευχαριστώ mrpc!

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες