Makale
Excel CSV dosyalarınızı neden bozar
Üç sıfırla başlayan bir hasta kimliği. SEPT2 adında bir gen. On altı basamaklı bir hesap numarası. Bunlardan herhangi birini düz bir CSV dosyası olarak bir hesap tablosunda açın, Excel'in içe aktarıcısı onları sadece göstermekle kalmaz, yeniden yazar: sıfırlar kaybolur, gen adı bir tarihe dönüşür ve hesap numarası son birkaç basamağını kaybeder. Bunların hiçbiri tam olarak bir hata değildir, genel amaçlı bir sayı ve tarih tahmincisinin yalnızca bir sayı veya tarihe benzeyen metinle karşılaştığında olan şeydir. Excel bir CSV dosyasını açtığı anda gerçekte ne olduğu ve bunu gerçekleşmeden önce nasıl durduracağınız burada.
Baştaki sıfırlar kaybolur
Bir hücreye 02134 yazın, Excel'in varsayılan sütun türü Genel, bunu bir sayı olarak okur ve baştaki sıfırı düşürür: 2134. Bu, basamak olarak saklanan ama gerçekte bir miktar olmayan her koda çarpar: ABD posta kodları, Fransız posta kodları, çalışan veya fatura numaraları, telefon numaraları. Teknik olarak, çalışma kitabını kaydedene kadar, alttaki CSV dosyasından hiçbir şey kaybolmaz, hücrenin yanındaki metin değişmeden kalır; ama o noktada Excel gösterdiği her neyse geri yazar ve sıfırlar sonsuza dek gitmiştir. Çözüm, Excel'e tahmin etme şansı bulmadan önce sütunun metin olduğunu söylemektir: Veri > Metinden/CSV'den (veya Veri Al > Dosyadan) aracılığıyla her sütunun veri türünü açıkça ayarlayabilir, ya da metni zorlamak için tek bir hücrede değerden önce bir kesme işareti ekleyebilirsiniz.

Metin sorulmadan tarihe dönüşür
Aynı tahminci, tarih biçimli metni de arar. MAR1 veya SEPT2 içeren bir hücre, 1 Mart veya 2 Eylül olarak okunur, hiçbir uyarı gösterilmeden sessizce bir tarih değerine dönüştürülür ve yeniden biçimlendirilir. Bu varsayımsal değildir: 2020'de HUGO Gen Adlandırma Komitesi, tam olarak hesap tablosu yazılımlarının bir veri kümesi her açıldığında bunları tarihe dönüştürmeye devam etmesi yüzünden, SEPT2 ve MARCH1 dahil yaklaşık 27 insan gen sembolünü yeniden adlandırdı; bu, 2016'daki bir genomik makaleler araştırmasının, ek Excel dosyaları içeren yayınların kabaca beşte birinde bunun gibi otomatik düzeltme hataları bulacak kadar ciddi bir sorundu. Ders, gen adlarının ötesine genellenir: bir gün ve aya benzeyen kısa herhangi bir alfasayısal kod, birisi CSV'nizi bir hesap tablosunda açtığı anda risk altındadır, yalnızca sizinkinde değil.
Çok uzun sayılar son basamaklarını kaybeder
Excel her sayıyı 15 basamaklık anlamlı hassasiyetle kayan noktalı bir değer olarak saklar, bu Microsoft'un doğrudan belgelediği bir sınırdır. 4111111111111111 gibi on altı basamaklı bir kart veya hesap numarası, sığmak için yuvarlanır, bu yüzden son bir veya iki basamak sessizce sıfıra döner ve değer artık yazdığınız değer değildir. Hücreyi daha sonra biçimlendirmek eksik basamakları geri getirmez, çünkü altta saklanan sayı zaten yuvarlanmıştır; tek çözüm, Excel onu bir sayı olarak ele almadan önce sütunu metin olarak içe aktarmak veya değerin başına bir kesme işareti eklemektir.

