Χωρίς μεταφόρτωση, 100% τοπικά, χωρίς λογαριασμό

Άρθρο

Γιατί το Excel αλλοιώνει τα αρχεία CSV σας

Ένας αριθμός ασθενή που ξεκινά με τρία μηδενικά. Ένα γονίδιο με το όνομα SEPT2. Ένας δεκαεξαψήφιος αριθμός λογαριασμού. Ανοίξτε οποιοδήποτε από αυτά σε λογιστικό φύλλο ως απλό αρχείο CSV και ο εισαγωγέας του Excel δεν τα εμφανίζει απλώς, τα ξαναγράφει: τα μηδενικά εξαφανίζονται, το όνομα του γονιδίου γίνεται ημερομηνία, και ο αριθμός λογαριασμού χάνει τα τελευταία του ψηφία. Τίποτα από αυτά δεν είναι ακριβώς σφάλμα, είναι αυτό που συμβαίνει όταν ένας μαντευτής αριθμών-και-ημερομηνιών γενικής χρήσης συναντά κείμενο που απλώς μοιάζει με αριθμό ή ημερομηνία. Δείτε τι πραγματικά συμβαίνει σε ένα αρχείο CSV τη στιγμή που το ανοίγει το Excel, και πώς να το σταματήσετε πριν συμβεί.

Τα αρχικά μηδενικά εξαφανίζονται

Πληκτρολογήστε 02134 σε ένα κελί και ο προεπιλεγμένος τύπος στήλης του Excel, Γενικά, το διαβάζει ως αριθμό και αφαιρεί το αρχικό μηδενικό: 2134. Αυτό επηρεάζει κάθε κωδικό που αποθηκεύεται ως ψηφία αλλά δεν είναι πραγματικά ποσότητα, ταχυδρομικοί κωδικοί ΗΠΑ, γαλλικοί ταχυδρομικοί κωδικοί, αριθμοί υπαλλήλων ή τιμολογίων, αριθμοί τηλεφώνου. Τεχνικά δεν χάνεται τίποτα από το υποκείμενο αρχείο CSV, το κείμενο δίπλα στο κελί παραμένει αμετάβλητο, μέχρι να αποθηκεύσετε το βιβλίο εργασίας, οπότε το Excel ξαναγράφει ό,τι εμφάνιζε, και τα μηδενικά χάνονται οριστικά. Η λύση είναι να πείτε στο Excel ότι η στήλη είναι κείμενο πριν προλάβει να μαντέψει: μέσω Δεδομένα > Από κείμενο/CSV (ή Λήψη δεδομένων > Από αρχείο) μπορείτε να ορίσετε ρητά τον τύπο δεδομένων κάθε στήλης, ή να προσθέσετε μια απόστροφο πριν από μια τιμή σε ένα μεμονωμένο κελί για να επιβάλετε κείμενο.

Ο τύπος στήλης Γενικά του Excel διαβάζει το κείμενο 02134 ως αριθμό και αφαιρεί το αρχικό μηδενικό για να εμφανίσει 2134

Το κείμενο γίνεται ημερομηνίες χωρίς προειδοποίηση

Ο ίδιος μαντευτής αναζητά επίσης κείμενο σε μορφή ημερομηνίας. Ένα κελί που περιέχει MAR1 ή SEPT2, διαβασμένο ως 1η Μαρτίου ή 2 Σεπτεμβρίου, μετατρέπεται σιωπηλά σε τιμή ημερομηνίας και αναμορφώνεται, χωρίς καμία προειδοποίηση. Αυτό δεν είναι υποθετικό: το 2020 η Επιτροπή Ονοματολογίας Γονιδίων HUGO μετονόμασε περίπου 27 ανθρώπινα γονιδιακά σύμβολα, συμπεριλαμβανομένων των SEPT2 και MARCH1, συγκεκριμένα επειδή το λογισμικό λογιστικών φύλλων συνέχιζε να τα μετατρέπει σε ημερομηνίες κάθε φορά που ανοιγόταν ένα σύνολο δεδομένων, ένα πρόβλημα αρκετά σοβαρό ώστε μια έρευνα του 2016 σε άρθρα γονιδιωματικής να βρει τέτοια σφάλματα αυτόματης διόρθωσης σε περίπου ένα στις πέντε δημοσιεύσεις που περιλάμβαναν συμπληρωματικά αρχεία Excel. Το μάθημα γενικεύεται πέρα από ονόματα γονιδίων: κάθε σύντομος αλφαριθμητικός κωδικός που τυχαίνει να μοιάζει με ημέρα και μήνα κινδυνεύει τη στιγμή που κάποιος ανοίξει το CSV σας σε λογιστικό φύλλο, όχι μόνο το δικό σας.

