Perbedaan sesungguhnya antara Excel CSV dan CSV Standar

16

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?

pengguna157195
sumber

Jawaban:

19

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

  • abaikan carriage return ketika muncul dalam tanda kutip ganda (yaitu sel)
  • jangan abaikan carriage return ketika muncul di luar tanda kutip ganda

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.

slhck
sumber
@shhck: mengapa saya melihat implementasi parser csv memisahkan "excel" csv dengan "csv"? Saya juga menemukan excel sebagai implementasi yang cukup kuat.
user157195
@ user157195 Bergantung pada parser, Anda harus membaca dalam dokumentasinya mengapa ada perbedaan antara input Excel dan non-Excel. Saya tidak akan melihat mengapa harus ada satu. Saya hanya tahu ini dari R , yang memperlakukan Excel CSV sama seperti yang lainnya. Namun itu dapat membaca XLS juga.
slhck
2
Sebagai seseorang yang telah secara program membaca file CSV yang dihasilkan excel selama bertahun-tahun dalam segala bentuk dan ukuran, saya dapat membuktikan bahwa slhck adalah 100% benar - Excel menghasilkan 100% file CSV "standar". Setiap saat.
Mark Henderson
@Farseeker Terima kasih atas konfirmasinya! (dan Anda memiliki 1.337 perwakilan sekarang!)
slhck
5
Peringatan! Di negara-negara yang menggunakan ',' sebagai titik desimal, Excel akan "sangat pintar" dan menggunakan ';' karakter pemisah. Ini menyelamatkan Zee Germanz dari melihat terlalu banyak "tanda kutip"; "dalam"; "file"; "mereka". Sayangnya jika mereka mengirimnya ke kantor UK, AllSmooshedUpIntoASingleCellOnEveryLine akan mendapatkan AllSmooshedUpInto. Cemerlang.
Luke Usherwood
-1

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.

Edwin
sumber