Excel'de çalışmaları için CSV dosyalarındaki virgül ve konuşma işaretlerinden nasıl kaçmalıyım?


111

Bir CSV dosyası oluşturuyorum (sekmeler yerine virgülle ayrılmış). Kullanıcılarım büyük ihtimalle CSV dosyasını çift tıklayarak Excel'de açacaklar. Verilerim virgül ve konuşma işaretleri içerebilir, bu nedenle bunlardan aşağıdaki şekilde kaçıyorum.

Reference, Title, Description
1, "My little title", "My description, which may contain ""speech marks"" and commas."
2, "My other little title", "My other description, which may also contain ""speech marks"" and commas."

Bildiğim kadarıyla her zaman bunu yapmanın yolu buydu. İşte boggle'ım: Bu dosyayı Excel 2010'da açtığımda kaçışıma saygı gösterilmiyor. Sayfada konuşma işaretleri belirir ve virgül yeni sütunlara neden olur.

Yanıtlar:


219

Sonunda bunun cevabını bulduk.

Excel, yalnızca sütun değerinin önünde boşluk YOKSA virgül ve konuşma işaretlerinin çıkışına saygı gösterir. Yani dosyayı böyle boşluksuz oluşturmak ...

Reference,Title,Description
1,"My little title","My description, which may contain ""speech marks"" and commas."
2,"My other little title","My other description, which may also contain ""speech marks"" and commas."

... sorunu çözdü. Umarım bu birine yardımcı olur!


2
Bu daha önce karşılaştığım bir problem ve her zaman unutuyorum. Excel, sadece kafa karışıklığı yarattığı ve ilk etapta sahip olunması gereken yararlı bir kural olmadığı için bu davranışı durdurmalıdır. Bu veya csv'lerin virgüller arasında zorunlu boşluk olmamalıdır.
Jacques Mathieu

61

Rastgele olduğuna inanıyorsanız, kurallar aşağıdadır. Bu kurallar temelinde bir yardımcı program işlevi oluşturulabilir.

  1. Değer virgül, yeni satır veya çift tırnak içeriyorsa, Dize değeri çift tırnak içinde döndürülmelidir.

  2. Değerdeki herhangi bir çift tırnak karakterinin başka bir çift tırnak ile öncelenmesi gerekir.

  3. Değer virgül, satırsonu veya çift tırnak içermiyorsa, String değeri değiştirilmeden döndürülmelidir.


4
Virgül, çift tırnak veya yeni satır içermeyen bir şeyi alıntı-sarmalamanın bir zararı var mı?
Erik Reppen

2
Hayır ErikReppen Normalde acıtacağını sanmıyorum. Yığın belleğinde kendi paylarına sahip oldukları için eski dizelerdeki metni değiştirerek yeni dizeler oluşturmamanın önerildiği bir java arka planına aitim. İsterseniz, tüm değerleri koşulsuz olarak değiştirebilir ve olmamasına rağmen herhangi bir soruna yol açıp açmadığını bize bildirebilirsiniz.
AlphaBetaGamma

2
Boşluk ile başlayan veya biten bir alan alıntılanmalıdır.
Jonathan Rosenne

2

Yashu'nun talimatlarına göre, aşağıdaki işlevi yazdım (PL / SQL kodu, ancak başka herhangi bir dile kolayca uyarlanabilmelidir).

FUNCTION field(str IN VARCHAR2) RETURN VARCHAR2 IS
    C_NEWLINE CONSTANT CHAR(1) := '
'; -- newline is intentional

    v_aux VARCHAR2(32000);
    v_has_double_quotes BOOLEAN;
    v_has_comma BOOLEAN;
    v_has_newline BOOLEAN;
BEGIN
    v_has_double_quotes := instr(str, '"') > 0;
    v_has_comma := instr(str,',') > 0;
    v_has_newline := instr(str, C_NEWLINE) > 0;

    IF v_has_double_quotes OR v_has_comma OR v_has_newline THEN
        IF v_has_double_quotes THEN
            v_aux := replace(str,'"','""');
        ELSE
            v_aux := str;
        END IF;
        return '"'||v_aux||'"';
    ELSE
        return str;
    END IF;
END;

0

En azından Excel 2016'da, çift tırnaklardan kaçmadan bile tek tırnaklar iyi çalışır:

'text with spaces, and a comma','more text with spaces','spaces and "quoted text" and more spaces','nospaces','NOSPACES1234'

Excel bunu 5 sütuna koyar ("Sütunlara metin" sihirbazında tek alıntıyı "Metin niteleyici" olarak seçerseniz)


-3

Çift tırnaklardan sonra bile, bu sorunu birkaç gün yaşadım.

Boru Ayırıcı, Virgül ile değiştirildi, ardından her şey yolunda gitti.


1
Operatörün gerekirse kopyalayıp yapıştırabilmesi için sizin için neyin işe yaradığına dair bir örnek vermelisiniz.
Reuben Tanner
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.