Οι πολύ μεγάλοι αριθμοί χάνουν τα τελευταία τους ψηφία

Το Excel αποθηκεύει κάθε αριθμό ως τιμή κινητής υποδιαστολής με ακρίβεια 15 σημαντικών ψηφίων, ένα όριο που η Microsoft τεκμηριώνει άμεσα. Ένας δεκαεξαψήφιος αριθμός κάρτας ή λογαριασμού όπως 4111111111111111 στρογγυλοποιείται για να χωρέσει, οπότε το τελευταίο ψηφίο ή δύο γίνονται σιωπηλά μηδέν και η τιμή δεν είναι πια αυτή που πληκτρολογήσατε. Η μορφοποίηση του κελιού μετά δεν θα επαναφέρει τα ψηφία που λείπουν, επειδή ο υποκείμενος αποθηκευμένος αριθμός έχει ήδη στρογγυλοποιηθεί· η μόνη λύση είναι να εισαγάγετε τη στήλη ως κείμενο, ή να προσθέσετε μια απόστροφο πριν την τιμή, πριν το Excel τη μεταχειριστεί ποτέ ως αριθμό.

Το Excel κρατά μόνο 15 σημαντικά ψηφία ενός αριθμού: η 16ψήφια τιμή 4111111111111111 στρογγυλοποιείται και το τελευταίο της ψηφίο γίνεται μηδέν

Το κείμενο με τόνους γίνεται ακατάληπτο

Η κωδικοποίηση είναι ξεχωριστό είδος αστοχίας από την αυτόματη διόρθωση. Ένα αρχείο CSV χωρίς σήμα σειράς byte είναι απλά bytes· αν αποθηκεύτηκε ως UTF-8, το Excel στα Windows τυπικά θα το ανοίξει υποθέτοντας αντ' αυτού τη δική του κωδικοσελίδα συστήματος, οπότε τα γράμματα με τόνους, τα σύμβολα νομισμάτων και τα emoji βγαίνουν ως ακατάληπτοι χαρακτήρες, μια συμβολοσειρά όπως café εμφανίζεται ως κάτι πιο κοντά στο café. Ο ασφαλής δρόμος όταν παράγετε ένα CSV για το Excel είναι να το αποθηκεύσετε ως CSV UTF-8 ή να προσθέσετε σήμα σειράς byte UTF-8· ο ασφαλής δρόμος όταν χρησιμοποιείτε ένα είναι να το εισαγάγετε μέσω Δεδομένα > Από κείμενο/CSV, που σας αφήνει να επιλέξετε ρητά την κωδικοποίηση πηγής αντί να εμπιστευτείτε ένα διπλό κλικ να μαντέψει σωστά.

Μετακίνηση δεδομένων μεταξύ μορφών χωρίς να τα ανοίξετε στο Excel

