Excel CSV - Sayı hücre biçimi


86

CSV dosyası olarak bir rapor oluşturuyorum. Dosyayı Excel'de açmaya çalıştığımda hücrenin içeriğine göre veri türü hakkında bir varsayımda bulunuyor ve buna göre yeniden biçimlendiriyor.

Örneğin, CSV dosyası şunları içeriyorsa

...,005,...

Sonra Excel bunu 5 olarak gösterir. Bunu geçersiz kılmanın ve 005'i görüntülemenin bir yolu var mı?

Dosyanın kendisine bir şeyler yapmayı tercih ederim, böylece kullanıcı CSV dosyasını çift tıklayıp açabilir.

Excel 2003 kullanıyorum.


Bu sorunun makro çözümü için bu soruya bakın .
Adam Jensen

Günümüzde pek çok Excel yazma kitaplığı var. Seçtiğiniz dilde .xlsx dosyaları oluşturmak oldukça kolay olacaktır. Kullanıcılarınız hala bir nedenle Excel 2003 kullanıyorsa (bu soru ilk sorulduğunda yaygındır, ancak bugün umarız pek olası değildir), bazı .xls üreten seçenekler de vardır. Bugün bu soruyla karşılaşan insanlar için, büyük olasılıkla kendi sorunuzu cevaplamak zorunda değilsiniz.
John Y

Yanıtlar:


129

Bir .csv dosyasını açarken Excel'in uyguladığı biçimlendirmeyi kontrol etmenin kolay bir yolu yoktur. Bununla birlikte, aşağıda yardımcı olabilecek üç yaklaşım listelenmiştir.

Tercihim ilk seçenektir.

Seçenek 1 - Dosyadaki verileri değiştirin

.Csv dosyasındaki verileri şu şekilde değiştirebilirsiniz ..., = ”005” , ... Bu, Excel'de ..., 005 , ... olarak görüntülenecektir.

Excel, verileri bir formül olarak tutacaktır, ancak sütunu kopyalayıp özel değerleri yapıştırmak formülden kurtulacak ancak biçimlendirmeyi koruyacaktır.

Seçenek 2 - Verileri biçimlendirin

Bu sadece bir biçim sorunuysa ve bu sütundaki tüm verilerinizin uzunluğu üç basamaklıysa. Ardından verileri Excel'de açın ve verileri içeren sütunu bu özel biçim 000 ile biçimlendirin.

Seçenek 3 - Dosya uzantısını .dif olarak değiştirin (Veri değişim biçimi)

Dosya uzantısını değiştirin ve formatları kontrol etmek için dosya içe aktarma sihirbazını kullanın. .Dif uzantılı dosyalar, çift tıklandığında Excel tarafından otomatik olarak açılır.

Adım adım:

  • Dosya uzantısını değiştirin .csv için .DIF
  • Excel'de açmak için dosyaya çift tıklayın.
  • 'Dosya İçe Aktarma Sihirbazı' başlatılacaktır.
  • "Dosya türü" nü "Sınırlandırılmış" olarak ayarlayın ve "İleri" düğmesini tıklayın.
  • Sınırlayıcılar altında, 'Virgül'ü işaretleyin ve' İleri 'düğmesini tıklayın.
  • Verilerinizin görüntülenen her bir sütununu tıklayın ve bir 'Sütun veri biçimi' seçin. '005' değerine sahip sütun, 'Metin' olarak biçimlendirilmelidir.
  • Bitir düğmesine tıklayın, dosya belirttiğiniz formatlarda Excel tarafından açılacaktır.

8
.dif makinemde çalışmadıysa; Excel 2007 ile manuel olarak açmak işe yaramadı (dosya türünün uzantıdan farklı olduğu konusunda beni uyardı) ve .DIF birçok bilgisayarda Quicktime ile ilişkilendirilmiş gibi görünüyor. Sadece FYI :) Aksi takdirde, harika ipuçları!
Nicholas

15
"Sadece çalışan" bir dosya oluşturmak için zahmetsiz bir yol istiyorsanız - yani kullanıcının bilgisayarında herhangi bir ek iş yapmalarına gerek kalmadan excel'de açılırsa 1. seçenek en iyisidir.
Kip

