Vytváříme UTF-8 CSV pro Excel

25. 04. 2018

Občas potřebujete vyexportovat nějakou tu tabulku pro Excel a další tabulkové editory. CSV uložené v kódování UTF-8 se zdá být dostatečně univerzálním formátem, aby si s ním poradilo programové vybavení každého počítače.

Ovšem zdání klame. Pokud vytvoříte „obyčejné“ UTF-8 CSV, zmlsaný Excel z něj dostane vyrážku v podobě rozsypaného čaje u znaků ležících mimo ASCII.

Naštěstí existuje kouzelný lektvar s kódovým označením BOM (Byte order mark), který nemoc našeho CSV vyléčí. Jsou to tři magické bajty, které je třeba umístit na úplný začátek CSV. Excel podle těchto bytů pozná, že soubor je v UTF-8. Bohužel problém může nastat u editorů, které BOM nepodporují.

Kód pro report stavu majetku vaší firmy:

//headers
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=export.csv;');
header('Content-Transfer-Encoding: binary');

//open file pointer to standard output
$fp = fopen('php://output', 'w');

//add BOM to fix UTF-8 in Excel
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
if ($fp)
{
fputcsv($fp, array("Cars", "Planes", "Ships"), ";");
fputcsv($fp, array("12", "2", "6"), ";");
fputcsv($fp, array("23", "3", "5"), ";");
fputcsv($fp, array("31", "5", "8"), ";");
}

fclose($fp);

Edit 2017-11-30: Ukázalo se, že tento trik funguje pouze s novějšími verzemi Excel 2007. Pokud vám tedy nefunguje, zkuste aktualizovat.

Klíčové funkce a komponenty APS systémů

Vaše moderní výrobní firma čelí neustálým výzvám. Musíte pružně reagovat na nečekané události, a přitom udržet nízké náklady s maximální …

Číst článek

Co je APS (Advanced Planning and Scheduling)?

Jste výrobní firma? Tak to určitě znáte, jak se vám mění poptávka pod rukama a jak je konkurence ostrá. Bez …

Číst článek

Zkušený iOS vývojář

iOS programátor se zkušenostmi, který si chce řídit vlastní čas v remote-first týmu. Jsme svobodná full remote vývojářská firma. Technologie, …

Číst článek

Kontakt