Προς το περιεχόμενο

php - export mysql table to xls script


heavyaris

Προτεινόμενες αναρτήσεις

Δημοσ.

παιδιά, έχω φτιάξει ένα online πελατολόγιο με php+mysql, και αυτό που θα ήθελα να ρωτήσω είναι το εξής:

Στo phpmyadmin, τα αποτελέσματα ενός query μπορούν να γίνουν export σε xls (Microsoft Excel 2000 ).

Εγώ θέλω ακριβώς αυτό! πάνω πάνω στα αποτελέσματα να υπάρχει ένας σύνδεσμος (μαζί με τον σύνδεσμο "εκτύπωση") "export to xls" και μόλις πατάει ο χρήστης να εμφανίζεται το παράθυρο του browser "save as".

δεν έχω ιδέα όμως καν πώς να το αναζητήσω στο google.

ευχαριστώ.

Δημοσ.

χαχα, ευχαρίστησε τους Larry Page, Sergey Brin (καθώς και τον content author)

Δημοσ.

παιδια, έχω ενσωματώσει τον κώδικα

>header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=ajareport.xls>");
header("Pragma: no-cache");
header("Expires: 0"); 
$select = $query;
$export = mysql_query($select);
$count = mysql_num_fields($export);
for ($i = 0; $i < $count; $i++) {
$header .= mysql_field_name($export, $i)."\t";
}
while($row = mysql_fetch_row($export)) {
$line = '';
foreach($row as $value) {
if ((!isset($value)) OR ($value == "")) {
$value = "\t";
} else {
$value = str_replace('"', '""', $value);
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r", "", $data);
if ($data == "") {
$data = "\n(0) Records Found!\n";
}
print "$header\n$data";

 

στο αρχείο php που έχω να εμφανίζει τα αποτελέσματα απο τή βάση. τρέχοντας το λαμβάνω το

>Warning: Cannot modify header information - headers already sent by

ναί αλλά εάν δεν βάλω τα

>
header("Content-Disposition: attachment; filename=ajareport.xls>");
header("Pragma: no-cache");
header("Expires: 0"); 

πώς θα λειτουργήσει;

Δημοσ.

σε ενα φορουμ βρήκα: http://www.geeklog.net/faqman/index.php?op=view&t=38

>The fix is, obviously, to remove that whitespace from the file. Read the error message carefully. It says "output started at ..." followed by a file name and a line number. That is the file (and line) that you need to edit. Ignore the second file name - that is only a file that included the file that has the whitespace. The first file is the one you have to edit, not the second one.

 

αλλα χρησιμοποιώ το dreamweaver, είναι δυνατόν να αφήνει αόρατα κενα;

 

---------- Προσθήκη στις 17:57 ---------- Προηγούμενο μήνυμα στις 16:27 ----------

 

το παρακάτω script δουλεύει, αλλα όπως ήταν αναμενόμενο, το αρχείο xls εμφανίζει οποιονδήποτε ελληνικό χαρακτηρα σε ?????

><?php
// Edit the $Host, $User $Password, $DBName and $TableName vars only! //
$Host = "localhost";
$User = " ";
$Password = " ";
$DBName = " _clients";
$TableName = "clients";


// DO NOT EDIT BELOW HERE //
$link = mysql_connect ($Host, $User, $Password) or die('Could not connect: ' . mysql_error());
mysql_select_db($DBName) or die('Could not select database');

$select = "SELECT * FROM `".$TableName."`";
mysql_query("SET NAMES 'utf8_unicode_ci'");
mysql_query("SET CHARACTER SET 'utf8_unicode_ci'");
$export = mysql_query($select);
$fields = mysql_num_fields($export);

for ($i = 0; $i < $fields; $i++) {
   $csv_output .= mysql_field_name($export, $i) . "\t";
}

while($row = mysql_fetch_row($export)) {
   $line = '';
   foreach($row as $value) {
       if ((!isset($value)) OR ($value == "")) {
           $value = "\t";
       } else {
           $value = str_replace('"', '""', $value);
           $value = '"' . $value . '"' . "\t";
       }
       $line .= $value;
   }
   $data .= trim($line)."\n";
}
$data = str_replace("\r","",$data);

header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=database_dump.xls");
header("Pragma: no-cache");
header("Expires: 0");
print $csv_output."\n".$data;
exit;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="el">
<head>
   <title>Download MySQL Table Code</title>
</head>
<body>

</body>
</html>

τι μπορώ να διορθώσω;

Δημοσ.

>SET NAMES utf8;

 

αντί SET NAMES 'utf8_unicode_ci'

 

τα δεδομένα στη βάση πως τα έχεις περάσει;

Δημοσ.

έτσι τα είχα και πρίν:

>mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

 

απλά αντι για ερωτηματικά έπαιρνα:

>Ξ Ξ‘ΞΤΕΛΙΔΗΣ ΓΕΩΡΓΙΞΞ£

 

τα δεδομένα έγιναν import απο ενα csv, πρώην xls, που πάλι είχα προβλήματα και ανέβαιναν στη βάση με ερωτηματικά, αλλα πειραματίστηκα με το collation και το έλυσα.

πληροφορίες του πίνακα στο συνημμένο:

post-108294-129063124098_thumb.jpg

Δημοσ.

><meta http-equiv="content-type" content="text/html; charset=UTF-8" />

 

εσύ του λες φέρτα σε UTF-8 από τη βάση, αλλά στη σελίδα έχεις

><html xmlns="http://www.w3.org/1999/xhtml" lang="el">

 

οι κωδικοποιήσεις πρέπει να match-άρουν...

Δημοσ.

σιγουρα, και εγώ εκεί πιστέυω πως είναι το πρόβλημα, συνοψίζοντας, πρεπει να αλλαχθούν τα:

 

>mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

 

>header("Content-Type: application/vnd.ms-excel;  charset= greek_general_ci;");

 

><html xmlns="http://www.w3.org/1999/xhtml" lang="el">

 

Ποιό όμως πρέπει να είναι το κοινό με βάση και το screenshot της βάσης;

Υ.Γ έχει σημασία η τελευταία γραμμή; αφου δεν εκτυπώνω κάτι στην οθόνη, κατευθείαν βγαίνει το "save as".

 

---------- Προσθήκη στις 14:01 ---------- Προηγούμενο μήνυμα στις 12:12 ----------

 

χμ.. διαπίστωσα κάτι ενδιαφέρων, αν το ανοίξω με word, με ρωτάει encoding και εάν δώσω utf-8 φορτώνει κανονικά..

  • 7 μήνες μετά...
Δημοσ.

παιδιά, επειδή έκανα επέκταση του πελατολόγιου ώστε να μπορώ να κάνω και εισαγωγή πελάτη, όπως είναι λογικό, στα textfield της φόρμας, έβαλα mysql_real_escape_string, με αποτέλεσμα να αποθηκέυεται στην βάση η κάθετος '\'.

όταν τα δείχνω τα αποτελέσματα χρησιμοποιώ την stripslashes, όμως κάπως πρέπει να την ενσωματώσω και στο script export to excel το οποίο είναι αυτό:

>$xls_query= $_GET['queryEncoded'];
//echo $xls_query; 
// DO NOT EDIT BELOW HERE //
$link = mysql_connect ($Host, $User, $Password) or die('Could not connect: ' . mysql_error());
mysql_select_db($DBName) or die('Could not select database');
//////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//$select =base64_decode($xls_query);
$xls_query_dec = base64_decode($xls_query);
$xls_query_dec;
$xls_query_exploded = explode(' LIMIT', $xls_query_dec);
$select = $xls_query_exploded[0];
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
$export = mysql_query($select); 
$fields = mysql_num_fields($export); 


for ($i = 0; $i < $fields; $i++) {
$csv_output .= mysql_field_name($export, $i) . "\t";
}

while($row = mysql_fetch_row($export)) {
$line = '';
foreach($row as $value) {
	if ((!isset($value)) OR ($value == "")) {
		$value = "\t"; 
	} else {
		$value = str_replace('"', '""', $value);
		$value = '"' . $value . '"' . "\t"; 
	}
	$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r","",$data);
$csv_output = iconv('utf-8','greek',$csv_output);
$data = iconv('utf-8','greek',$data);

header("Content-Type: application/vnd.ms-excel;  charset= utf8;");
header("Content-Disposition: attachment; filename=database_dump.xls");
header("Content-Transfer-Encoding: binary ");
header("Pragma: no-cache");
header("Expires: 0");
print $csv_output."\n".$data;
exit;

καμμιά ιδέα;

ευχαριστω.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...