Mengimpor CSV dengan jeda baris dalam Excel 2007

I'm bekerja pada sebuah fitur untuk mengekspor hasil pencarian untuk file CSV yang dapat dibuka di Excel. Salah satu bidang adalah bidang teks, yang mungkin berisi jeda baris, koma, kutipan, dll. Dalam rangka untuk mengatasi ini, saya telah dibungkus bidang dalam tanda kutip ganda (").

Namun, ketika saya mengimpor data ke dalam Excel 2007, ditetapkan sesuai pembatas, dan mengatur teks kualifikasi untuk kutip ganda, garis istirahat masih menciptakan rekor baru di jeda baris, di mana saya akan mengharapkan untuk melihat seluruh bidang teks dalam satu cell.

I've juga mencoba mengganti CR/LF (\r\n) dengan CR (\r), dan lagi-lagi hanya dengan LF (\n), tetapi tidak berhasil.

Telah ada orang lain yang mengalami perilaku ini, dan jika demikian, bagaimana cara anda memperbaikinya?

TIA,
-J

EDIT:
Berikut ini's cepat file yang saya tulis dengan tangan duplikat masalah.

ID,Nama,Deskripsi
"12345","Smith, Joe","Hei.
namaku Joe."

Ketika saya import ke Excel 2007, saya berakhir dengan baris header, dan dua catatan. Perhatikan bahwa koma di "Smith, Joe" sedang ditangani dengan benar. It's hanya garis istirahat yang menyebabkan masalah.

Mengomentari pertanyaan (2)

Excel (setidaknya di Office 2007 pada XP) dapat berperilaku berbeda tergantung pada apakah file CSV yang diimpor oleh pembukaan dari File->Buka menu atau dengan mengklik ganda pada file Explorer.

Saya memiliki file CSV yang di encoding UTF-8 dan berisi baris baru dalam beberapa sel. Jika saya membuka file ini dari Excel's File->Buka menu, "impor CSV" wizard muncul dan file tidak dapat diimpor dengan benar: satu baris baru memulai baris baru bahkan saat dikutip. Jika saya membuka file ini dengan mengklik ganda di atasnya di jendela Explorer, kemudian buka dengan benar tanpa intervensi dari wizard.

Komentar (9)

Tidak ada solusi yang disarankan bekerja untuk saya.

Apa yang benar-benar bekerja (dengan encoding):

Copy/paste data dari csv-file (open in Editor), kemudian melakukan "teks dalam kolom" --> tidak bekerja, semua benar.

Pergi ke tab berikutnya dan copy/paste lagi (hal yang sama apa yang anda punya sudah di clipboard anda) --> otomatis bekerja sekarang.

Komentar (10)

Jika anda melakukan ini secara manual, download LibreOffice dan menggunakan LibreOffice Calc untuk impor CSV anda. Ia melakukan pekerjaan yang lebih baik dari hal-hal seperti ini dari versi Excel I've mencoba, dan dapat menyimpan ke XLS atau XLSX seperti yang diperlukan jika anda perlu untuk mentransfer ke Excel setelah itu.

Tapi jika anda're terjebak dengan Excel dan perlu memperbaiki lebih baik, tampaknya ada cara. Tampaknya lokal dependen (yang tampaknya konyol, in my humble opinion). Saya don't memiliki Excel 2007, tapi aku punya Excel 2010, dan contoh yang diberikan:

ID,Name,Description
"12345","Smith, Joe","Hey.
My name is Joe."

doesn't bekerja. Saya menulis ini di Notepad dan pilih Save as..., dan di samping tombol Simpan anda dapat memilih pengkodean. Saya pilih UTF-8 seperti yang disarankan, tapi tidak berhasil. Ganti koma dengan titik koma bekerja untuk saya, meskipun. Aku't perubahan apa-apa lagi, dan hanya bekerja. Jadi saya mengubah contoh seperti ini, dan pilih UTF-8 encoding saat menyimpan di Notepad:

ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."

