Archiv der Kategorie: excel

Sonderzeichen im UTF-8 CSV Export für Excel

Wer schon mal CSV Daten geschrieben hat kennt sicher das Problem, dass die Sonderzeichen meist nicht richtig angezeigt werden, wenn man in UTF-8 exportiert.

Wer das vermeiden will muss einfach den richtigen Unicode-Header mitsenden, dieser lautet:

echo pack("CCC",0xef,0xbb,0xbf);

Dieses Kommando sendet ihr am besten nach den „header“ Kommandos, aber noch vor den Daten, dann zeigt Excel auch die richtigen Daten per Doppelklick an.

P.S. LibreOffice / OpenOffice sind von Haus aus schlau genug und stellen die Daten ohnehin richtig dar, das Problem existiert also wirklich nur für Excel.

Führungsnull in Excel aus CSV anzeigen

Viele kennen das Problem. Man hat eine CSV Datei, in dieser steht eine Postleitzahl oder eine Telefonnummer, die als erste Stelle eine 0 (Null) hat.

Öffnet man das nun in Excel, ist die Null weg.

Beispiel: Ein Kunde kommt aus Dresden, gibt als PLZ “01307” ein. Exportiert man das ganze dann als “kunden.csv” und doppelklickt es in Excel auf, so erscheint “1307”, was ja nicht ganz richtig ist. Excel ist einfach zu schlau…

Da wir aber klein, trotzig und unwürdig sind, möchten wir trotzdem die führende Null sehen; der Kunde übrigens auch. Da der Kunde König und Excel eh nur eingekauft ist, ist der Weg klar: Die Null muss her!

Wer lange sucht, der findet auch die tollsten Lösungswege. Nicht Excel muss sich an uns, vielmehr müssen wir uns an Excel anpassen; sprich: Nicht einfach per doppelklick öffnen, o nein, gefälligst per Import die Daten einholen und dann als Text formatieren.

Das kann es nicht sein, hier also der Weg des Programmierers!

Unser Vorteil ist, das Excel die Daten pro Spalte nicht nur importiert, sondern auch interpretiert, d.h. wir benutzen eine Funktion aus Excel, die dafür sorgt, dass die Daten korrekt dargestellt werden.

Diese heißt für unseren Zweck: VERKETTEN

Will man also diese Zeile richtig importieren:

“Max”;”01307”;”Dresden”

Dann muss man sowas schreiben:

“Max”;”=VERKETTEN(0;1;3;0;7)”;”Dresden”

Und da Programmierer erwiesenermaßen faul sind, werfe ich gleich mal eine PHP-Funktion dafür in die Runde. Die kann sicherlich noch optimiert werden, aber für’s erste genügt diese den Anforderungen:

function formatForExcel($text) 
{
   $excelText = '=VERKETTEN(';
   for($i=0; $i<strlen($text);$i++)
   {
     if ($i>0) {
       $excelText .= ';';
     }
     $excelText .= $text[$i];
   }   
   $excelText .= ')';
   return $excelText; 
}

Wird nun formatForExcel aufgerufen, dann werden die Daten entsprechend per “Verketten” abgelegt und dann in Excel richtig aufgerufen.