Apa perbedaan sebenarnya antara CSV Excel dan CSV standar?
Misalnya, ketika menangani kolom dengan jeda baris di dalam satu sel, bagaimana mereka menyandikannya secara berbeda?
Apa perbedaan sebenarnya antara CSV Excel dan CSV standar?
Misalnya, ketika menangani kolom dengan jeda baris di dalam satu sel, bagaimana mereka menyandikannya secara berbeda?
Jawaban:
Ini benar-benar tergantung pada apa yang Anda definisikan sebagai CSV "standar". Sejauh yang saya ketahui, Excel mengikuti aturan yang diuraikan dalam RFC 4180 , "Format Umum dan Jenis MIME untuk File CSV".
Pertimbangkan tabel di mana sel pertama di baris pertama memiliki dua jeda baris. Di Excel, akan terlihat seperti berikut:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Sekarang, bagaimana Excel akan mengekspor ini? Mari kita lihat - editor teks akan menampilkan ini:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Tidak terlalu canggih. Ini memasukkan carriage return (hex 0D
) di mana garis putus di sel kami. Setiap sel dikelilingi oleh tanda kutip ganda. Selain itu, baris aktual dipisahkan dengan carriage return.
Untuk menguraikan ini dengan benar, parser CSV perlu melakukannya
Jika tidak melakukan itu, Anda akan berakhir dengan sesuatu yang kacau seperti ini - perhatikan bahwa sekarang ada empat baris, bukan dua, karena gagal mengabaikan jeda baris.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Tapi, mari kita lihat apa yang dikatakan RFC, mungkin Excel melakukannya dengan benar?
Bidang yang berisi penghentian baris (CRLF), tanda kutip ganda, dan koma harus dilampirkan dalam tanda kutip ganda.
Rapi, itulah yang dilakukan Excel. Jadi meringkas, Excel tampaknya mengikuti rekomendasi file CSV "standar". Diberikan parser CSV yang tepat, itu harus dapat membaca file CSV Excel juga.
Pemahaman saya dari implementasi csv asli adalah bahwa semua bidang teks dilampirkan dalam tanda kutip dan angka tidak perlu. Excel tidak melakukan ini dan jika Anda mencoba mengunggah file csv yang dihasilkan Excel di platform non-microsoft, mereka gagal. Ini adalah pendekatan standar microsoft, abaikan interoperabilitas dan fokus pada mengikuti aturan secara membabi buta. Hal serupa terjadi pada IE, mereka mengikuti aturan html / css dengan benar untuk atribut padding dan margin dan mengabaikan fakta bahwa setiap halaman web dan browser web yang ada memperlakukannya secara berbeda. Hasilnya, hampir setiap halaman web sekarang memiliki aturan khusus untuk IE. Saya menemukan file csv yang dihasilkan oleh excel tidak berguna dan menggunakan kolom fungsi "concatenate" untuk membuatnya sendiri secara manual.