Aynı sorunu yaşıyorum ve yukarıdakilerin hiçbiri üzgünüm. XML olarak dışa aktarabileceğimi ve CSV'ye gitmek için XSLT kullanabileceğimi düşünüyorum. Başka bir uygulamaya aktarılabilmesi için CSV dosyasının doğru olmasına ihtiyacım var
Matt

1
Lütfen 1. seçeneğin her zaman iyi olmadığını unutmayın, "1E02, metin ne olursa olsun" diyelim bir hücreniz varsa ve sonra önüne bir eşitlik koyarsanız, Excel bir formül girdiğinizi hayal eder. İlk olarak formül yanlış olacak, ancak ikinci ve en önemlisi metninizi 2 hücreye bölecek.
ghiscoding

1
Seçenek 1 için teşekkürler. Herhangi bir ekstra çalışma yapmadan bilimsel gösterim sorunumu düzelttim.
NaN

28

CSV kullanmayın, SYLK kullanın.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Biçimlendirme üzerinde çok daha fazla kontrol sağlar ve Excel, içeriği inceleyerek bir alanın türünü tahmin etmeye çalışmaz. Biraz karmaşık görünüyor, ancak çok küçük bir alt küme kullanmaktan kurtulabilirsiniz.


2
+1 SYLK'e yazmayı uygulamak basit, acemi olarak yaptım.
Matt H

1
Bu formatı bilmiyordum. Kullanabileceğim bir şeye benziyor. Bunun için +1!
Buggabill

+1 CSV'den SYLK'ye geçmek beş dakikamı aldı. Şu andan itibaren goto çıktı formatım!
TheFish

@xamde, haklısın. RTF'de olduğu gibi, biçimi desteklemek için asla genişletmemiş olmaları garip.
Mark Ransom

WTF veya herhangi biri bunu tavsiye ederdi Wikipedia'dan alıntı yapıyorum: "Microsoft bir SYLK spesifikasyonu yayınlamıyor."
sorin

14

Bu, Microsoft Office 2010, Excel Sürüm 14 için çalışır

OP'nin "dosyanın kendisine bir şeyler yapma" tercihini yanlış anladım. Bunu, içe aktarmayı doğrudan biçimlendirmek için bir çözüm isteyenler için hala saklıyorum

  1. Boş (yeni) bir dosya açın (Dosya -> Çalışma kitabından yeni)
  2. İçe Aktarma Sihirbazını açın (Veri -> Metinden)
  3. .Csv dosyanızı seçin ve içe aktarın
  4. Diyalog kutusunda, 'Sınırlandırılmış'ı seçin ve İleri'yi tıklayın.
  5. Sınırlayıcılarınızı seçin ("virgül" dışındaki her şeyin işaretini kaldırın), Metin niteleyicilerinizi seçin (muhtemelen {Yok}), İleri'yi tıklayın
  6. Gelen veriler önizleme alanında metin olmasını istediğiniz sütunu seçin. Vurgulaması gerekir.
  7. Gelen Sütun veri biçimi alanında, 'Metin'i seçin.
  8. Bitti'ye tıklayın.

resimlerle açıklanmıştır: support.insight.ly/hc/en-us/articles/…
Yo Ludke

2

Aralığınızı Metin olarak biçimlendirebilirsiniz.

Ayrıca burada sayı biçimleri ve bunları nasıl programlayabileceğiniz hakkında güzel bir makale var.


Bu, yalnızca değerin nasıl görüntülendiğini etkiler. Bir formülle veya içe aktarma sırasında, bu ileti dizisinde açıklanan birçok yöntemden biriyle metne dönüştürmeniz gerekir
leo

2

Aslında, en azından Office 2003'ten başlayarak, bir Excel elektronik tablosunu XML dosyası olarak kaydedebileceğinizi keşfettim. Böylece bir XML dosyası oluşturabiliyorum ve üzerine çift tıkladığımda Excel'de açılacak. SYLK ile aynı düzeyde kontrol sağlar, ancak XML sözdizimi daha sezgiseldir.


2

Hücreye bölünmeyen bir boşluk eklemek yardımcı olabilir. Örneğin: "firstvalue";"secondvalue";"005 ";"othervalue"

Excel'i bir metin olarak işlemeye zorlar ve alan görünmez. Windows'ta alt + 0160 bahşiş vererek kesintisiz bir boşluk ekleyebilirsiniz. Daha fazla bilgi için buraya bakın: http://en.wikipedia.org/wiki/Non-breaking_space