Τίποτα από αυτά δεν είναι πραγματικά σφάλμα του Excel, είναι αυτό για το οποίο είναι φτιαγμένος ο μαντευτής αριθμών-και-ημερομηνιών ενός λογιστικού φύλλου, και ισχύει όποτε ανοίγεται το αρχείο, όχι μόνο στο Excel. Ο ασφαλέστερος τρόπος να αναδιαμορφώσετε ένα αρχείο CSV ή να ελέγξετε ότι μια στήλη πράγματι παραμένει κείμενο πριν φτάσει σε οποιοδήποτε λογιστικό φύλλο είναι να δουλέψετε πάνω του απευθείας: ο μετατροπέας δεδομένων μας αναλύει το CSV με έναν τυπικό αναλυτή που αναγνωρίζει εισαγωγικά και ποτέ δεν επανερμηνεύει τον τύπο μιας τιμής, οπότε ένας ταχυδρομικός κωδικός ή ένα όνομα γονιδίου παραμένει ακριβώς το κείμενο που δώσατε. Τρέχει εξ ολοκλήρου στο πρόγραμμα περιήγησής σας, τίποτα από όσα επικολλάτε δεν ανεβαίνει πουθενά. Αυτό όμως προστατεύει μόνο το βήμα μετατροπής: αν η έξοδος πρόκειται ακόμα να ανοιχτεί σε λογιστικό φύλλο αργότερα, σημειώστε τις ευαίσθητες στήλες ως κείμενο και εκεί.

Εργαλεία αυτού του άρθρου

Συχνές ερωτήσεις

Πώς σταματώ το Excel από το να αφαιρεί τα αρχικά μηδενικά από ένα CSV;

Μην ανοίγετε το αρχείο με διπλό κλικ. Εισαγάγετέ το αντ' αυτού μέσω Δεδομένα > Από κείμενο/CSV (ή Λήψη δεδομένων), που δείχνει έναν επιλογέα τύπου δεδομένων στήλη προς στήλη· ορίστε τη στήλη ταχυδρομικού κωδικού, ID ή τηλεφώνου σε Κείμενο πριν ολοκληρώσετε την εισαγωγή. Μια γρήγορη διόρθωση ανά κελί είναι να πληκτρολογήσετε μια απόστροφο πριν την τιμή, όπως '02134, που επιβάλλει κείμενο χωρίς να αλλάξει τι εμφανίζεται.

Γιατί το Excel μετέτρεψε το ID ή τον κωδικό μου σε ημερομηνία;

Ο τύπος στήλης Γενικά του Excel αναζητά ενεργά κείμενο σε μορφή ημερομηνίας, μοτίβα όπως μια σύντομη λέξη συν έναν αριθμό, ή δύο αριθμούς χωρισμένους με παύλα ή κάθετο, και μετατρέπει οτιδήποτε ταιριάζει, χωρίς να ζητά καμία επιβεβαίωση. Αυτό ακριβώς ανάγκασε τη μετονομασία γονιδιακών συμβόλων όπως τα SEPT2 και MARCH1 το 2020. Εισαγάγετε τη στήλη ως Κείμενο, με τον ίδιο τρόπο όπως για τα αρχικά μηδενικά, για να σταματήσετε τη μαντεψιά πριν συμβεί.

Η μετατροπή του CSV μου με άλλο τρόπο αποφεύγει εντελώς αυτά τα προβλήματα;

Τα αποφεύγει για εκείνο το βήμα μετατροπής, όχι για πάντα. Ένας αναλυτής που μεταχειρίζεται κάθε πεδίο ως απλό κείμενο, όπως ο μετατροπέας δεδομένων μας, δεν θα ξαναγράψει έναν ταχυδρομικό κωδικό ή ένα όνομα γονιδίου ενώ μετατρέπει ένα CSV σε JSON. Αλλά αν η έξοδος καταλήξει τελικά να ανοιχτεί σε λογιστικό φύλλο αργότερα, από εσάς ή από όποιον την παραλάβει, ο δικός του εισαγωγέας εκείνου του προγράμματος παίρνει άλλη μια ευκαιρία να επανερμηνεύσει τις τιμές, οπότε οι ευαίσθητες στήλες πρέπει να σημειωθούν ως κείμενο και εκεί.

Πηγές