Žádné nahrávání, 100% lokálně, bez účtu

Článek

Proč Excel poškodí vaše soubory CSV

ID pacienta začínající třemi nulami. Gen pojmenovaný SEPT2. Šestnáctimístné číslo účtu. Otevřete kterékoli z nich v tabulkovém procesoru jako obyčejný soubor CSV a importér Excelu je nejen zobrazí, ale přepíše: nuly zmizí, název genu se stane datem a číslo účtu ztratí posledních pár číslic. Nic z toho není přesně chyba, je to jen to, co se stane, když se univerzální hádač čísel a dat potká s textem, který jen vypadá jako číslo nebo datum. Zde je, co se se souborem CSV skutečně stane ve chvíli, kdy ho Excel otevře, a jak tomu předejít.

Úvodní nuly mizí

Napište do buňky 02134 a výchozí typ sloupce Excelu, Obecný, to přečte jako číslo a upustí úvodní nulu: 2134. To postihne jakýkoli kód uložený jako číslice, který ale ve skutečnosti není množstvím: americká PSČ, francouzská PSČ, čísla zaměstnanců nebo faktur, telefonní čísla. Z podkladového souboru CSV se technicky nic neztratí, text vedle buňky zůstává beze změny, dokud sešit neuložíte; v tu chvíli Excel zapíše zpět to, co zobrazoval, a nuly jsou navždy pryč. Řešením je říct Excelu, že je sloupec text, ještě než dostane šanci hádat: přes Data > Z textu/CSV (nebo Získat data > Ze souboru) můžete nastavit datový typ každého sloupce výslovně, nebo přidat apostrof před hodnotu v jednotlivé buňce, čímž vynutíte text.

Obecný typ sloupce Excelu přečte text 02134 jako číslo a upustí úvodní nulu, takže zobrazí 2134

Text se bez ptaní mění na data

Stejný hádač hledá i text ve tvaru data. Buňka obsahující MAR1 nebo SEPT2, přečtená jako 1. březen nebo 2. září, se potichu převede na hodnotu data a přeformátuje, bez jakéhokoli varování. Není to hypotetické: v roce 2020 přejmenoval Výbor pro nomenklaturu lidských genů (HGNC) přibližně 27 symbolů lidských genů, včetně SEPT2 a MARCH1, konkrétně proto, že se tabulkový software neustále snažil proměnit je na data pokaždé, když se soubor otevřel v tabulkovém procesoru; problém dost vážný na to, že průzkum genomických studií z roku 2016 našel podobné chyby automatické opravy zhruba v každé páté publikaci, která obsahovala doplňkové soubory Excelu. Poučení se dá zobecnit i mimo názvy genů: jakýkoli krátký alfanumerický kód, který náhodou vypadá jako den a měsíc, je v ohrožení ve chvíli, kdy někdo otevře váš CSV v tabulkovém procesoru, nejen ten váš.

Velmi dlouhá čísla ztrácejí poslední číslice

Excel ukládá každé číslo jako hodnotu s plovoucí desetinnou čárkou s přesností na 15 platných číslic, limit, který Microsoft přímo dokumentuje. Šestnáctimístné číslo karty nebo účtu, jako 4111111111111111, se zaokrouhlí, aby se vešlo, takže se poslední jedna nebo dvě číslice potichu změní na nulu a hodnota už není ta, kterou jste zadali. Naformátování buňky poté chybějící číslice nevrátí zpět, protože podkladové uložené číslo už bylo zaokrouhleno; jediným řešením je importovat sloupec jako text, nebo hodnotu opatřit apostrofem, ještě než ji Excel začne brát jako číslo.

Excel si ponechá jen 15 platných číslic čísla: šestnáctimístná hodnota 4111111111111111 se zaokrouhlí a její poslední číslice se změní na nulu

Text s diakritikou se mění na zmatek

Kódování je samostatný typ selhání, oddělený od automatických oprav. Soubor CSV bez značky pořadí bajtů (BOM) je jen surové bajty; pokud byl uložen jako UTF-8, Excel na Windows ho obvykle otevře s předpokladem vlastní systémové znakové stránky místo toho, takže znaky s diakritikou, měnové symboly a emoji vyjdou jako změť, řetězec jako café se zobrazí jako něco bližšího café. Bezpečná cesta při vytváření CSV pro Excel je uložit ho jako CSV UTF-8 nebo přidat značku pořadí bajtů UTF-8; bezpečná cesta při zpracování takového souboru je importovat ho přes Data > Z textu/CSV, což umožňuje výslovně zvolit zdrojové kódování místo spoléhání na to, že dvojklik uhodne správně.

Přesun dat mezi formáty bez otevření v Excelu

Nic z toho není ve skutečnosti chyba Excelu, je to jen to, k čemu je hádač čísel a dat v tabulkovém procesoru navržen, a platí to bez ohledu na to, čím je soubor otevřen, ne jen v Excelu. Nejbezpečnější cesta, jak přetvořit soubor CSV nebo ověřit, že sloupec skutečně zůstane text ještě před tím, než se dostane do jakéhokoli tabulkového procesoru, je pracovat s ním přímo: náš data converter parsuje CSV standardním parserem respektujícím uvozovky a nikdy nepřeinterpretuje typ hodnoty, takže PSČ nebo název genu zůstane přesně tím textem, který jste zadali. Běží celý ve vašem prohlížeči, nic z toho, co vložíte, se nikam nenahrává. To ale chrání jen samotný krok převodu: pokud se výstup nakonec stejně otevře v tabulkovém procesoru, je potřeba i tam citlivé sloupce označit jako text.

Nástroje v tomto článku

Časté dotazy

Jak zabráním Excelu odstranit úvodní nuly z CSV?

Soubor neotvírejte dvojklikem. Naimportujte ho místo toho přes Data > Z textu/CSV (nebo Získat data), což ukáže volič datového typu sloupec po sloupci; nastavte sloupec s PSČ, ID nebo telefonním číslem na Text ještě před dokončením importu. Rychlou opravou pro jednotlivou buňku je napsat před hodnotu apostrof, jako '02134, což vynutí text, aniž by se změnilo, co se zobrazuje.

Proč Excel proměnil moje ID nebo kód na datum?

Obecný typ sloupce Excelu aktivně hledá text ve tvaru data, vzory jako krátké slovo plus číslo, nebo dvě čísla oddělená pomlčkou nebo lomítkem, a převede cokoli, co odpovídá, bez jakéhokoli potvrzení. Přesně to si v roce 2020 vynutilo přejmenování genových symbolů jako SEPT2 a MARCH1. Naimportujte sloupec jako Text, stejně jako u úvodních nul, abyste tomuto hádání předešli.

Vyhne se jiný způsob převodu CSV těmto problémům úplně?

Vyhne se jim jen pro daný krok převodu, ne navždy. Parser, který zachází s každým polem jako s obyčejným textem, jako náš data converter, nepřepíše PSČ ani název genu při převodu CSV na JSON. Ale pokud výstup nakonec stejně skončí otevřený v tabulkovém procesoru, ať už vámi nebo tím, kdo ho dostane, dostane vlastní importér toho programu další šanci hodnoty přeinterpretovat, takže citlivé sloupce je potřeba označit jako text i tam.

Zdroje