Excel 2010'da denendi. Umarım bu, bu sorun için oldukça uygun bir çözüm arayan kişilere yardımcı olabilir.


2

CSV verilerini C # kodundan dışa aktarırken bu sorunu yaşadım ve baştaki sıfır verisini \ t sekme karakteriyle önlerine ekleyerek çözdüm, böylece veriler Excel'de sayısal değil metin olarak yorumlandı (ancak diğer karakterlerin önüne eklenmekten farklı olarak t görülmek).

= "001" yaklaşımını beğendim, ancak bu, dışa aktarılan CSV verilerinin, içe aktarılan CSV dosyasından tüm bu biçimlendirmeyi kaldırmadan C # uygulamama yeniden içe aktarılmasına izin vermez (bunun yerine yalnızca içe aktarma verilerini kırpacağım) .


1

Dosyayı içe aktardığınızda Sütun Türü'nü seçebileceğinize inanıyorum. Sayı yerine Metin yapın. Şu anda önümde kontrol etmem gereken bir kopyası yok.


1

Csv'yi oleDB'ye yükleyin ve tüm çıkarılan veri türlerini dizeye zorlayın

Ben de aynı soruyu sordum ve sonra kodla cevapladım.

temelde csv dosyası yüklendiğinde oledb sürücüsü varsayımlar yapar, ona hangi varsayımları yapacağını söyleyebilirsiniz.

Kodum tüm veri türlerini dizeye zorluyor olsa da ... şemayı değiştirmek çok kolay. Amaçlarım için, istediğim şekilde elde etmek için bir xslt kullandım - ancak çok çeşitli dosyaları ayrıştırıyorum.


1

Bunun eski bir soru olduğunu biliyorum, ancak burada listelenmeyen bir çözümüm var.

Csv'yi oluşturduğunuzda, virgülden sonra ancak değerinizden önce bir boşluk ekleyin örn , 005,.

Bu, yine de excel 2007'de otomatik tarih biçimlendirmesini önlemek için çalıştı.


2
Yeni test edildi, Excel 2007 ve bir sayı sütunuyla çalışmıyor gibi görünüyor. : - /
Norman H

1

Metin İçe Aktarma Sihirbazı yöntemi, içe aktarılan CSV dosyasında bir hücre içinde satır sonları varken çalışmaz. Bu yöntem, bu senaryoyu işler (en azından sekmeyle ayrılmış verilerle):

  1. Yeni Excel dosyası oluştur
  2. Tüm hücreleri seçmek için Ctrl + A
  3. Sayı Biçimi birleşik kutusunda Metin'i seçin
  4. Sekmeyle ayrılmış dosyayı metin düzenleyicide aç
  5. Tümünü seçin, kopyalayıp Excel'e yapıştırın


1

Bu beni bütün gün çıldırtıyor (çünkü CSV dosyasını açmadan önce Excel sütun türlerini kontrol edemezsiniz) ve bu benim için çalıştı, VB.NET ve Excel Interop kullanarak:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function

0

Bir CSV'yi açarken, metin içe aktarma sihirbazını alırsınız. Sihirbazın son adımında, belirli bir sütunu metin olarak içe aktarabilmeniz ve böylece '00' önekini korumanız gerekir. Bundan sonra, hücreyi istediğiniz şekilde biçimlendirebilirsiniz.

Excel 2007 ile denedim ve işe yaradı.


1
Excel 2003 sihirbazı açmaz.
Sergey Stadnik

0

Excel, CSV dosyaları için sihirbazı asla açmaz. .Txt olarak yeniden adlandırırsanız, bir dahaki sefere Dosya> Excel'de Aç'ı yaptığınızda sihirbazı görürsünüz.


0

Alanın önüne tek bir alıntı koyun. Excel, sayı gibi görünse bile bunu metin olarak ele alır.

...,`005,...

DÜZENLEME: Bu yanlış. Kesme işareti hilesi yalnızca verileri doğrudan Excel'e girerken çalışır. Bunu bir CSV dosyasında kullandığınızda, alanda istemediğiniz kesme işareti görünür.

http://support.microsoft.com/kb/214233


5
Bu, insanların muhtemelen deneyeceği bir şeydir. Bu yüzden işe yaramayacağını bilmek faydalıdır ve zaman kazandırır.
AndyM
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.