Ingen opplasting, 100% lokalt, ingen konto

Artikkel

Hvorfor Excel ødelegger CSV-filene dine

En pasient-ID som starter med tre nuller. Et gen kalt SEPT2. Et kontonummer på seksten sifre. Åpne noen av disse i et regneark som en ren CSV-fil, og Excels importfunksjon viser dem ikke bare, den skriver dem om: nullene forsvinner, gennavnet blir en dato, og kontonummeret mister de siste sifrene. Ingenting av dette er egentlig en feil, det er det som skjer når en generell tall- og datogjetter møter tekst som bare ser ut som et tall eller en dato. Her er hva som faktisk skjer med en CSV-fil i det øyeblikket Excel åpner den, og hvordan du stopper det før det skjer.

Ledende nuller forsvinner

Skriv 02134 i en celle, og Excels standard kolonnetype, Generelt, leser det som et tall og fjerner det ledende nullet: 2134. Dette rammer enhver kode som er lagret som sifre, men som ikke egentlig er en mengde, amerikanske postnumre, franske postnumre, ansatt- eller fakturanumre, telefonnumre. Teknisk sett går ingenting tapt fra den underliggende CSV-filen, teksten ved siden av cellen forblir uendret, helt til du lagrer arbeidsboken, og da skriver Excel tilbake det den viste, og nullene er borte for godt. Løsningen er å fortelle Excel at kolonnen er tekst før den får sjansen til å gjette: gjennom Data > Fra tekst/CSV (eller Hent data > Fra fil) kan du sette hver kolonnes datatype eksplisitt, eller legge til en apostrof foran en verdi i en enkelt celle for å tvinge tekst.

Excels kolonnetype Generelt leser teksten 02134 som et tall og fjerner det ledende nullet for å vise 2134

Tekst blir til datoer uten å spørre

Den samme gjetteren leter også etter datoformet tekst. En celle som inneholder MAR1 eller SEPT2, lest som 1. mars eller 2. september, konverteres stille til en datoverdi og formateres om, uten noen advarsel vist. Dette er ikke hypotetisk: i 2020 omdøpte Human Genome Organisation Gene Nomenclature Committee rundt 27 humane gensymboler, inkludert SEPT2 og MARCH1, spesifikt fordi regnearkprogramvare fortsatte å gjøre dem om til datoer hver gang et datasett ble åpnet, et problem alvorlig nok til at en undersøkelse fra 2016 av genomikk-artikler fant autokorrigeringsfeil som dette i omtrent én av fem publikasjoner som fulgte med Excel-tilleggsfiler. Lærdommen generaliserer utover gennavn: enhver kort alfanumerisk kode som tilfeldigvis ser ut som en dag og en måned er i faresonen i det øyeblikket noen åpner CSV-en din i et regneark, ikke bare din egen.

Svært lange tall mister de siste sifrene

Excel lagrer hvert tall som en flyttallsverdi med 15 signifikante sifre presisjon, en grense Microsoft dokumenterer direkte. Et kort- eller kontonummer på seksten sifre, som 4111111111111111, avrundes for å passe, så det siste sifferet eller to blir stille til null og verdien er ikke lenger den du skrev inn. Å formatere cellen etterpå vil ikke bringe tilbake de manglende sifrene, fordi det underliggende lagrede tallet allerede er avrundet; den eneste løsningen er å importere kolonnen som tekst, eller sette en apostrof foran verdien, før Excel noensinne behandler den som et tall.

Excel beholder bare 15 signifikante sifre av et tall: 16-sifferverdien 4111111111111111 avrundes og det siste sifferet blir null

Tekst med aksenter blir til søppel

Koding er en separat feilmodus fra autokorrigering. En CSV-fil uten byte-rekkefølge-merke er rene byte; hvis den ble lagret som UTF-8, vil Excel på Windows typisk åpne den ved å anta systemets eget kodeoppsett i stedet, så bokstaver med aksenter, valutasymboler og emoji kommer ut som mojibake, en streng som café som viser seg som noe nærmere café. Den trygge veien når du produserer en CSV for Excel er å lagre den som CSV UTF-8 eller legge til et UTF-8-byte-rekkefølge-merke; den trygge veien når du bruker en er å importere gjennom Data > Fra tekst/CSV, som lar deg velge kildekodingen eksplisitt i stedet for å stole på at et dobbeltklikk gjetter riktig.

Å flytte data mellom formater uten å åpne den i Excel

Ingenting av dette er egentlig en Excel-feil, det er det en regnearks tall- og datogjetter er bygget for å gjøre, og det gjelder uansett hvordan filen åpnes, ikke bare i Excel. Den tryggeste måten å omforme en CSV-fil på, eller sjekke at en kolonne virkelig forblir tekst før den når et regneark, er å jobbe direkte på den: datakonverteren vår parser CSV med en standard, anførselstegn-bevisst parser og tolker aldri en verdis type på nytt, så et postnummer eller gennavn forblir nøyaktig teksten du ga den. Den kjører helt i nettleseren din, ingenting du limer inn lastes opp noe sted. Det beskytter bare konverteringstrinnet, likevel: hvis resultatet fortsatt skal åpnes i et regneark etterpå, av deg eller den som mottar det, får det programmets egen importfunksjon en ny sjanse til å tolke verdiene på nytt, så de sensitive kolonnene må merkes som tekst der også.

Verktøy i denne artikkelen

Ofte stilte spørsmål

Hvordan stopper jeg Excel fra å fjerne ledende nuller fra en CSV?

Ikke åpne filen ved å dobbeltklikke på den. Importer den i stedet gjennom Data > Fra tekst/CSV (eller Hent data), som viser en kolonne-for-kolonne datatypevelger; sett postnummer-, ID- eller telefonnummerkolonnen til Tekst før du fullfører importen. En rask per-celle-løsning er å skrive en apostrof foran verdien, som '02134, som tvinger tekst uten å endre hva som vises.

Hvorfor gjorde Excel ID-en eller koden min om til en dato?

Excels kolonnetype Generelt leter aktivt etter datoformet tekst, mønstre som et kort ord pluss et tall, eller to tall separert med en bindestrek eller skråstrek, og konverterer alt som matcher, uten bekreftelse spurt. Dette er nøyaktig det som tvang omdøpingen av gensymboler som SEPT2 og MARCH1 i 2020. Importer kolonnen som Tekst, på samme måte som for ledende nuller, for å stoppe gjetningen før den skjer.

Unngår det å konvertere CSV-en min på en annen måte disse problemene helt?

Det unngår dem for det konverteringstrinnet, ikke for alltid. En parser som behandler hvert felt som ren tekst, som datakonverteren vår, vil ikke skrive om et postnummer eller et gennavn mens den gjør en CSV om til JSON. Men hvis resultatet fortsatt ender opp åpnet i et regneark senere, av deg eller av den som mottar det, får det programmets egen importfunksjon en ny sjanse til å tolke verdiene på nytt, så de sensitive kolonnene må merkes som tekst der også.

Kilder