Tapi ada's menangkap! Satu-satunya cara kerjanya adalah jika anda klik dua kali file CSV untuk membukanya di Excel. Jika saya mencoba untuk mengimpor data dari teks dan pilih CSV ini, maka masih gagal dikutip pada baris baru.

Tapi ada's yang lain menangkap! Kerja field separator (koma dalam contoh asli, titik koma dalam kasus saya) tampaknya tergantung pada sistem's Pengaturan Regional (set di bawah Control Panel -> Wilayah dan Bahasa). Di Norwegia, koma adalah pemisah desimal. Excel tampaknya untuk menghindari karakter ini dan lebih memilih tanda titik koma sebagai gantinya. Saya memiliki akses ke komputer lain set ke INGGRIS inggris lokal, dan pada komputer, contoh pertama dengan koma pemisah bekerja dengan baik (hanya pada doubleclick), dan satu dengan titik koma benar-benar gagal! Begitu banyak untuk interoperabilitas. Jika anda ingin mempublikasikan ini CSV online dan pengguna mungkin memiliki Excel, saya kira anda harus mempublikasikan kedua versi dan menyarankan bahwa orang-orang yang memeriksa berkas memberikan jumlah yang benar dari baris.

Jadi semua rincian yang saya've telah mampu mengumpulkan untuk mendapatkan ini untuk bekerja adalah:

  1. File harus disimpan sebagai UTF-8 dengan BOM, yang adalah apa Notepad ketika anda pilih UTF-8. Saya mencoba UTF-8 tanpa BOM (dapat diaktifkan dengan mudah di Notepad++), tapi kemudian double-klik dokumen yang gagal.
  2. Anda harus menggunakan koma atau titik koma pemisah, tapi bukan salah satu yang pemisah desimal dalam Pengaturan Regional. Mungkin karakter lain yang bekerja, tapi aku don't tahu di mana.
  3. Anda harus menyebutkan bidang-bidang yang mengandung newline dengan " karakter.
  4. I've digunakan Windows line-ujung (\r\n) baik di bidang teks dan sebagai catatan pemisah, yang bekerja.
  5. Anda harus klik dua kali file tersebut untuk membukanya, mengimpor data dari teks doesn't bekerja.

Semoga ini bisa membantu seseorang.

Komentar (10)
Larutan

Saya akhirnya menemukan masalah!

Ternyata bahwa kita sedang menulis file menggunakan Unicode encoding, bukan ASCII atau UTF-8. Mengubah pengkodean pada FileStream tampaknya untuk memecahkan masalah.

Terima kasih semua orang untuk semua saran anda!

Komentar (6)

Jawaban Singkat

Menghapus baris/linefeed karakter (\n dengan Notepad++). Excel akan tetap mengenali karakter carriage return (\r) untuk memisahkan catatan.

Jawaban Panjang

Seperti yang disebutkan newline karakter yang didukung dalam bidang CSV tetapi Excel tidak't selalu menangani mereka dengan anggun. Saya menghadapi masalah yang sama dengan pihak ketiga CSV yang mungkin memiliki masalah pengkodean tetapi didn't meningkatkan dengan pengkodean perubahan.

Apa yang bekerja untuk saya adalah menghapus semua karakter newline (\n). Ini memiliki efek runtuh bidang untuk satu record dengan asumsi bahwa data yang dipisahkan oleh kombinasi dari carriage return dan newline (CR/LF). Excel kemudian akan benar mengimpor file dan mengakui rekor baru dengan carriage return.

Jelas cleaner adalah solusi untuk pertama menggantikan real baris (\r\n) dengan sementara karakter kombinasi, mengganti baris baru (\n) dengan memisahkan karakter pilihan anda (misalnya koma di sebuah titik koma file) dan kemudian mengganti sementara karakter dengan tepat garis baru lagi.

Komentar (1)

Jika field berisi spasi, Excel mengabaikan kutip ganda sebagai teks kualifikasi. Solusinya adalah untuk menghilangkan terkemuka spasi antara tanda koma (field separator) dan kutip ganda. Misalnya:

