Excel'i, değeri bir dize olarak yorumlamaya zorlamak için virgülle ayrılmış bir CSV'yi biçimlendirme


64

Bir süredir, bir CSV dosyasının Excel'i değerleri bir dize olarak yorumlamaya ve sayıları veya tarihlere dönüştürmeye çalışmalarını zorlamayacak şekilde nasıl çıktıracağını bulmaya çalışıyorum.

Örneğin:

"141", "10/11/2002", "350.00", "1311742251"

Excel tüm bunları "akıllıca" yerel tarih / sayı biçimlerine dönüştürmeye çalışır. Bunun bir yolu var mı?


EDIT: Sorumun amacı açıklığa kavuşturuldu, karışıklık için özür dilerim.

Yanıtlar:


67

Kaynak veriler üzerinde kontrolü olanlar için, görünüşe göre Excel, CSV sütunu bu biçimde olmadıkça bir CSV alanının biçimini otomatik olarak algılar:

"=""Data Here"""

Örneğin...

20,       5.5%,      "0404 123 351", "3-6",  "=""123"""
[number]  [percent]  [number]        [date]  [string]  <-- how Excel interprets

Aynı zamanda Google E-Tablo'da da çalışır, ancak diğer e-tablo uygulamalarının bu gösterimi destekleyip desteklemediğinden emin değildir.

Herhangi bir verinin kendisinin tırnak içerebileceğinden şüpheleniyorsanız, bunlardan iki kez kaçmanız gerekir, bunun gibi ...

"=""She said """"Hello"""" to him"""



(EDIT: Düzeltmelerle güncellendi, teşekkürler DMA57361!)


Awesome, sadece verileri değiştirmemiz gerekiyor .. sigh
Pricey

4
Bu son sütun "=""123"""aksi halde yanlış biçimlendirilmiş olmalıdır. A içeren alanlar "sınırlandırılmalıdır ve "alandaki "s diğer s ile birlikte kaçtı .
DMA57361

@ DMA57361 aslında sahip olduğu şekilde sorun değil, yanında belirtilen eşit işareti eksik olan diğer iki alan var. Oraya koyduğu şey, hücrenin formülünü bir dize döndürecek şekilde ayarlamak. Bundan kaçınmak için, hücrenin veri türünü "Metin" olarak ayarlayabilirsiniz.
Atılım

2
@Bu tabloda, Excel alanlarını değil , bir CSV dosyasını temsil eder . Son değer ="123"saha sınırlayıcı karakteri içerdiğinden geçerli bir CSV alan değildir " olmadan doğru veya alanını sınırlayan. Excel'in bir formül olarak okuduğu gerçeği tamamen Excel'e ve CSV dosyasıyla ilgisi yok.
DMA57361

2
@PriceChild, orjinal sorumun amacı (çok iyi açıklamamıştım) aslında CSV’yi kullanıcılar için mümkün olduğunca kolaylaştırmak için nasıl biçimlendireceğimizdi . Ve işte bu, kendimi bulduğum ve yayınlamak istediğim cevap. DMA57361 de gerçekten yararlı bir düzeltme getirdi, teşekkürler!
Simon Doğu

36

Birçokları gibi, Microsoft’un önerdiği çeşitli çözümleri denediği ve denediği kararlarla da mücadele ediyorum.

Excel 2007 için aşağıdakiler geçerlidir:

  • Tüm değerleri çift tırnak içine almak YARARLANMAMAK yardımcı olur
  • A = koyarak tüm değerleri ikişer çarpı koymadan önce DOES yardımcı olur, BUT csv dosyasını diğer birçok uygulama için işe yaramaz kılar.
  • Tüm değerlerin etrafına çift tırnak işaretleri arasına parantez koymak
  • Etraflarına çift tırnak işareti koymadan önce tüm değerlerin önüne boşluk koymak DOES, dönüşümlerin tarihlere göre yapılmasını önler;
  • Tek bir teklifi bir değerin önüne koymak sadece Excel içerisine veri girerken işe yarar.

Ancak:

Etraflarına çift tırnak işareti koymadan önce tüm değerlerin önüne bir sekme koymak DOES, dönüşümleri tarihlere engeller ve DOES satırları veya sondaki sıfırları kesmeyi önler ve sayfa her hücrenin sol üst köşesinde kötü uyarı işaretleri bile göstermez.

Örneğin:

"<tab character><some value>","<tab character><some other value>"

Sekme karakterinin çift tırnak içinde olması gerektiğini unutmayın. Düzenleme: Çift tırnak işareti gerekli olmadığı ortaya çıkıyor.

