Nessun upload, 100% locale, nessun account

Articolo

Perché Excel rovina i tuoi file CSV

Un ID paziente che inizia con tre zeri. Un gene chiamato SEPT2. Un numero di conto a sedici cifre. Apri uno qualsiasi di questi in un foglio di calcolo come semplice file CSV e l'importatore di Excel non si limita a mostrarli, li riscrive: gli zeri spariscono, il nome del gene diventa una data, e il numero di conto perde le sue ultime cifre. Nulla di tutto questo è esattamente un bug, è ciò che succede quando un indovinatore generico di numeri e date incontra testo che sembra solo un numero o una data. Ecco cosa succede davvero a un file CSV nel momento in cui Excel lo apre, e come fermarlo prima che accada.

Gli zeri iniziali spariscono

Digita 02134 in una cella ed Excel, con il tipo di colonna predefinito Generale, lo legge come un numero e scarta lo zero iniziale: 2134. Questo colpisce qualsiasi codice memorizzato come cifre ma che non è davvero una quantità: codici postali statunitensi, codici postali francesi, numeri di dipendente o di fattura, numeri di telefono. Tecnicamente non si perde nulla dal file CSV sottostante, il testo accanto alla cella resta invariato, finché non salvi la cartella di lavoro, momento in cui Excel riscrive quello che mostrava, e gli zeri spariscono per sempre. La soluzione è dire a Excel che la colonna è testo prima che abbia la possibilità di indovinare: tramite Dati > Da testo/CSV (o Ottieni dati > Da file) puoi impostare esplicitamente il tipo di dati di ogni colonna, oppure aggiungere un apostrofo prima di un valore in una singola cella per forzare il testo.

Il tipo di colonna Generale di Excel che legge il testo 02134 come un numero e scarta lo zero iniziale mostrando 2134

Il testo diventa data senza chiedere

Lo stesso indovinatore cerca anche testo con forma di data. Una cella contenente MAR1 o SEPT2, letta come 1 marzo o 2 settembre, viene silenziosamente convertita in un valore data e riformattata, senza alcun avviso mostrato. Non è un'ipotesi: nel 2020 lo HUGO Gene Nomenclature Committee ha rinominato circa 27 simboli genici umani, tra cui SEPT2 e MARCH1, specificamente perché il software di fogli di calcolo continuava a trasformarli in date ogni volta che un set di dati veniva aperto, un problema abbastanza serio che un'indagine del 2016 su articoli di genomica ha trovato errori di autocorrezione come questo in circa un articolo su cinque tra quelli che includevano file Excel supplementari. La lezione si estende oltre i nomi dei geni: qualsiasi breve codice alfanumerico che assomiglia a un giorno e un mese è a rischio nel momento in cui qualcuno apre il tuo CSV in un foglio di calcolo, non solo il tuo.

I numeri molto lunghi perdono le ultime cifre

Excel memorizza ogni numero come valore in virgola mobile con 15 cifre significative di precisione, un limite che Microsoft documenta direttamente. Un numero di carta o di conto a sedici cifre come 4111111111111111 viene arrotondato per adattarsi, quindi l'ultima cifra o le ultime due diventano silenziosamente zero e il valore non è più quello che avevi digitato. Formattare la cella in seguito non riporterà indietro le cifre mancanti, perché il numero memorizzato sottostante è già stato arrotondato; l'unica soluzione è importare la colonna come testo, o anteporre un apostrofo al valore, prima che Excel lo tratti mai come numero.

Excel mantiene solo 15 cifre significative di un numero: il valore a 16 cifre 4111111111111111 viene arrotondato e la sua ultima cifra diventa zero

Il testo accentato diventa incomprensibile

La codifica è una modalità di errore separata dall'autocorrezione. Un file CSV senza indicatore di ordine dei byte è composto da byte semplici; se è stato salvato come UTF-8, Excel su Windows di solito lo apre assumendo la codepage propria del sistema al suo posto, quindi lettere accentate, simboli di valuta ed emoji escono come testo incomprensibile, una stringa come caffè che appare come qualcosa più vicino a caffè. Il percorso sicuro quando si produce un CSV per Excel è salvarlo come CSV UTF-8 o aggiungere un indicatore di ordine dei byte UTF-8; il percorso sicuro quando lo si consuma è importarlo tramite Dati > Da testo/CSV, che permette di scegliere esplicitamente la codifica sorgente invece di fidarsi che un doppio clic indovini correttamente.

Spostare dati tra formati senza aprirli in Excel

Nulla di tutto questo è davvero un bug di Excel, è ciò che l'indovinatore di numeri e date di un foglio di calcolo è costruito per fare, e si applica comunque il file venga aperto, non solo in Excel. Il modo più sicuro per rimodellare un file CSV o verificare che una colonna resti davvero testo prima che raggiunga un foglio di calcolo è lavorarci direttamente: il nostro convertitore di dati analizza il CSV con un parser standard consapevole delle virgolette e non reinterpreta mai il tipo di un valore, quindi un codice postale o un nome di gene resta esattamente il testo che hai fornito. Gira interamente nel tuo browser, nulla di ciò che incolli viene caricato da nessuna parte. Questo però protegge solo il passaggio di conversione: se l'output verrà comunque aperto in un foglio di calcolo in seguito, marca anche lì come testo le colonne sensibili.

Strumenti citati in questo articolo

Domande frequenti

Come impedisco a Excel di rimuovere gli zeri iniziali da un CSV?

Non aprire il file con un doppio clic. Importalo invece tramite Dati > Da testo/CSV (o Ottieni dati), che mostra un selettore del tipo di dati colonna per colonna; imposta la colonna del codice postale, ID o numero di telefono su Testo prima di completare l'importazione. Una correzione rapida per singola cella è digitare un apostrofo prima del valore, come '02134, che forza il testo senza cambiare ciò che viene visualizzato.

Perché Excel ha trasformato il mio ID o codice in una data?

Il tipo di colonna Generale di Excel cerca attivamente testo con forma di data, pattern come una breve parola più un numero, o due numeri separati da un trattino o una barra, e converte tutto ciò che corrisponde, senza chiedere conferma. È esattamente questo che ha costretto a rinominare simboli genici come SEPT2 e MARCH1 nel 2020. Importa la colonna come Testo, allo stesso modo degli zeri iniziali, per fermare l'ipotesi prima che avvenga.

Convertire il mio CSV in un altro modo evita del tutto questi problemi?

Li evita per quel passaggio di conversione, non per sempre. Un parser che tratta ogni campo come testo semplice, come il nostro convertitore di dati, non riscriverà un codice postale o un nome di gene mentre trasforma un CSV in JSON. Ma se l'output finisce comunque aperto in un foglio di calcolo in seguito, da te o da chi lo riceve, l'importatore di quel programma ha un'altra occasione di reinterpretare i valori, quindi le colonne sensibili vanno marcate come testo anche lì.

Fonti