Rusak:
Nama,Judul,Deskripsi,
"John", "Tn", "Saya deskripsi rinci"

Kerja:
Nama,Judul,Deskripsi,
"John","Tn","Saya deskripsi rinci"

Komentar (2)

+1 pada J Ashley's komentar. Aku berlari ke dalam masalah ini juga. Ternyata Excel membutuhkan:

  • Karakter newline("\n") di quoted string

  • Carriage return dan baris baru di antara setiap baris.

E. g. "Test", "Multiline item\n multiline item"\r\n "Test2", "Multiline item\n multiline item"\r\n

Saya menggunakan notepad ++ untuk membatasi setiap baris dengan benar dan hanya menggunakan baris baru dalam string. Menemukan ini dengan membuat multiline entri kosong excel doc dan membuka csv di notepad ++.

Komentar (1)

Menggunakan Google Spreadsheet dan mengimpor file CSV.

Kemudian anda dapat mengekspor yang digunakan di Excel

Komentar (2)

Jika ada yang tersandung di thread ini dan mencari jawaban yang pasti di sini berjalan (kredit kepada orang yang menyebutkan LibreOffice:

  1. Install LibreOffice
  2. Buka Calc dan impor file
  3. Saya txt file yang memiliki bidang yang dipisahkan oleh , dan karakter bidang tertutup di "
  4. simpan sebagai file ODS
  5. Membuka file ODS di Excel
  6. Simpan sebagai .xls(x)
  7. Dilakukan.
  8. Ini bekerja dengan baik bagi saya dan menyelamatkan saya, berkali-kali!
Komentar (1)

Paste ke Notepad++, pilih Encoding > Encode dalam ANSI, copy semua lagi dan paste ke Excel :)

Komentar (0)

Pengalaman saya dengan Excel 2010 pada WinXP dengan pengaturan regional perancis

  • pemisah impor csv harus sesuai dengan daftar pemisah pengaturan regional (; dalam kasus saya)
  • anda harus klik dua kali pada file dari explorer. don't membukanya dari Excel
Komentar (0)

Saya punya masalah yang sama. Aku punya beberapa twitter data di MySQL. Data-data yang telah Line feed( LF atau \n) dengan data. Aku punya kebutuhan mengekspor data MySQL ke excel. LF adalah mengacaukan saya impor dari file csv. Jadi saya melakukan hal berikut -

1. From MySQL exported to CSV with Record separator as CRLF
2. Opened the data in notepad++ 
3. Replaced CRLF (\r\n) with some string I am not expecting in the Data. I used ###~###! as replacement of CRLF
4. Replaced LF (\n) with Space
5. Replaced ###~###! with \r\n, so my record separator are back.
6. Saved and then imported into Excel

