13 Stimmen

fputcsv Anzeige führender Nullen

Ich verwende ein PHP-Skript, um eine Excel-CSV-Datei aus einer Ergebnisabfrage zu generieren. Alles funktioniert gut, aber wenn ich meine Excel-Datei lese, kann ich keine führenden Nullen anzeigen.

Dies ist mein Code:

$rows = $this->Query($sql);

$filename = "/www/zendsvr/htdocs/Project/public/report.xls";
$realPath = realpath( $filename );

$filename = realpath( $filename );
$handle = fopen( $filename, "w" );
$finalData = array();

for( $i = 0; $i < count( $rows ); $i++ ) {
    $finalData[] = array( utf8_decode( $rows[$i]->CODE ) );
}

foreach ( $finalData AS $finalRow ) {
    fputcsv( $handle, $finalRow, "\t" );
}

fclose( $handle );

Wenn ich eine var_dump() de $finalData[] Ich sehe den richtigen Wert, z. B. '000198', '000199', '000200', aber der gleiche Wert in meiner XLS-Datei lautet 198,199,200

Wie kann ich auch führende Nullen in der XLS-Datei anzeigen?

27voto

Ray Punkte 733

Um den Ansatz von DemoUser zu ergänzen:

En \t Der Ansatz hat bei mir funktioniert, allerdings mit einer kleinen Änderung

$column_data = "\t000543";

Hinzufügen der \t mein Problem gelöst, dass die führenden Nullen verschwunden sind, obwohl die CSV-Datei korrekt war und Excel die "falsche \t bei der Anzeige in Excel die führenden Nullen beibehalten.

12voto

SimonDepelchin Punkte 1943

Ich war überrascht, dass nach so vielen Jahren noch niemand eine funktionierende Lösung gefunden hat.

Bei mir hat das folgendermaßen funktioniert:

$records = [
    ['name' => 'John', 'phone' => '01234567'],
    ['name' => 'Jane', 'phone' => '01234569'],
];

$file = fopen('php://output', 'w');

fputcsv($file, ['Name', 'Phone N°']);

foreach ($records as $record) {
    fputcsv($file, [$record['name'], "=\"" . $record['phone'] . "\""]);
}

5voto

Salman A Punkte 246207

Ihre Daten sind korrekt gespeichert, nur Excel versucht, schlau zu sein.

Verwenden Sie den Excel-Assistenten für den Datenimport, anstatt die Datei direkt zu öffnen (benennen Sie die .csv-Datei gegebenenfalls in .txt um). Wählen Sie im Importassistenten als Datentyp der Spalte "Text" statt "Allgemein":

Text import wizard step 3

3voto

Sudhir Bastakoti Punkte 97215

Versuchen Sie, es in eine Zeichenkette zu verwandeln:

fputcsv($fp, (string) $val);

ODER, beim Öffnen der XLS-Datei wird die führende 0 abgeschnitten. Versuchen Sie also, /t vor der Null hinzuzufügen, um das Abschneiden der 0 beim Erstellen Ihrer Zeilenwerte zu vermeiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X