Er gebeuren twee verschillende dingen. Een lang getal dat als 4.02177E+19 verschijnt, kan alleen een kwestie van weergave zijn: een bredere kolom of de getalnotatie verandert dat. Maar bij het openen van een csv zet Excel ook de waarde zelf om: een getalcel bewaart maximaal 15 significante cijfers, en voorloopnullen horen niet bij een getal. Cijfers die al vervangen zijn, haalt geen enkele opmaak terug. Om de waarden te behouden, moeten ze tekstcellen worden voordat Excel ze omzet: importeer die kolommen als tekst, of open een xlsx-bestand waarvan de cellen al tekst zijn, zoals de converter CSV naar Excel standaard maakt.
Wat Excel doet met een bestand vol ID's en codes
Een csv-bestand is platte tekst zonder celtypen. Dubbelklik je erop, dan gokt Excel per waarde of het een getal, een datum of tekst is. Het verzonnen voorbeeldbestand hieronder bevat precies het soort waarden waarbij die gok misgaat.
| Waarde | In de csv | Excel opent de csv | Cel in de ViewCSV-xlsx |
|---|---|---|---|
| Voorloopnullen | 00412 | 412 | 00412 |
| Ordernummer van 20 cijfers | 40217730091152400016 | 4.02177E+19 | 40217730091152400016 |
| Het volgende ordernummer | 40217730091152400017 | 4.02177E+19 | 40217730091152400017 |
| Telefoonnummer met plusteken | +15550100234 | 15550100234 | +15550100234 |
| Onderdeelcode die op een datum lijkt | 3-12 | 12-Mar | 3-12 |
| Partijcode met een E | 12E3 | 1.20E+04 | 12E3 |
| Notitie die op een formule lijkt | =SUM(F2:F3) | 17 | =SUM(F2:F3) |
1,20E+04; of en hoe een code als 3-12 een datum wordt, hangt af van de datumvolgorde en het scheidingsteken van de regio. Ook verwacht Excel dan meestal puntkomma's in plaats van komma's tussen de kolommen.Beide ordernummers verschijnen als 4.02177E+19, maar dat is alleen de weergave. Daaronder heeft Excel slechts de eerste 15 cijfers bewaard, waardoor beide cellen nu dezelfde waarde bevatten: 40217730091152400000. Een bredere kolom laat die nullen zien, niet de oorspronkelijke cijfers, en een VERT.ZOEKEN of controle op dubbele waarden ziet de twee orders als één.
Deze rijen zijn het voorbeeldbestand van de converter. Download de csv, open hem in je eigen Excel en vergelijk zelf.
Wetenschappelijke notatie is alleen weergave, verloren cijfers zijn echt weg
4.02177E+19 is alleen hoe een te smalle kolom met de notatie Standaard een groot getal toont; een bredere kolom of de getalnotatie laat meer zien. Het echte verlies gebeurt eerder: Excel slaat getallen op met een precisie van 15 significante cijfers, dus elk cijfer vanaf het 16e wordt bij de omzetting een nul. Een creditcard- of rekeningnummer van 16 cijfers verliest zo al zijn laatste cijfer.
- Voorloopnullen verdwijnen omdat
00412en412hetzelfde getal zijn. Een aangepaste notatie zoals00000toont weer vijf cijfers, maar in de cel staat nog steeds 412, en codes van wisselende lengte zijn zo niet te herstellen. - Lange ID's verliezen elk cijfer na het 15e. Geen notatie, formule of tool kan ze terughalen uit een bestand dat na de omzetting is opgeslagen.
- Codes als
3-12of12E3worden een datum of een getal in wetenschappelijke notatie, en de oorspronkelijke tekst staat niet meer in de cel. - Waarden die met
=beginnen ziet Excel als formules, die het vervangt door hun uitkomst.
Maak in plaats daarvan een xlsx met tekstcellen
Anders dan een csv slaat een .xlsx-werkmap voor elke cel een type op, en een tekstcel toont Excel precies zoals hij geschreven is. De converter CSV naar Excel schrijft standaard elke waarde als tekstcel. Hij werkt in je browser en uploadt het bestand niet.
- Open je csv in de converter CSV naar Excel, of kies Voorbeeld proberen om de rijen van hierboven te laden.
- Controleer de tabel onder Invoer: ID's, nullen en codes staan er precies zoals in het bestand.
- Laat Waardetypen op Alle waarden als tekst bewaren staan.
- Kies XLSX downloaden en open de werkmap in Excel.
In de werkmap zijn 00412, alle 20 cijfers van beide ordernummers, +15550100234, 3-12, 12E3 en =SUM(F2:F3) tekstcellen. Een waarde die op een formule lijkt, wordt als gewone tekst opgeslagen, dus bij het openen wordt niets berekend. Excel kan tekst die op een getal lijkt markeren met een klein groen driehoekje (Getal opgeslagen als tekst); de waarde zelf blijft ongewijzigd.
quantity of unit_price, lees dan de volgende sectie in plaats van hele kolommen in Excel om te zetten: een per ongeluk geselecteerde ID-kolom wordt daar ook omgezet.Als je daarnaast echte getallen nodig hebt
Getallen en true/false herkennen maakt een kolom alleen numeriek als elke waarde erin een gewoon getal is dat Excel ongewijzigd kan opslaan. In het voorbeeld worden quantity en unit_price getallen, terwijl customer_id (voorloopnullen), order_ref (meer dan 15 cijfers), part_code en note tekst blijven.
De herkenning beoordeelt de vorm van de waarden, niet hun betekenis, en beslist steeds voor een hele kolom. Een kolom met alleen waarden als +15550100234 leest als gehele getallen met een teken, en een kolom met alleen waarden als 12E3 als wetenschappelijke notatie. In het voorbeeld zouden phone en lot_code dus ook getallen worden. Houd voor zulke bestanden de standaardinstelling aan en zet in Excel alleen de cellen met aantallen om: selecteer ze en kies Converteren naar getal via het waarschuwingspictogram.
Als je in Excel vanuit de csv moet beginnen
Is een omgezette werkmap geen optie, dubbelklik dan niet op de csv maar importeer hem, en zet de kwetsbare kolommen op tekst voordat er iets geladen wordt. In de huidige Excel voor Microsoft 365 gaat dat via Gegevens > Van tekst/CSV > Gegevens transformeren: verwijder de automatische stap Type gewijzigd, zet de ID-kolommen op tekst en laad de gegevens. De handleiding csv-bestand importeren in Excel beschrijft dit uitgebreid, net als de oudere wizard Tekst importeren.
Recente builds van Excel voor Microsoft 365 en Excel 2024 hebben in de gegevensopties ook instellingen voor automatische gegevensconversie, die kunnen voorkomen dat voorloopnullen, lange getallen, E-notatie en tekst die op een datum lijkt worden omgezet. Welke instellingen er zijn en hoe ze heten, hangt af van versie en platform, en ze gelden alleen voor je eigen Excel, niet voor dat van een collega.
Wat de waarden niet beschermt
- Aanhalingstekens rond de waarde (
"00412") vertellen een csv-lezer alleen waar een waarde begint en eindigt. Excel zet getallen tussen aanhalingstekens gewoon om. - Een UTF-8-bytevolgordemarkering (BOM) helpt Excel om letters als é, ë en ï en andere schriften goed te lezen. Over celtypen zegt ze niets.
- De kolom na het openen als tekst opmaken komt te laat, want de omzetting is dan al gebeurd.
- Formule-omhulsels zoals
="00412"werken alleen waar een spreadsheet formules uitrekent. Andere csv-lezers, databases en scripts zien de letterlijke tekst="00412", zodat de gegevens in het bestand niet langer het ID zijn. - Een apostrof vooraan (
'00412) is geen formule: getypt in Excel markeert hij de invoer als tekst en wordt hij niet getoond. In een csv-bestand is het echter gewoon een teken, en andere programma's krijgen'00412als waarde. - Een echte tekstcel in een xlsx bevat de kale waarde
00412zonder extra tekens. Dat schrijft de converter, dus ViewCSV voegt geen omhulsels en geen apostrofs toe.
Grenzen
De converter verwerkt bestanden tot 25 MB, 100.000 rijen, 250 kolommen en 2 miljoen cellen, met één werkblad per werkmap. Een bestand dat al met afgeronde ID's of verdwenen nullen is opgeslagen, wordt door omzetten niet hersteld; exporteer het opnieuw uit het bronsysteem. De tests van ViewCSV controleren de celtypen in de gemaakte xlsx met een onafhankelijke lezer; hoe een bepaalde Excel-versie ze op het scherm opmaakt, kan verschillen.
Bronnen
Documentatie van Microsoft, in onze eigen woorden samengevat. Menunamen kunnen in jouw Excel-versie anders zijn.