Bagaimana cara saya melepaskan koma dan tanda ucapan di file CSV sehingga berfungsi di Excel?


111

Saya membuat file CSV (dipisahkan dengan koma, bukan tab). Pengguna saya kemungkinan besar akan membuka file CSV di Excel dengan mengkliknya dua kali. Data saya mungkin berisi koma dan tanda bicara, jadi saya melepaskannya sebagai berikut.

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."

Sejauh yang saya tahu, itulah cara untuk melakukannya. Inilah alasan saya: ketika saya membuka file ini di Excel 2010, pelolosan saya tidak dihormati. Tanda ucapan muncul di lembar, dan koma menyebabkan kolom baru.

Jawaban:


219

Kami akhirnya menemukan jawabannya.

Excel hanya akan menghormati penggunaan tanda koma dan ucapan jika nilai kolom TIDAK diawali dengan spasi. Jadi menghasilkan file tanpa spasi seperti ini ...

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."

... memperbaiki masalahnya. Semoga ini bisa membantu seseorang!


2
Ini adalah masalah yang pernah saya alami sebelumnya dan saya selalu melupakannya. Excel harus menghentikan perilaku ini, karena itu hanya menciptakan kebingungan dan bukan aturan yang berguna untuk dimiliki. Itu atau csv harus memiliki spasi kosong wajib di antara koma.
Jacques Mathieu

61

Di bawah ini adalah aturan jika Anda yakin itu acak. Fungsi utilitas dapat dibuat berdasarkan aturan ini.

  1. Jika nilai berisi koma, baris baru, atau tanda kutip ganda, maka nilai String harus dikembalikan dengan diapit tanda kutip ganda.

  2. Setiap karakter kutip ganda dalam nilai harus di-escape dengan kutip ganda lainnya.

  3. Jika nilai tidak mengandung koma, baris baru atau tanda kutip ganda, maka nilai String harus dikembalikan tanpa perubahan.


4
Apakah ada salahnya mengutip-membungkus sesuatu yang tidak memiliki koma, tanda kutip ganda atau baris baru?
Erik Reppen

2
Tidak ErikReppen Saya rasa itu tidak akan menyakitkan secara normal. Saya termasuk dalam java background di mana disarankan untuk tidak membuat string baru dengan mengganti teks yang lama karena mereka memiliki bagiannya sendiri di dalam memori heap. Jika Anda mau, Anda dapat mengganti semua nilai tanpa syarat dan memberi tahu kami jika itu menyebabkan masalah meskipun seharusnya tidak.
AlphaBetaGamma

2
Bidang yang dimulai atau diakhiri dengan spasi harus dikutip.
Jonathan Rosenne

2

Menurut instruksi Yashu, saya menulis fungsi berikut (ini adalah kode PL / SQL, tetapi harus mudah beradaptasi dengan bahasa lain).

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

Tanda kutip tunggal juga berfungsi dengan baik, bahkan tanpa melepaskan tanda kutip ganda, setidaknya di Excel 2016:

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

Excel akan memasukkannya ke dalam 5 kolom (jika Anda memilih kutipan tunggal sebagai "Text qualifier" di wizard "Text to column")


-3

Bahkan setelah tanda kutip ganda, saya mengalami masalah ini selama beberapa hari.

Ganti Pembatas Pipa dengan Koma, lalu semuanya berfungsi dengan baik.


1
Anda harus memberikan contoh apa yang berhasil untuk Anda sehingga OP dapat menyalin dan menempelkannya jika diperlukan.
Reuben Tanner
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.