Excel'in belirli metin değerlerini otomatik olarak tarihlere dönüştürmesini durdurma


526

Herkes belirli bir alan için csv benim ekleyebileceğim bir jeton olup olmadığını biliyor böylece Excel onu bir tarihe dönüştürmek için denemek olmaz?

Uygulamamdan bir .csv dosyası yazmaya çalışıyorum ve değerlerden biri, Excel'in otomatik olarak metinden bir tarihe dönüştürdüğü bir tarihe benziyor. Tüm metin alanlarını (bir tarihe benzeyen de dahil olmak üzere) çift tırnak içine koyarak denedim, ancak hiçbir etkisi yoktur.


120
Evet, 10000 kullanıcı adına sahip bir dosyada "nisan25" gibi bir tarihe dönüştürülen ve sonunda "apr-25" olarak işlenen, "kullanıcı adı bulunamadı" hatasıyla sonuçlanan gibi Excel'in tek bir değeri bir tarihe, 4000 kaydı dosyaya dönüştürmesini ve geri kalan metni bırakmasını bekleyin. Ne topal CSV okuma kodu; gerçekten, ilk X kayıtlarına dayanan türü tahmin edip onunla uyumlu değil mi? Veya tüm metni bırakın. Eğer "genel" olarak biçimlendirilmesini istiyorsam, daha sonra seçebilirim. En başından itibaren "genel" olduğu varsayılarak metin verilerinin bozulması tehlikeye girer.
Triynko

Kopyala ve yapıştır işlemi yaparken sorun yaşadım. Tüm çözümü aramak için, hedef sütunu seçin, bir dize / metin biçimine ayarlayın, ardından kaynağı kopyalayın ve 'yalnızca değerlerle' özel bir yapıştırma (sağ tıklama) yapın. Değerleri korur, tarih biçimlendirmesi yok.
Kai Noack

84
Sadece Excel'in bu davranışının ciddi bir kusur olduğunu düşündüğümü eklemek istiyorum. Excel'e aktarmadan önce csv dosyasının içeriğini değiştirme lüksüne sahip olmayan tüm insanlar ne olacak? Ya da CSV dosyasında birçok değişiklik yaptıktan sonra bu sorunu anlamayan insanlar ne olacak? Excel'deki CSV dosyalarıyla çalışmayı dağınık hale getirir.
Ocak'ta soygun

DatatableJS kullanıyor musunuz? Çünkü bunu zaten bu API ile nasıl yapacağımı biliyorum. Buna ihtiyacınız varsa burada bulabilirsiniz: stackoverflow.com/a/36142043/4241058
Richard Rebeco

11
Dosya -> Aç -> İçe Aktarma'yı kullanmak için tüm bu çözümler bizim için iyi çalışıyor, çünkü ne yaptığımızı biliyoruz, ancak dosya sisteminde / içinden / anında gezinmeyi anlamayan dünyanın diğer% 99,5'i için işe yaramaz. uygulama. Bir dosya görüyorlar, kullanmak için üzerine çift tıklıyorlar. İnsanlara ofis uygulamalarının nasıl kullanılacağını ve söz konusu ofis uygulamaları için veri üreten kod yazmanın nasıl öğretildiğini ve / application / komutunu kullanarak dosyanın kullanılacağını aramak neredeyse herkesin ötesinde.
user2624417

Yanıtlar:


355

Ben çift tırnak önce bir '=' koymak istediğini başaracak bulduk. Verileri metin olmaya zorlar.

Örneğin. = "2008-10-03", = "daha fazla metin"

EDIT (diğer yazılara göre) : Jeffiekins tarafından belirtilen Excel 2007 hatası nedeniyle, Andrew tarafından önerilen çözümü kullanmalısınız :"=""2008-10-03"""


12
Bu cevabı kabul ediyorum çünkü 1) csv dosyam sadece Excel tarafından kullanılacak ve 2) bu muhasebe içindir ve başlangıçta bir 'olamaz ve 3) onların yapmasını istemiyorum bir ithalat. Sadece csv'yi açmalarını istiyorum.

5
Harika! Ama yüzünden Excel 2007 hata kullanmak Andrew tarafından önerilen çözüm : "=""2008-10-03""". Gönderi güncellendi.
TMS

1
Metin çok uzunsa, Excel 2010'da bu benim için işe yaramaz :(
steve

7
Bunun nedeni, Excel'in "=" karakterini gördüğünde, ifadeyi izleyen ifadeyi değerlendirmeye karar vermesidir. Bu durumda, ifade basitçe bir dize değişmezidir ve dize değişmezinin değeri dizenin içeriğidir. Böylece tırnak işaretleri sihirli bir şekilde kaybolur. CSV içe aktardıktan sonra = 1 + 2 + 3 ekleyebilir ve 6 değerini alabilirsiniz. İçe aktarma işleminde formülün kendisi yok edilmez.
lokori

4
Bu yaklaşımla ilgili büyük bir sorun var - eğer dosyayı excel'de açar ve düzenler ve sonra kaydedip tekrar açarsanız tüm bu "kaybolur
ACV

150