Aksanlı metin anlamsız karakterlere dönüşür
Kodlama, otomatik düzeltmeden ayrı bir hata türüdür. Bayt sırası işareti olmayan bir CSV dosyası düz baytlardır; UTF-8 olarak kaydedildiyse, Windows'ta Excel genellikle bunun yerine sistemin kendi kod sayfasını varsayarak açar, bu yüzden aksanlı harfler, para birimi sembolleri ve emoji, café gibi bir dizgenin café'ye daha yakın bir şey olarak çıktığı mojibake haline gelir. Excel için bir CSV üretirken güvenli yol, onu CSV UTF-8 olarak kaydetmek veya bir UTF-8 bayt sırası işareti eklemektir; birini tüketirken güvenli yol, çift tıklamanın doğru tahmin etmesine güvenmek yerine kaynak kodlamayı açıkça seçmenizi sağlayan Veri > Metinden/CSV'den aracılığıyla içe aktarmaktır.
Veriyi Excel'de açmadan formatlar arasında taşımak
Bunların hiçbiri gerçekten bir Excel hatası değildir, bir hesap tablosunun sayı ve tarih tahmincisinin yapmak üzere tasarlandığı şeydir ve dosya nasıl açılırsa açılsın geçerlidir, yalnızca Excel'de değil. Bir CSV dosyasını yeniden şekillendirmenin veya bir sütunun herhangi bir hesap tablosuna ulaşmadan önce gerçekten metin olarak kaldığını kontrol etmenin en güvenli yolu, doğrudan üzerinde çalışmaktır: Veri Dönüştürücümüz, CSV'yi standart, tırnak farkındalı bir ayrıştırıcıyla ayrıştırır ve bir değerin türünü asla yeniden yorumlamaz, bu yüzden bir posta kodu veya gen adı tam olarak verdiğiniz metin olarak kalır. Tamamen tarayıcınızda çalışır, yapıştırdığınız hiçbir şey hiçbir yere yüklenmez. Ancak bu yalnızca dönüştürme adımını korur: çıktı daha sonra hâlâ bir hesap tablosunda açılacaksa, hassas sütunları orada da metin olarak işaretleyin.
Bu makaledeki araçlar
Sıkça sorulan sorular
Excel'in bir CSV'den baştaki sıfırları kaldırmasını nasıl durdururum?
Dosyayı çift tıklayarak açmayın. Bunun yerine, sütun sütun bir veri türü seçici gösteren Veri > Metinden/CSV'den (veya Veri Al) aracılığıyla içe aktarın; içe aktarmayı bitirmeden önce posta kodu, kimlik veya telefon numarası sütununu Metin olarak ayarlayın. Hızlı bir hücre başına çözüm, değerden önce '02134 gibi bir kesme işareti yazmaktır, bu gösterileni değiştirmeden metni zorlar.
Excel neden kimliğimi veya kodumu bir tarihe dönüştürdü?
Excel'in Genel sütun türü, kısa bir kelime artı bir sayı veya bir tire ya da eğik çizgiyle ayrılmış iki sayı gibi tarih biçimli metni aktif olarak arar ve hiçbir onay istemeden eşleşen her şeyi dönüştürür. Bu, tam olarak 2020'de SEPT2 ve MARCH1 gibi gen sembollerinin yeniden adlandırılmasını zorlayan şeydir. Tahmini gerçekleşmeden önce durdurmak için sütunu, baştaki sıfırlarda olduğu gibi Metin olarak içe aktarın.
CSV'mi başka bir şekilde dönüştürmek bu sorunları tamamen önler mi?
Bunları o dönüştürme adımı için önler, sonsuza dek değil. Veri Dönüştürücümüz gibi, her alanı düz metin olarak ele alan bir ayrıştırıcı, bir CSV'yi JSON'a dönüştürürken bir posta kodunu veya gen adını yeniden yazmaz. Ama çıktı daha sonra, sizin tarafınızdan veya onu alan kişi tarafından, yine de bir hesap tablosunda açılırsa, o programın kendi içe aktarıcısı değerleri yeniden yorumlamak için bir şans daha elde eder, bu yüzden hassas sütunların orada da metin olarak işaretlenmesi gerekir.