Ingen upload, 100% lokalt, ingen konto

Artikel

Hvorfor Excel ødelægger dine CSV-filer

Et patient-id, der starter med tre nuller. Et gen ved navn SEPT2. Et sekstencifret kontonummer. Åbn et af disse i et regneark som en almindelig CSV-fil, og Excels importfunktion viser dem ikke bare, den omskriver dem: nullerne forsvinder, gennavnet bliver til en dato, og kontonummeret mister sine sidste par cifre. Intet af dette er egentlig en fejl, det er, hvad der sker, når en generel tal- og datogætter møder tekst, der bare ligner et tal eller en dato. Her er, hvad der rent faktisk sker med en CSV-fil, i det øjeblik Excel åbner den, og hvordan du stopper det, før det sker.

Foranstillede nuller forsvinder

Skriv 02134 i en celle, og Excels standard-kolonnetype, Generelt, læser det som et tal og dropper det foranstillede nul: 2134. Det rammer enhver kode, der er gemt som cifre, men reelt ikke er en mængde: amerikanske postnumre, danske postnumre, medarbejder- eller fakturanumre, telefonnumre. Teknisk set går der ikke tabt noget fra den underliggende CSV-fil, teksten ved siden af cellen forbliver uændret, indtil du gemmer projektmappen, hvorefter Excel skriver tilbage, hvad det viste, og nullerne er væk for altid. Løsningen er at fortælle Excel, at kolonnen er tekst, før den får chancen for at gætte: gennem Data > Fra tekst/CSV (eller Hent data > Fra fil) kan du sætte hver kolonnes datatype eksplicit, eller tilføje en apostrof foran en værdi i en enkelt celle for at tvinge tekst.

Excels kolonnetype Generelt læser teksten 02134 som et tal og dropper det foranstillede nul, så 2134 vises

Tekst bliver til datoer uden at spørge

Den samme gætter kigger også efter datoformet tekst. En celle, der indeholder MAR1 eller SEPT2, læst som 1. marts eller 2. september, konverteres stille og roligt til en datoværdi og formateres om, uden nogen advarsel. Dette er ikke hypotetisk: i 2020 omdøbte HUGO Gene Nomenclature Committee omkring 27 humane gensymboler, herunder SEPT2 og MARCH1, specifikt fordi regnearkssoftware blev ved med at gøre dem til datoer, hver gang et datasæt blev åbnet, et problem så alvorligt, at en undersøgelse fra 2016 af genomikartikler fandt autokorrektionsfejl som denne i omkring hver femte publikation, der medsendte supplerende Excel-filer. Lektien generaliserer ud over gennavne: enhver kort alfanumerisk kode, der tilfældigvis ligner en dag og en måned, er i farezonen, i det øjeblik nogen åbner din CSV i et regneark, ikke kun din.

Meget lange tal mister deres sidste cifre

Excel gemmer hvert tal som en flydende komma-værdi med 15 betydende cifres præcision, en grænse Microsoft dokumenterer direkte. Et sekstencifret kort- eller kontonummer som 4111111111111111 rundes af for at passe, så det sidste ciffer eller to stille og roligt bliver til nul, og værdien ikke længere er den, du skrev. At formatere cellen bagefter bringer ikke de manglende cifre tilbage, fordi det underliggende gemte tal allerede er rundet af; den eneste løsning er at importere kolonnen som tekst, eller sætte en apostrof foran værdien, før Excel nogensinde behandler den som et tal.

Excel beholder kun 15 betydende cifre af et tal: den 16-cifrede værdi 4111111111111111 rundes af, og dens sidste ciffer bliver til nul

Tekst med specialtegn bliver til volapyk

Kodning er en separat fejltype adskilt fra autokorrektion. En CSV-fil uden byte order mark er blot bytes; hvis den blev gemt som UTF-8, vil Excel på Windows typisk åbne den ud fra systemets eget codepage i stedet, så bogstaver med accenter, valutasymboler og emoji kommer ud som volapyk, en streng som café, der viser sig som noget nærmere café. Den sikre vej, når du laver en CSV til Excel, er at gemme den som CSV UTF-8 eller tilføje en UTF-8 byte order mark; den sikre vej, når du modtager en, er at importere gennem Data > Fra tekst/CSV, som lader dig vælge kildekodningen eksplicit i stedet for at stole på, at et dobbeltklik gætter rigtigt.

Flyt data mellem formater uden at åbne det i Excel

Intet af dette er egentlig en Excel-fejl, det er, hvad et regnearks tal- og datogætter er bygget til at gøre, og det gælder, uanset hvordan filen åbnes, ikke kun i Excel. Den sikreste måde at omforme en CSV-fil på, eller tjekke at en kolonne reelt forbliver tekst, før den når et regneark, er at arbejde direkte på den: vores datakonverter parser CSV med en standard citationsbevidst parser og genfortolker aldrig en værdis type, så et postnummer eller gennavn forbliver præcis den tekst, du gav den. Den kører helt i din browser, intet du indsætter, bliver uploadet nogen steder. Det beskytter dog kun konverteringstrinnet: hvis outputtet stadig skal åbnes i et regneark bagefter, så marker også de følsomme kolonner som tekst der.

Værktøjer i denne artikel

Ofte stillede spørgsmål

Hvordan stopper jeg Excel fra at fjerne foranstillede nuller fra en CSV?

Åbn ikke filen ved at dobbeltklikke på den. Importer den i stedet gennem Data > Fra tekst/CSV (eller Hent data), som viser en kolonne-for-kolonne datatypevælger; sæt postnummer-, id- eller telefonnummerkolonnen til Tekst, før du afslutter importen. En hurtig celle-for-celle-løsning er at skrive en apostrof foran værdien, som '02134, hvilket tvinger tekst uden at ændre, hvad der vises.

Hvorfor gjorde Excel mit id eller min kode til en dato?

Excels kolonnetype Generelt leder aktivt efter datoformet tekst, mønstre som et kort ord plus et tal, eller to tal adskilt af en bindestreg eller skråstreg, og konverterer alt, der matcher, uden at spørge om bekræftelse. Det er præcis, hvad der tvang omdøbningen af gensymboler som SEPT2 og MARCH1 i 2020. Importer kolonnen som Tekst, på samme måde som for foranstillede nuller, for at stoppe gættet, før det sker.

Undgår det disse problemer helt at konvertere min CSV på en anden måde?

Det undgår dem for det konverteringstrin, ikke for altid. En parser, der behandler hvert felt som almindelig tekst, som vores datakonverter, vil ikke omskrive et postnummer eller et gennavn, mens den laver en CSV om til JSON. Men hvis outputtet stadig ender med at blive åbnet i et regneark senere, af dig eller af den, der modtager det, får det programs egen importfunktion endnu en chance for at genfortolke værdierne, så de følsomme kolonner skal markeres som tekst der også.

Kilder