Bunun eski bir soru olduğunu biliyorum, ama sorun yakında bitmeyecek. CSV dosyalarının çoğu programlama dilinden kolayca oluşturulabilir, oldukça küçük, düz metin düzenleyici ve her yerde bulunan bir kullanıcı tarafından okunabilir.

Sorun sadece metin alanlarındaki tarihlerle değil , aynı zamanda sayısal bir şey de metinden sayılara dönüştürülür. Bunun sorunlu olduğu birkaç örnek:

  • Posta kodu
  • Telefon numaraları
  • devlet kimlik numaraları

hangi bazen olabilir sayısal dönüştürüldüğünde atılır olsun bir veya birden fazla sıfır (0) ile başlar. Veya değer, matematiksel işleçlerle karıştırılabilen karakterler içerir (tarihlerdeki gibi: /, -).

Daha önce de belirtildiği gibi "prepending =" çözümünün ideal olmayabileceğini düşünebileceğim iki durum ,

  • dosyanın MS Excel dışında bir programa aktarılabileceği durumlarda (MS Word'ün Adres Mektup Birleştirme işlevi akla gelir),
  • burada insan tarafından okunabilirlik önemli olabilir.

Bu sorunu çözmek için kesmek

Değerden birine sayısal olmayan ve / veya tarih dışı bir karakter eklenirse / eklenirse, değer metin olarak algılanır ve dönüştürülmez. Yazdırılmayan bir karakter, görüntülenen değeri değiştirmeyeceğinden iyi olur. Ancak, düz eski boşluk karakteri (\ s, ASCII 32), Excel tarafından kesildiğinden ve değer hala dönüştürüldüğünden bunun için çalışmaz. Ancak , iyi çalışacak başka yazdırma ve yazdırma dışı alan karakterleri de vardır. Bununla birlikte en kolayı , basit sekme karakterini (\ t, ASCII 9) eklemektir (sonra ekleyin).

Bu yaklaşımın faydaları:

  • Klavyeden veya hatırlaması kolay ASCII koduyla (9) kullanılabilir,
  • İthalatı rahatsız etmez,
  • Normalde Adres Mektup Birleştirme sonuçlarını rahatsız etmez (şablon düzenine bağlı olarak - ancak normalde yalnızca satırın sonuna geniş bir alan ekler). (Ancak bu bir sorunsa, diğer karakterlere bakın, örneğin sıfır genişlikli alan (ZWSP, Unicode U + 200B)
  • CSV'yi Not Defteri'nde (vb.) görüntülerken büyük bir engel değildir,
  • ve Excel'de (veya Not Defteri vb.) bul / değiştir ile kaldırılabilir.
  • CSV'yi içe aktarmanız gerekmez , ancak CSV'yi Excel'de açmak için çift ​​tıklayabilirsiniz .

Sekmeyi kullanmak istememenizin bir nedeni varsa, uygun başka bir şey için Unicode tablosuna bakın.

Başka seçenek

yeni MS Excel sürümleri tarafından içe aktarma için belirli bir biçimin de kabul edildiği ve .XLS biçimine benzer çok daha fazla seçeneğe izin veren XML dosyaları oluşturmak olabilir, ancak bununla ilgili deneyimim yok.

Yani çeşitli seçenekler var. Gereksinimlerinize / uygulamanıza bağlı olarak, biri diğerinden daha iyi olabilir.


İlave

MS Excel'in daha yeni sürümlerinin (2013+) artık CSV'yi elektronik tablo biçiminde açmadığı söylenmelidir - birinin iş akışında bir tane daha hız artışı, Excel'i daha az kullanışlı hale getiriyor ... En azından, etrafta dolaşmak için talimatlar var. Örneğin bu Stackoverflow: .csv dosyalarını Excel 2013'te nasıl doğru şekilde görüntüleyebilirim? .


6
\tAyrılık karakterime ekledikten sonra önde gelen sıfırları aldım ;... lanet olsun MS Office, bunun neden beni anlaması 2 dakikadan fazla sürdü?
Morten Jensen

2
Tüm değerlerin sonuna \ t eklemek gerçekten hile yapar. Bu çılgın bir çözüm, ancak pratikte iyi çalışıyor. Bunu, eşit '=' formül hilesine tercih ederim, çünkü eski araçların diğer araçlarla çalışmak zor olabilir.
ocroquette

3
Size minnettarlığımı ifade edebilecek yeterli oy yok. Arama ve değiştirme notepad ++ ',' to '\ t, \ t' (ilk ve son sütunları da barındırmak için) bir cazibe gibi çalışır. Teşekkürler.
Asaf

1
MySQL sorgumda (PHP üzerinden CSV çıktısı için), CONCAT ('\ t', column_name) kullandım. Ayrıca hile yaptı. Teşekkürler!
Sadece Düz Yüksek

1
İyi fikir. Ne yazık ki, Sayılar Excel'den biraz "daha akıllı" ve sekme hilesi için düşmez. Gelebileceğim en iyi alternatif, bir lider ', çünkü biraz anlaşılmış ve çok dikkat dağıtıcı değil ... ama görünmez bir şey daha iyi olurdu.
Heath Raftery

101

Jarod'un çözümünü ve Jeffiekins'in gündeme getirdiği konuyu inceleyerek,

"May 16, 2011"

için

"=""May 16, 2011"""

6
Metin belirli bir uzunluktan daha uzunsa Excel 2010'da çalışmaz.
steve

1
@Andrew, "Tarih arasında herhangi bir yerde değer olması gerekiyorsa bu "düzeltme" sorunlara neden olur .
Pacerier

8
FYI, Excel dosyasını kaydederseniz = gider ve bir sonraki açışınızda bir kareye geri
dönersiniz

Deneyimlerim ne steve ne de d512 ile eşleşiyor. Excel 2013'te gelen .csv dosyasında benim için çalışıyor ve .xlsx olarak kaydettikten sonra geri dönmüyor. Herkes bu veri satırını kullanarak test edecek kadar kolay: "806676", "Yok", "41", "=" 16 Mayıs 2011 "" "," 100.00 "," Yanlış "
tbc0

1
@ tbc0 "806676","None","41","=""05-16-2011""","100.00","False"Bunun yerine deneyin ve kaydetme ve yeniden yükleme tireli metni kaybettiğini göreceksiniz.
NetMage

65

Benzer bir sorun vardı ve bu csv dosya içeriğini düzenlemek zorunda kalmadan bana yardımcı olan geçici çözümdür:

Dosyaya ".csv" dışında bir ad verme esnekliğiniz varsa, dosyayı "Myfile.txt" veya "Myfile.csv.txt" gibi bir ".txt" uzantısıyla adlandırabilirsiniz. Sonra Excel'de açtığınızda (sürükle bırak yöntemiyle değil, Dosya-> Aç veya En Son Kullanılan dosyalar listesini kullanarak), Excel size bir "Metin Alma Sihirbazı" sağlayacaktır.

Sihirbazın ilk sayfasında, dosya türü için "Sınırlandırılmış" ı seçin.

Sihirbazın ikinci sayfasında sınırlayıcı olarak "," seçeneğini ve değerlerinizi tırnak işaretleri arasına aldıysanız metin niteleyicisini seçin

Üçüncü sayfada, her sütunu ayrı ayrı seçin ve Excel'in verilerinizle uğraşmasını önlemek için her birine "Genel" yerine "Metin" türünü atayın.

Umarım bu size veya benzer bir sorunu olan birine yardımcı olur!


2
Bu arada, bunu ilk keşfeden ben değilim. risingline.com/use-excel-read-csv-without-reformatting.php Bu web sayfasında ayrıca, her bir türü atamadan önce sihirbazın üçüncü sayfasındaki sütunları bir arada tıklatabileceğiniz yararlı talimatlar bulunur. "Metin".
rainerbit

Bu, tarih değerleri için işe yarayabilir, ancak excel'in sayısal olarak yorumladığı şeyler için işe yaramaz gibi görünüyor. Dizeniz tüm sayılar ve virgülse, "Metin" biçimi bilimsel sayı biçimi olacaktır.
Michael - Clay Shirky

3
bu benim için mükemmel çalıştı ve dosyamda .txt olarak yeniden adlandırılması dışında herhangi bir değişiklik yapılmadı. teşekkür ederim.
Kevin

1
Ne yazık ki, Excel bunu yalnızca ilk 6 sütun için yapmanızı sağlar. Daha fazlasına ihtiyacınız varsa, csv içeriğini kopyalamak, excel dosyası oluşturmak ve boşaltmak, tüm sütunları / satırları seçmek ve türü Metin olarak ayarlamak, ardından içeriği yapıştırmak ve Veri | Metin sütunlara
nachocab

Bu en iyi çözümdür ve cevap olarak işaretlenmelidir.
Rob

28

UYARI: Excel '07 (en azından) hatası (nother) hatası içerir: bir alanın içeriğinde virgül varsa, = "alanını, içeriğini" doğru ayrıştırmaz, aksine virgülden sonraki her şeyi tırnak işareti ne olursa olsun aşağıdaki alan.

İşe yaradığını bulduğum tek geçici çözüm, alan içeriğinin virgül içerdiği zaman = ortadan kaldırmaktır.

Bu, Excel'de tam olarak "doğru" olarak temsil edilmesi imkansız olan bazı alanlar olduğu anlamına gelebilir, ancak şimdiye kadar kimsenin çok şaşırmadığına güveniyorum.


Bunu excel 2007'de test ettim ve benim için doğru çalışıyor. Bununla birlikte, tırnak işaretlerinden önce bir boşluk varsa, virgül doğru ayrıştırılmaz.
Sunny88

8
Bu, RFC 4180'e göre bir hata gibi görünmüyor. Alanı teklif etmenin doğru yolu, tüm alanı alıntılamak ve daha sonra iç tırnakları iki kez alıntılamaktır. Yani "=" "alanı, içerik" "" tools.ietf.org/html/rfc4180
Peter Stephens

2
Eğer @PeterStephens Bu çalışmaz field, contentvardır "onun içinde. Örneğin"=""field, co""ntent"""
Pacerier

1
@Pacerier Muhtemelen katıştırılmış fiyat teklifinin çift tırnak içine alınması gerekir """".
ErikE

@ ErikE'nin önerisinin doğru olduğunu onaylayabilirim. Değere sahip bir alan için 1"2, eğer sen (sadece gibi olacaktır bırakarak aksine bu hileyi kullanmayı tercih "1""2"dosyasında - excel zaten metin olarak ise tedavi etmiş olurdu), yukarı Excel hedefleme CSV dosyası uçları daha sonra nihai doğru dize olmak "=""1""""2""".
Tao

22

C # benim CSV dosyasına yazılacak dize oluştururken ben bu şekilde biçimlendirmek zorunda kaldı:

"=\"" + myVariable + "\""

2
Bu benim için Rails de uyandı. Teşekkürler
Vieenay Siingh

3
Java'da da çalışıyor
Shoyo

Papa Parse kullanarak JavaScript'te benim için çalıştı.
wobsoriano

17

2018

Benim için (ve CSV'yi değiştirmeden ) işe yarayan tek uygun çözüm .

Excel 2010:

  1. Yeni çalışma kitabı oluştur
  2. Veri> Metinden> CSV dosyanızı seçin
  3. Açılır pencerede "Sınırlandırılmış" radyo düğmesini seçin, ardından "İleri>"
  4. Sınırlayıcılar onay kutuları: yalnızca "Virgül" seçeneğini işaretleyin ve diğer seçeneklerin işaretini kaldırın, ardından "İleri>"
  5. "Veri önizleme" de, en sağa kaydırın, sonra shift tuşunu basılı tutun ve son sütunu tıklayın (bu, tüm sütunları seçecektir). Şimdi "Sütun veri formatında" "Metin" radyo düğmesini seçin, sonra "Son" u tıklayın.

Excel office365: (istemci sürümü)

  1. Yeni çalışma kitabı oluştur
  2. Veri> Metinden / CSV'den> CSV dosyanızı seçin
  3. Veri türü algılama> algılama

Not: Excel office365 (web sürümü), bunu yazdığım için bunu yapamayacaksınız.


3
Bu önceden CSV dosyalarını değiştirmeden çalışır, bu yüzden bunun doğru cevap olması gerektiğini düşünüyorum.
Jack

Bu doğru cevap gibi görünüyor. Yüksek umutlarım vardı. Ancak MacOS'ta (office365) TÜM sütunları seçemiyorum : Metin alma sihirbazında gösterilen önizleme penceresinde yalnızca görünür sütunları seçebileceğim yatay bir kaydırma yoktur. Kısa yollar (CMD + A veya başka şeyler) boşuna denedim. "Tespit etme" seçeneği de mevcut değildir. Perişanım.
normanius

Excel office 365'te Dosya, Seçenekler, Veri'yi seçin. Gerekirse eski veri içe aktarma sihirbazlarını göstermek için onay kutuları vardır.
Kurt Schultz

15

Excel 2010'da yeni bir sayfa açın. Veri şeridinde "Dış Verileri Metinden Al" ı tıklayın. CSV dosyanızı seçin ve ardından "Aç" ı tıklayın. Sonrakine tıkla". "Sekme" nin işaretini kaldırın, "Virgül" ün yanına bir onay işareti koyun, ardından "İleri" yi tıklayın. İlk sütunda herhangi bir yeri tıklayın. Üst karakter tuşunu basılı tutarken, son sütunu tıklayana kadar kaydırıcıyı sürükleyin ve ardından üst karakter tuşunu serbest bırakın. "Metin" radyo düğmesini ve ardından "Son" u tıklayın

Tüm sütunlar, tıpkı CSV dosyasında olduğu gibi metin olarak içe aktarılır.


1
Aynı sorunla karşılaştım, ancak @ Rob'un talimatlarını dikkatle takip etmek mükemmel olurdu !. Teşekkür ederim
Milacay

2
Metinden Veri yardımcısı maalesef çok satırlı hücreleri desteklemiyor. Böyle bir çok satırlı metinle karşılaşılırsa, ilk satırdan sonraki tüm satırları yeni satırlara yazar ve tüm içe aktarmayı kırar. Yalnızca CSV dosyasını çift tıklatarak açarsanız satır sonlarını doğru olarak yorumlar. Lanet olsun Microsoft ...
CodeManX

1
Ne yazık ki bu Excel'in rastgele biçimlendirme "yardım" sorununu çözmez - metin DEC1 hala Aralık-01 tarihine değiştirilir . İle aynı metne YYYY-AA-DD GG / AA / YYYY geçiriliyor. :(
Baracus

12

Microsoft Office 2016 sürümünde hala bir sorun, MARC1, MARCH1, SEPT1 vb. Gibi gen adları ile çalışanlarımız için oldukça rahatsız edici. R'de bir ".csv" dosyası oluşturduktan sonra en pratik bulduğum çözüm, daha sonra Excel kullanıcılarıyla açılacak / paylaşılacaktır:

  1. CSV dosyasını metin (not defteri) olarak açma
  2. Kopyalayın (ctrl + a, ctrl + c).
  3. Yeni bir excel sayfasına yapıştırın -tüm metin dizeleri olarak bir sütuna yapıştırır.
  4. Bu sütunu seçin / seçin.
  5. Verilere gidin - "Sütunlara metin ...", açılan pencerede "sınırlandırılmış" ı seçin (sonraki). "Virgül" seçeneğinin işaretli olduğunu kontrol edin (veriyi zaten aşağıdaki sütunlara ayırmayı gösterecektir) (sonraki), bu pencerede istediğiniz sütunu seçebilir ve metin olarak (genel yerine) işaretleyebilirsiniz (Son).

HTH


Manuel çaba da benim için çekici değildi. Bununla birlikte, eldeki her olasılığı tükettikten sonra, bu en sağlam ve güvenilirdi.
Ana Maria Mendes-Pereira

Yine de toplu işleme.
Ana Maria Mendes-Pereira

Bu aslında burada en az iş gerektiren en iyi cevaptır. Keşke dosyayı ayrıştırmamaya zorlamak için bazı seçenekler ayarlayabilirsiniz.
rulolar

Ayrıca o zaman kendisini otomatik deliminate, sekmeleri ile tüm virgül yerine
rulo

10

İlk etapta csv dosyasını oluştururken işte kullandığımız basit yöntem, değerleri biraz değiştirir, böylece tüm uygulamalarda uygun değildir:

CSV'deki tüm değerlere boşluk ekle

Bu alan, "1", "2.3" ve "-2.9e4" gibi sayılardan excel ile çıkarılır, ancak "01/10/1993" gibi tarihlerde ve "TRUE" gibi boolean'lara dönüştürülür. excel'in dahili veri türleri.

Ayrıca okuma sırasında çift tırnak zapped durur, bu yüzden bir csv metin değiştirmenin kusursuz bir yolu excel tarafından değişmeden kalır EĞER "3.1415" gibi bazı metin çift tırnak ile çevrelemek VE tüm dizeyi bir boşluk ile başa, örn. (ne yazacağınızı göstermek için tek tırnak işaretleri kullanarak) '"3.1415". Sonra excel'de her zaman orijinal dize vardır, ancak çift tırnaklarla çevrelenir ve bir boşlukla doldurulur, böylece herhangi bir formülde bulunanları hesaba katmanız gerekir.


Bu benim için çalıştı. 1-1-1 gibi tarihlere otomatik olarak dönüştürülen bazı değerlerim vardı. Belirtildiği gibi boşluk transfer böylece değer değiştirilir, ama ben ayrıştırma yaparken üzerinde bir şerit yapmak benim için çok önemli değil.
jacklin

Alan, artık baştaki sıfırların tarih yorumunu veya soyulmasını önlemek için çalışmaz. Ancak "\xA0"bunun yerine kırılmaz bir boşluk kullanabilirsiniz - bu işe yarayacaktır.
Doin

8

(Excel 2003 varsayalım ...)

Metinden Sütunlara Sihirbazı'nı kullanırken, Adım 3'te sütunların her biri için veri türünü dikte edebilirsiniz. Önizlemedeki sütuna tıklayın ve hatalı çalışan sütunu "Genel" den "Metin" e değiştirin.


8
Kullanıcıyı içe aktarma işlemini kullanmaya zorlayabilirsem bu mükemmel bir seçimdir.

METİN sütunundaki sayılar yine de .csv
dosyasına

8

Bu dosyanın içinde karışıklık olmadan bunu başarmak için biliyorum tek yoludur. Her zamanki gibi Excel'de, başımı masaya saatlerce dövdüğümde öğrendim.

.Csv dosya uzantısını .txt olarak değiştirin; bu, Excel'in açıldığında dosyayı otomatik olarak dönüştürmesini durduracaktır. Bunu nasıl yapacağım: Excel'i boş bir çalışma sayfasına açın, boş sayfayı kapatın, ardından Dosya => Aç'ı tıklayın ve .txt uzantılı dosyayı seçin. Bu, Excel'i dosyayı nasıl yorumlamasını istediğinizle ilgili sorular soracağı "Metin Alma Sihirbazı" nı açmaya zorlar. Önce sınırlayıcınızı (virgül, sekme, vb.) Seçin, sonra (işte önemli kısım) bir dizi sütun sütununu ve biçimlendirmeyi seçin. Dosyada tam olarak ne olduğunu istiyorsanız, "Metin" i seçin ve Excel sınırlayıcılar arasında ne olduğunu gösterecektir.


Bu benim için iyi çalıştı 2015-03-03 Mac 2011 için Excel ile çalışan (sürüm 14.4.8 150116), SO sorusundaki verilerle çalışıyor awk- sorunun Excel'de olduğu tarih benzeri değerlerin yeniden biçimlendirilmesinden kaçının daha awksoru başlığının rağmen.
Jonathan Leffler

4

(EXCEL 2007 ve üstü)

Excel dosyasını kaynak dosyasını düzenlemeden tarih biçimlerini "algılamamak" için zorlama

Ya:

  • dosyayı .txt olarak yeniden adlandırın
  • Bunu yapamazsanız, CSV dosyasını doğrudan excel'de açmak yerine, yeni bir çalışma kitabı oluşturun ve CSV'nizi
    Data > Get external data > From Text
    seçin.

Her iki durumda da, içe aktarma seçenekleriyle karşılaşacaksınız, sadece tarihleri ​​içeren her sütunu seçin ve excel'e "genel" değil "metin" olarak biçimlendirmesini söyleyin.


4

Aynı sorun için ne yaptım her csv değeri önce aşağıdakileri eklemek oldu: "=" "" ve Excel'de dosyayı açmadan önce her CSV değerinden sonra bir çift tırnak. Örneğin, aşağıdaki değerleri ele alalım:

012345,00198475

Excel'de açılmadan önce bunlar şu şekilde değiştirilmelidir:

"="""012345","="""00198475"

Bunu yaptıktan sonra, her hücre değeri Excel'de bir formül olarak görünür ve bu nedenle sayı, tarih vb. Olarak biçimlendirilmez. Örneğin, 012345 değeri şu şekilde görünür:

="012345"

Başka bir yaklaşım da csv'deki sayıyı 1234500198475E-8; bu şekilde Excel'de başka hesaplamalar da mümkün olacaktır.
bert bruynooghe

4

Burada sunulan çözümlerin hiçbiri iyi bir çözüm değildir. Münferit durumlar için işe yarayabilir, ancak yalnızca son ekranı kontrol ediyorsanız. Örneğim: İşim perakendeciye sattıkları ürünlerin listesini üretir. Bu CSV biçimindedir ve bazıları sıfırlarla başlar, üreticiler tarafından belirlenen (kontrolümüz altında değil) parça kodları içerir. Baştaki sıfırları alıp başka bir ürünle eşleşebilirsiniz. Perakende müşteriler, bizim kontrolümüz dışında olan ve müşteri başına farklı olan arka uç işleme programları nedeniyle listeyi CSV biçiminde isterler, bu nedenle CSV dosyalarının biçimini değiştiremeyiz. Ön ekli '=' veya sekme eklenmedi. Ham CSV dosyalarındaki veriler doğrudur; müşteriler bu dosyaları Excel'de açtıklarında sorunlar başlar. Ve birçok müşteri gerçekten bilgisayar meraklısı değildir. Bir e-posta ekini hemen açabilir ve kaydedebilirler. Verileri iki farklı formatta sağlamayı düşünüyoruz: biri Excel Dostu olarak (yukarıda bir TAB ekleyerek önerilen seçenekleri kullanarak, diğeri 'master' olarak kullanmak istiyoruz. Bu arada, elektronik tablolarında neden bazen 'yanlış' veri gördüklerini açıklamaya devam ediyoruz.Microsoft düzgün bir değişiklik yapana kadar, son kullanıcıların nasıl kontrol edeceği konusunda buna uygun bir çözüm göremiyorum dosyaları kullanın. Ancak, bazı müşteriler bunu neden yapmamız gerektiğini anlamayacağından bu arzu edilebilir bir düşünce olabilir. Bu arada e-tablolarında neden bazen 'yanlış' veriler gördüklerini açıklamaya devam ediyoruz. Microsoft düzgün bir değişiklik yapana kadar, son kullanıcıların dosyaları nasıl kullandığı üzerinde herhangi bir kontrolü olmadığı sürece, bunun için uygun bir çözüm görmüyorum. Ancak, bazı müşteriler bunu neden yapmamız gerektiğini anlamayacağından bu arzu edilebilir bir düşünce olabilir. Bu arada e-tablolarında neden bazen 'yanlış' veriler gördüklerini açıklamaya devam ediyoruz. Microsoft düzgün bir değişiklik yapana kadar, son kullanıcıların dosyaları nasıl kullandığı üzerinde herhangi bir kontrolü olmadığı sürece, bunun için uygun bir çözüm görmüyorum.


Verilerinizin solundaki fazladan boşluk önemli değilse, verilerinizin önüne boşluk bırakarak (boşluk bırakmadan) Excel'in sorunlarını düzeltebilirsiniz "\xA0".
Doin

3

Ben bu hafta mükemmel bir yaklaşım gibi görünüyor, bu kongre rastlamak jus var, ama herhangi bir yerde başvuru bulamıyorum. Buna aşina olan var mı? Bunun için bir kaynak gösterebilir misiniz? Saatlerce aramadım ama birinin bu yaklaşımı tanıyacağını umuyorum.

Örnek 1: = ("012345678905") şu şekilde görüntülenir: 012345678905

Örnek 2: = ("1954-12-12") 12/12/1954 değil, 1954-12-12 olarak görüntülenir .


2

Excel değil. Windows formülü, verileri tarih olarak tanır ve otomatik olarak düzeltir. Windows ayarlarını değiştirmeniz gerekiyor.

"Denetim Masası" (-> "Klasik Görünüme Geç") -> "Bölge ve Dil Seçenekleri" -> sekmesi "Bölgesel Seçenekler" -> "Özelleştir ..." -> "Numaralar" sekmesi -> Ve ardından sembolleri değiştirin ne istersen göre.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Bilgisayarınızda çalışır, bu ayarlar örneğin müşterilerinizin bilgisayarında değiştirilmezse veriler yerine tarihleri ​​görürler.


2

Merhaba bende aynı sorun var,

Başka bir CSV dosyası oluşturmak için bu vbscipt yazıyorum. Yeni CSV dosyasında her alanın yazı tipinde bir boşluk olacaktır, bu nedenle excel bunu metin olarak anlayacaktır.

Bu nedenle, aşağıdaki kodu içeren bir .vbs dosyası oluşturursunuz (örneğin Modify_CSV.vbs), kaydedin ve kapatın. Orijinal dosyanızı vbscript dosyanıza sürükleyip bırakın . Aynı konumda dosya adına "SPACE_ADDED" ile yeni bir dosya oluşturur.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

Csv dosyanızı değiştirmeden şunları yapabilirsiniz:

  1. Excel Hücreleri Biçimlendir seçeneğini "metin" olarak değiştirin
  2. Sonra "Metin Alma Sihirbazı" kullanarak csv hücreleri tanımlayın.
  3. İçe aktarıldıktan sonra bu verileri silin
  4. sonra sadece düz metin olarak yapıştır

excel, csv hücrelerinizi otomatik tarih biçimlerini yok sayarak metin olarak biçimlendirir ve ayırır.

Bir tür aptalca çözüm, ancak içe aktarmadan önce csv verilerini değiştirmeyi yener. Andy Baird ve Richard bu yöntemden kaçtılar, ancak birkaç önemli adımı kaçırdılar.


1

Bunun eski bir konu olduğunu biliyorum. Powerershell com nesnesi aracılığıyla office 2013'ü kullanmaya devam eden bu sorunu benim gibi olanlar için opentext yöntemini kullanabilirsiniz . Sorun, bu yöntemin bazen birbirini dışlayan birçok argümana sahip olmasıdır. Bu sorunu çözmek için size sunulan çağırmak-namedparameter yöntemini kullanabilirsiniz bu yazı . Bir örnek

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

Ne yazık ki sadece bu yöntemin hücreler bir çizgi içeren zaman bir şekilde csv ayrıştırma kırdığını keşfettim. Bu csv tarafından desteklenir, ancak microsofts uygulaması hatalıdır. Ayrıca bir şekilde Alman özel karakterleri tespit etmedi. Ona doğru kültürü vermek bu davranışı değiştirmedi. Tüm dosyalar (csv ve script) utf8 kodlaması ile kaydedilir. İlk önce csv hücresini hücreye eklemek için aşağıdaki kodu yazdım.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Ama bu çok yavaş, bu yüzden bir alternatif aradım. Görünüşe göre Excel, bir matrisli bir hücre aralığının değerlerini ayarlamanıza izin verir. Bu yüzden bu blogdaki algoritmayı csv'yi çok dizide dönüştürmek için kullandım.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Yukarıdaki kodu exs'ye herhangi bir csvs dönüştürmesi gerektiği gibi kullanabilirsiniz. Sadece csv yolunu ve alttaki ayırıcı karakteri değiştirin.


Çok karmaşık
rulolar

1

Benim durumumda, R kullanılarak oluşturulan bir csv dosyasında "Sept8" Excel 2013 tarafından "8-Sept" dönüştürüldü. Sorun xlsx biçiminde çıktı dosyasını oluşturmak için xlsx paketindeki write.xlsx2 () işlevi kullanılarak çözüldü istenmeyen dönüşüm olmadan Excel tarafından yüklenebilir. Bu nedenle, size bir csv dosyası verilirse, bu dosyayı R'ye yüklemeyi ve write.xlsx2 () işlevini kullanarak xlsx'e dönüştürmeyi deneyebilirsiniz.


Cevabınızın neden reddedildiğini bilmiyorum. En azından R kullanan insanlar için faydalıdır. Bu cevap bana yardımcı oldu. Teşekkürler :)
sriharsha KB

1

Google Drive'ı (veya Mac kullanıyorsanız Numbers'ı) kullanan bir geçici çözüm:

  1. Verileri Excel'de açma
  2. Yanlış veri içeren sütunun biçimini Metin olarak ayarlayın (Biçim> Hücreler> Sayı> Metin)
  3. .Csv dosyasını Google Drive'a yükleyin ve Google E-Tablolar ile açın
  4. Sorunlu sütunu kopyalayın
  5. Sütunu Excel'e Metin Olarak Yapıştır (Düzenle> Özel Yapıştır> Metin)

Alternatif olarak, 3. adım için bir Mac kullanıyorsanız, verileri Sayılar'da açabilirsiniz.


Bu, herhangi bir çözüm olmadan saatlerce üzerinde çalışmak yerine aklı başında bir çözümdür.
imsrgadich

1

(EXCEL 2016 ve sonrası, aslında eski sürümlerde denemedim)

  1. Yeni boş sayfa aç
  2. "Veri" sekmesine git
  3. "Metinden / CSV'den" seçeneğini tıklayın ve csv dosyanızı seçin
  4. Verilerinizin doğru olup olmadığını önizlemede kontrol edin.
  5. Bazı sütunlar tarihe dönüştürüldüğünde "düzenle" yi tıklayın ve ardından sütunun başındaki takvime tıklayarak Metin türünü seçin
  6. "Kapat ve Yükle" yi tıklayın

0

Tamam, bunu Excel 2003'ten 2007'ye kadar basit bir yol buldu. Boş bir xls çalışma kitabı açın. Ardından Veri menüsüne gidin, harici verileri içe aktarın. Csv dosyanızı seçin. Sihirbazı gözden geçirin ve "sütun veri biçimi" nde "metin" e zorlanması gereken herhangi bir sütunu seçin. Bu, tüm sütunu metin biçimi olarak içe aktararak Excel'in belirli hücreleri tarih olarak ele almaya çalışmasını önler.


0

Bu sorun Mac Office 2011 ve Office 2013'te hala mevcut, bunun olmasını engelleyemiyorum. Öyle temel bir şey gibi görünüyor.

Benim durumumda, ters çevrilmiş virgüllerin içine doğru bir şekilde yerleştirilmiş CSV içinde "1 - 2" ve "7 - 12" gibi değerlere sahiptim. Ek olarak, barkodlarda bulunan büyük sayıları ve EAN sayılarını tekrar 123E + sayılarına dönüştürür ve bu sayı geri dönüştürülemez.

Google Drive'ın Google E-Tablolarının sayıları tarihe dönüştürmediğini tespit ettim. Barkodlarda her 3 karakterde virgül bulunur ancak bunlar kolayca kaldırılır. Özellikle MAC / Windows CSV'lerle uğraşırken CSV'leri gerçekten iyi işler.

Bazen birini kurtarabilir.


0

EN KOLAY ÇÖZÜM Bunu bugün anladım.

  • Word'de aç
  • Tüm tireleri kısa çizgilerle değiştir
  • Kaydet ve kapat
  • Excel'de aç

Düzenlemeyi bitirdikten sonra, en kısa çizgileri tekrar tire ile değiştirmek için Word'de her zaman tekrar açabilirsiniz.


0

Bunu bilimsel gösterime dönüştürmeye devam eden kredi kartı numaraları için yapıyorum: Sonunda .csv dosyamı Google E-Tablolar'a aktarıyorum. İçe aktarma seçenekleri artık sayısal değerlerin otomatik biçimlendirmesini devre dışı bırakmaya izin veriyor. Hassas sütunları Düz ​​Metin olarak ayarladım ve xlsx olarak indirdim.

Bu korkunç bir iş akışı, ama en azından değerlerim olması gerektiği gibi bırakıldı.


Diğer bazı yanıtlar okumaya zahmet, o birileri bu önerilen göreceksiniz burada .
Laurel

Rahatsız ettim, teşekkürler. Otomatik biçimlendirme seçiminin içe aktarma işleminin yeni bir parçası olduğunu ima ediyorum. Cevabım, benim gibi bu özel sorunla başa çıkmak için E-Tablolar'ı kullanmak zorunda kalanlar için çok özel bir iş akışı sağlıyor. Aklımda, bu ayrı bir cevabı hak etti. Tonunuzda küçük bir değişiklik yapılması, yorumunuzun bu web sitesi ailesinin bütün noktası olan yararlı olarak yorumlanmasına neden olabilir.
Brendonwbrown

Ancak, CSV dosyasını içe aktarmak ve diğer yanıtlarda belirtildiği gibi E-Tablolar ile uğraşmamak için Excel'de Metin İçe Aktarma'yı kullanabilirsiniz.
NetMage

0

Sayıları yapıştırmadan önce çıkış aralığını metin olarak formatlayan bu vba makrosunu yaptım. Excel'i tarih olarak yorumlamadan 8/11, 23/6, 1/3 vb.Gibi değerleri yapıştırmak istediğimde benim için mükemmel çalışıyor.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Bunun diğer insanlar için de işe yarayıp yaramadığını bilmekle çok ilgileniyorum. Bir süredir bu soruna bir çözüm arıyordum, ancak daha önce giriş metninin önüne ekleme içermeyen hızlı bir vba çözümü görmedim. Bu kod, verileri orijinal biçiminde tutar.


-1

Alanın başına ters virgül koyarsanız, metin olarak yorumlanır.

Misal: 25/12/2008 olur'25/12/2008

İçe aktarma sırasında alan türünü de seçebilirsiniz.


9
Verilerimin başında bir 'istemiyorum.

27
-1. 'Yalnızca doğrudan excel'e girildiğinde çalışır, ancak CSV'de çalışmaz - içe aktarmadan sonra excel hücresinde fazladan bir karakteriniz olur.
TMS

-1

Alternatif bir yöntem:

Değiştirmek istediğiniz sütunun biçimini 'Metin'e dönüştürün. Korumak ve kopyalamak istediğiniz tüm hücreleri seçin. Bu sütunların seçimini kaldırmadan "Düzenle> Özel Yapıştır> Değer olarak" seçeneğini tıklayın.

CSV olarak kaydet. Bunun dosyada yaptığınız son şey olması gerektiğini unutmayın, çünkü dosyayı yeniden açtığınızda hücre biçimleri CSV dosyalarına kaydedilemediğinden kendisini tarih olarak biçimlendirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.