CATATAN - Saat mengganti CRLF atau LF jangan lupa untuk Memeriksa Excended (\n,\r,\t... Centang [lihat sebelah kiri bawah Kotak Dialog)

Komentar (0)

Sekilas

Hampir 10 tahun setelah posting asli, Excel belum't ditingkatkan dalam mengimpor file CSV. Namun, saya menemukan bahwa itu adalah jauh lebih baik dalam mengimpor tabel HTML. Jadi, satu dapat menggunakan Python untuk mengkonversi CSV ke HTML dan kemudian impor yang dihasilkan HTML ke Excel.

Keuntungan dari pendekatan ini adalah: (a) bekerja dengan andal, (b) anda don't perlu untuk mengirim data anda ke layanan pihak ketiga (misalnya Google sheets), (c) tidak ada tambahan "lemak" instalasi yang diperlukan (LibreOffice, Nomor, dll.) untuk sebagian besar pengguna, (d) tingkat yang lebih tinggi dari campur tangan dengan CR/LF karakter dan BOM spidol, (e) tidak perlu mengutak-atik pengaturan lokal.

Langkah-langkah

Berikut langkah-langkah yang dapat dijalankan pada setiap bash-seperti shell selama Python 3 diinstal. Meskipun Python dapat digunakan untuk langsung membaca CSV, csvkit digunakan untuk melakukan perantara konversi ke JSON. Hal ini memungkinkan kita untuk menghindari harus berurusan dengan CSV seluk-beluk di kode Python.

Pertama, simpan script berikut sebagai json2html.py. Script membaca file JSON dari stdin dan kesedihan itu sebagai sebuah tabel HTML: ``python

!/usr/bin/env python3

import sys, json, html

jika nama == 'utama': header_emitted = False make_th = lambda s: "%s" % (html.melarikan diri(s jika s yang lain ",")) make_td = lambda s: "%s" % (html.melarikan diri(s jika s yang lain ",")) make_tr = lambda l, make_cell: "%s" % ( "".bergabung([make_cell(v) untuk v di l]) ) print("\n

") untuk baris di json.beban(sys.stdin): lk, lv = zip(*baris.item()) jika tidak header_emitted: cetak(make_tr(lk, make_th)) header_emitted = True cetak(make_tr(lv, make_td)) print("</table\n") ``

Kemudian, instal csvkit dalam lingkungan virtual dan menggunakan csvjson untuk memberi masukan file script kami. Itu adalah ide yang baik untuk menonaktifkan sel jenis menebak dengan aku argumen: shell $ virtualenv -p python3 pyenv $ . ./pyenv/bin/mengaktifkan $ pip menginstal csvkit $ csvjson -saya masukan.csv | python3 json2html.py > output.html

Sekarang output.html dapat diimpor di Excel. Jeda baris dalam sel akan telah diawetkan.

Opsional, anda mungkin ingin untuk pembersihan anda Python lingkungan virtual: shell $ menonaktifkan $ rm -rf pyenv

Komentar (0)

Apa yang bekerja untuk saya, diimpor ke Excel secara langsung diatur bahwa impor ini dilakukan sebagai format teks, bukan sebagai format csv. M/

Komentar (0)

hanya membuat lembaran baru dengan sel-sel dengan linebreak, simpan ke csv kemudian buka dengan editor yang dapat menunjukkan karakter akhir baris (seperti notepad++). Dengan melakukan itu anda akan melihat bahwa linebreak dalam sel dikodekan dengan LF sementara "nyata" akhir baris kode dengan CR LF. Voilà, sekarang anda tahu bagaimana untuk menghasilkan "benar" file csv untuk excel.

Komentar (0)

Saya juga punya masalah ini: ie., file csv (comma delimited, double quote dibatasi string) dengan LF di quoted string. Ini adalah download Persegi file. Saya melakukan impor data tapi malah mengimpor sebagai file teks, diimpor sebagai "dari HTML". Kali ini diabaikan LF's di quoted string.

Komentar (0)

Ini bekerja pada Mac, menggunakan csv dan membuka file di Excel.

Menggunakan python untuk menulis file csv.

data= ',"baris pertama dari sel a1\r 2nd line di sel a1\r 3 baris di sel a1","sel b1","1st line di sel c1\r 2nd line di sel c1"\n"baris pertama di sel a2"\n'

file.write(data)

Komentar (0)

Pada MacOS mencoba menggunakan Angka

Jika anda memiliki akses ke Mac OS saya telah menemukan bahwa Apple spreadsheet Nomor melakukan pekerjaan yang baik untuk membongkar kompleks multi-line CSV file Excel tidak bisa menangani. Hanya membuka .csv dengan angka-Angka dan kemudian ekspor ke Excel.

Komentar (0)

Dalam kasus saya membuka CSV di notepad++, dan menambahkan SEP="," sebagai baris pertama memungkinkan saya membuka CSV dengan jeda baris dan utf-8 di Excel tanpa masalah

Komentar (0)

Mengganti separator dengan TAB(\t) bukan koma(,). Kemudian membuka file dalam editor anda (Notepad dll.), menyalin konten dari sana, kemudian paste di file Excel.

Komentar (1)