CSV dosyasını çift tıklamak, dosyayı Excel'de, metin verileri gibi, yukarıda belirtilen gibi tüm değerleri gösteren bir elektronik tablo olarak açabilir. Excel'i ' kullanacak şekilde ayarladığınızdan emin olun .' Ondalık nokta ve ',' değil veya csv dosyasının her satırı, her satırın ilk hücresinde bir metin olarak bitecektir. Görünüşe göre Microsoft, CSV'nin "Ondalık Nokta Değil" Ayrılmış Değer anlamına geldiğini düşünüyor.


Bu sekme numarası günümü kurtardı, Excel çok uzun sayısal değerleri sayılara dönüştürüyordu ve 15. saatten sonra tüm rakamları kaybetti. Excel'in sekme önekiyle metin olarak işlem görmesini sağlamayı başardı. Bu yüzden sadece tarihler için değil sayılar için de işe yarar.
Markus Yrjölä,

Bu gerçekten yararlı, teşekkür ederim!
Flavio

22

Excel'in içe aktarma işlevini kullanmak, her bir sütunun yorumlanması gereken ve veri dosyalarında herhangi bir değişiklik gerektirmeyen biçimini (otomatik, metin veya tarih) belirtmenizi sağlar.

Excel 2007/2010'da DataGet External Data→ olarak bulabilirsiniz From Text.
Veya DataImport External DataImport DataExcel 2003’te.

Aşağıda, verilen iki veriyi metin olarak aldığımı gösteren Excel 2003 Metin Alma Sihirbazı'nın verilen örnek verilerle ilgili bir resmi var:

Excel 2003: 3. Adımdaki Metin Alma Sihirbazı - veri türleri


Mükemmel cevap DMA57361, tüm detaylar için teşekkürler. Sorumumda gerçekten bahsetmediğim şey, Excel'e veri aktaran bir komut dosyası yazmamdı, bu yüzden kullanıcıların bu gibi kafa karıştırıcı seçenekleri aşmalarını engellemeye çalışıyordum. Ama yine de sana oy verdi. :-)
Simon East

@Simon, sen senaryoyu ne yazıyorsun? Orta formattan geçmek yerine, doğrudan Excel dosyalarını üretebilmenin bir yolu var mı?
DMA57361

Bir veritabanı tablosu veren bir PHP betiğidir. CSV muhtemelen çalışmak için en kolay olanıdır, ancak haklısınız. Muhtemelen bazı açık kaynaklı kodların yardımıyla bir XLS ya da geçmişte edindiğim deneyimlerin Excel'de makul sonuçlar verdiğini düşünüyorum. renkler ve biçimlendirme vb., ancak veri türleri hakkında emin değilim).
Simon Doğu

1
SO hakkında bir kaç soru var, PHP → Excel hakkında, bir kaçını denememe rağmen PHP Excel'i işaret eden bir cevabım var .
DMA57361

Bu çok yararlı, oldukça birkaç
cevap

1

Simon'dan gelen örnek benim için işe yaramadı ve bunun bir dil farkı olduğunu düşünüyorum. Burada C # ile çalışma formatımın dizesi şöyle görünür:

var linebreak = (i++ == list.Count) ? "" : "\r\n";

csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
    item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);

ve çıktı dosyası şöyle görünür:

="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""

Görülebileceği gibi, çıktı dosyasındaki biçim, Visual Basic kuralı olabileceğini düşündüğüm biçim ="VALUE",değil "=""VALUE""",.

Excel 2010 kullanıyorum. Bu arada, Google Sheets bu şekilde biçimlendirilmiş bir dosyayı açmaz / dönüştürmez. Böylece, eşittir işaretini kaldırırsanız işe yarar "VALUE",- Excel dosyayı yine de açar ancak sütunlarınızın dizeleri olmasını istediğiniz gerçeğini yok sayar.


-2

Excel'i, tarihi metin olarak yorumlamaya zorlamanın basit bir yolu, aşağıdaki gibi tam tırnak kullanmak yerine, tarihin önüne tek bir teklif koymaktır:

/ 11/2002 '10

CSV'yi açmak yerine içe aktarabilirseniz, Excel'e her bir sütunun hangi formatı olması gerektiğini söyleyebilirsiniz. Sorduğum bu soruya bir göz atın .


5
Bunun nedeni, Excel'e içe aktarılan CSV dosyalarında çalışma DEĞİLDİR. Excel, teklifi bir değişmez teklif olarak yorumlar ve bu nedenle hücrede gösterir.
psynnott
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.