2016-09-30 3 views
1

Ich habe ein Skript, um den Inhalt einer MySQL-Datenbank zu exportieren, die abgesehen von einer Spalte mit führenden Nullen gut funktioniert. Aus irgendeinem Grund werden diese fallengelassen.PHP Excel Exportieren von Tropfen führende Nullen

Gibt es eine Möglichkeit, den Code so zu ändern, dass die führenden Nullen beibehalten werden?

Vielen Dank!

$sql = "Select * from $DB_TBLName"; 
 
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno()); 
 
//select database 
 
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno()); 
 
//execute query 
 
$result = @mysql_query($sql,$Connect) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());  
 
$file_ending = "xls"; 
 
//header info for browser 
 
header("Content-Type: application/xls");  
 
header("Content-Disposition: attachment; filename=$filename.xls"); 
 
header("Pragma: no-cache"); 
 
header("Expires: 0"); 
 
/*******Start of Formatting for Excel*******/ 
 
//define separator (defines columns in excel & tabs in word) 
 
$sep = "\t"; //tabbed character 
 
//start of printing column names as names of MySQL fields 
 
for ($i = 0; $i < mysql_num_fields($result); $i++) { 
 
echo mysql_field_name($result,$i) . "\t"; 
 
} 
 
print("\n");  
 
//end of printing column names 
 
//start while loop to get data 
 
    while($row = mysql_fetch_row($result)) 
 
    { 
 
     $schema_insert = ""; 
 
     for($j=0; $j<mysql_num_fields($result);$j++) 
 
     { 
 
      if(!isset($row[$j])) 
 
       $schema_insert .= "NULL".$sep; 
 
      elseif ($row[$j] != "") 
 
       $schema_insert .= "$row[$j]".$sep; 
 
      else 
 
       $schema_insert .= "".$sep; 
 
     } 
 
     $schema_insert = str_replace($sep."$", "", $schema_insert); 
 
     $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
 
     $schema_insert .= "\t"; 
 
     print(trim($schema_insert)); 
 
     print "\n"; 
 
    }

Antwort

0

Um die führenden Nullen zu erhalten, muss Excel die Daten als Text (oder ein benutzerdefinierten Zahlenformat wie "00000000") behandeln.

Ich fand eine mögliche Lösung von superuser.com. Grundsätzlich Daten in folgendem Format werden als Text behandelt werden, da der Wert wird durch doppelte Anführungszeichen eingeschlossen sein: „=“ „00123“ „“

Ich denke, Ihr Code würde ändern:

[snip] 
     elseif ($row[$j] != "") 
      $schema_insert .= '"=""$row[$j]"""'.$sep; 
[snip] 

Or was auch immer die notwendigen Zitate in der Stichprobe erzeugen würde.

Verwandte Themen