Saya sedang mengerjakan fitur untuk mengekspor hasil pencarian ke file CSV untuk dibuka di Excel. Salah satu bidang adalah bidang teks bebas, yang mungkin berisi pemisah baris, koma, kutipan, dll. Untuk mengatasi ini, saya telah membungkus bidang tersebut dalam tanda kutip ganda (").
Namun, ketika saya mengimpor data ke Excel 2007, mengatur pembatas yang sesuai, dan mengatur kualifikasi teks untuk menggandakan penawaran, jeda baris masih membuat catatan baru di jeda baris, di mana saya akan melihat seluruh bidang teks dalam sel tunggal.
Saya juga mencoba mengganti CR / LF (\ r \ n) hanya dengan CR (\ r), dan sekali lagi hanya dengan LF (\ n), tetapi tidak berhasil.
Adakah orang lain yang mengalami perilaku ini, dan jika demikian, bagaimana Anda memperbaikinya?
TIA,
-J
EDIT:
Ini file cepat yang saya tulis dengan tangan untuk menduplikasi masalah.
ID, Nama, Deskripsi
"12345", "Smith, Joe", "Hai.
Nama saya Joe."
Ketika saya mengimpor ini ke Excel 2007, saya berakhir dengan baris tajuk, dan dua catatan. Perhatikan bahwa koma dalam "Smith, Joe" sedang ditangani dengan benar. Hanya jeda baris yang menyebabkan masalah.
sumber
Jawaban:
Excel (setidaknya di Office 2007 pada XP) dapat berperilaku berbeda tergantung pada apakah file CSV diimpor dengan membukanya dari menu File-> Open atau dengan mengklik dua kali pada file di Explorer.
Saya memiliki file CSV yang ada dalam pengkodean UTF-8 dan berisi baris baru di beberapa sel. Jika saya membuka file ini dari menu File-> Open Excel, wizard "import CSV" muncul dan file tidak dapat diimpor dengan benar: baris baru memulai baris baru bahkan ketika dikutip. Jika saya membuka file ini dengan mengklik dua kali di jendela Explorer, maka itu dibuka dengan benar tanpa campur tangan wizard.
sumber
Tidak ada solusi yang disarankan bekerja untuk saya.
Apa yang sebenarnya berfungsi (dengan penyandian apa saja):
Salin / tempel data dari file csv (buka di Editor), lalu lakukan "teks dalam kolom" -> tidak berfungsi, oke.
Buka tab berikutnya dan salin / tempel lagi (hal yang sama dengan apa yang sudah Anda dapatkan di clipboard) -> otomatis berfungsi sekarang.
sumber
Jika Anda melakukan ini secara manual, unduh LibreOffice dan gunakan LibreOffice Calc untuk mengimpor CSV Anda. Ini melakukan pekerjaan yang jauh lebih baik dari hal-hal seperti ini daripada versi Excel yang pernah saya coba, dan dapat menyimpan ke XLS atau XLSX seperti yang diperlukan jika Anda perlu mentransfer ke Excel setelahnya.
Tetapi jika Anda terjebak dengan Excel dan membutuhkan perbaikan yang lebih baik, sepertinya ada cara. Tampaknya tergantung lokal (yang tampaknya idiot, menurut pendapat saya yang sederhana). Saya tidak punya Excel 2007, tapi saya punya Excel 2010, dan contoh yang diberikan:
tidak bekerja Saya menulisnya di Notepad dan memilih Simpan sebagai ..., dan di sebelah tombol Simpan Anda dapat memilih penyandian. Saya memilih UTF-8 seperti yang disarankan, tetapi tidak berhasil. Mengubah koma ke titik koma berhasil untuk saya. Saya tidak mengubah apa pun, dan itu hanya berhasil. Jadi saya mengubah contoh agar terlihat seperti ini, dan memilih pengkodean UTF-8 saat menyimpan dalam Notepad:
Tapi ada tangkapan! Satu-satunya cara kerjanya adalah jika Anda mengklik dua kali file CSV untuk membukanya di Excel. Jika saya mencoba mengimpor data dari teks dan memilih CSV ini, maka masih gagal pada baris baru yang dikutip.
Tapi ada tangkapan lain ! Pemisah bidang kerja (koma dalam contoh asli, titik koma dalam kasus saya) tampaknya bergantung pada Pengaturan Regional sistem (ditetapkan di bawah Panel Kontrol -> Wilayah dan Bahasa). Di Norwegia, koma adalah pemisah desimal. Excel tampaknya menghindari karakter ini dan lebih memilih titik koma sebagai gantinya. Saya memiliki akses ke komputer lain yang diatur ke Inggris UK lokal, dan di komputer itu, contoh pertama dengan pemisah koma berfungsi dengan baik (hanya pada klik dua kali), dan yang dengan titik koma sebenarnya gagal! Begitu banyak untuk interoperabilitas. Jika Anda ingin menerbitkan CSV online ini dan pengguna mungkin memiliki Excel, saya kira Anda harus menerbitkan kedua versi dan menyarankan agar orang memeriksa file mana yang memberikan jumlah baris yang benar.
Jadi semua detail yang saya dapat kumpulkan untuk membuatnya bekerja adalah:
Semoga ini bisa membantu seseorang.
sumber
=FOO(1;2)
bukan=FOO(1,2)
), tetapi jelas tidak benar bahwa Excel menerapkan ini ke parser format file (program mana yang mem-parsing format file standar tergantung pada lokal ??? )Saya akhirnya menemukan masalahnya!
Ternyata kami menulis file menggunakan Unicode encoding, bukan ASCII atau UTF-8. Mengubah pengkodean pada FileStream tampaknya menyelesaikan masalah.
Terima kasih semuanya atas semua saran Anda!
sumber
Jawaban singkat
Hapus karakter baris baru / umpan baris (
\n
dengan Notepad ++). Excel masih akan mengenali karakter carriage return (\r
) untuk memisahkan catatan.Jawaban panjang
Seperti disebutkan, karakter baris baru didukung di dalam bidang CSV tetapi Excel tidak selalu menanganinya dengan anggun. Saya menghadapi masalah serupa dengan CSV pihak ketiga yang mungkin memiliki masalah penyandian tetapi tidak membaik dengan perubahan penyandian.
Apa yang berhasil bagi saya adalah menghapus semua karakter baris baru (
\n
). Ini memiliki efek kolaps bidang ke satu rekaman dengan asumsi bahwa catatan Anda dipisahkan oleh kombinasi carriage return dan baris baru (CR / LF). Excel kemudian akan mengimpor file dengan benar dan mengenali catatan baru dengan carriage return.Jelas solusi yang lebih bersih adalah dengan terlebih dahulu mengganti baris baru (
\r\n
) dengan kombinasi karakter sementara, mengganti baris baru (\n
) dengan karakter pilihan Anda yang terpisah (misalnya koma dalam file titik koma) dan kemudian mengganti karakter sementara dengan baris baru yang benar lagi.sumber
\n
antara garis dan\r\n
nilai-nilai di dalam. Baru saja menghapus yang terakhir di Notepad ++.+1 pada komentar J Ashley. Saya mengalami masalah ini juga. Ternyata Excel membutuhkan:
Karakter baris baru ("\ n") dalam string yang dikutip
Pengembalian carriage dan baris baru di antara setiap baris.
Misalnya "Tes", "Item multiline \ n item multiline" \ r \ n "Test2", "Item multiline \ n item multiline" \ r \ n
Saya menggunakan notepad ++ untuk membatasi setiap baris dengan benar dan hanya menggunakan baris baru dalam string. Menemukan ini dengan membuat entri multiline dalam dokumen excel kosong dan membuka csv di notepad ++.
sumber
Jika bidang berisi ruang utama, Excel mengabaikan kuotasi ganda sebagai kualifikasi teks. Solusinya adalah menghilangkan spasi terdepan antara koma (pemisah bidang) dan kutipan ganda. Sebagai contoh:
Patah:
Nama, Judul, Deskripsi
"John", "Mr.", "Deskripsi detail saya"
Bekerja:
Nama, Judul, Deskripsi
"John", "Mr.", "Deskripsi detail saya"
sumber
Gunakan Google Sheets dan impor file CSV.
Kemudian Anda bisa mengekspornya untuk digunakan di Excel
sumber
Jika ada yang tersandung di utas ini dan sedang mencari jawaban yang pasti di sini (kredit untuk orang yang menyebutkan LibreOffice:
1) Instal LibreOffice 2) Buka Calc dan impor file 3) File txt saya memisahkan bidang-bidangnya, dan bidang karakter dilampirkan dalam "4) simpan sebagai file ODS 5) Buka file ODS di Excel 6) Simpan sebagai .xls (x) 7) Selesai 8) Ini bekerja dengan baik untuk saya dan menyelamatkan saya BIGTIME!
sumber
Tempel ke Notepad ++, pilih Encoding> Encode di ANSI, salin sekali lagi dan tempel ke Excel :)
sumber
Saya punya masalah serupa. Saya punya beberapa data twitter di MySQL. Data memiliki Umpan baris (LF atau \ n) dengan dalam data. Saya memiliki persyaratan untuk mengekspor data MySQL ke excel. LF mengacaukan impor file csv saya. Jadi saya melakukan yang berikut -
CATATAN- Saat mengganti CRLF atau LF jangan lupa untuk Memeriksa yang Disukai (\ n, \ r, \ t ... Kotak Centang [lihat bagian kiri bawah Kotak Dialog)
sumber
Pengalaman saya dengan Excel 2010 di WinXP dengan pengaturan regional Prancis
sumber
Excel sangat rusak ketika berhadapan dengan CSV. LibreOffice melakukan pekerjaan yang jauh lebih baik. Jadi, saya menemukan bahwa:
sumber
Gambaran
Hampir 10 tahun setelah posting asli, Excel belum membaik dalam mengimpor file CSV. Namun, saya menemukan bahwa jauh lebih baik dalam mengimpor tabel HTML. Jadi, seseorang dapat menggunakan Python untuk mengonversi CSV ke HTML dan kemudian mengimpor HTML yang dihasilkan ke Excel.
Keuntungan dari pendekatan ini adalah: (a) ia bekerja dengan andal, (b) Anda tidak perlu mengirim data Anda ke layanan pihak ketiga (mis. Google sheets), (c) tidak diperlukan instalasi "gemuk" tambahan (LibreOffice, Angka dll.) Untuk sebagian besar pengguna, (d) tingkat lebih tinggi daripada campur tangan dengan karakter CR / LF dan penanda BOM, (e) tidak perlu mengutak-atik pengaturan lokal.
Langkah
Langkah-langkah berikut ini dapat dijalankan pada bash-like shell selama Python 3 diinstal. Meskipun Python dapat digunakan untuk membaca CSV secara langsung, csvkit digunakan untuk melakukan konversi antara ke JSON. Ini memungkinkan kita untuk menghindari keharusan berurusan dengan seluk-beluk CSV dalam kode Python kita.
Pertama, simpan skrip berikut sebagai
json2html.py
. Script membaca file JSON dari stdin dan membuangnya sebagai tabel HTML:Kemudian, instal csvkit di lingkungan virtual dan gunakan
csvjson
untuk mengumpankan file input ke skrip kami. Sebaiknya nonaktifkan menebak jenis sel dengan-I
argumen:Sekarang
output.html
dapat diimpor dalam Excel. Pemutusan garis dalam sel akan dipertahankan.Secara opsional, Anda mungkin ingin membersihkan lingkungan virtual Python Anda:
sumber
Ini untuk Excel 2016:
Baru saja mengalami masalah yang sama dengan jeda baris di dalam file csv dengan Excel Wizard.
Setelah itu saya mencobanya dengan Fitur "Permintaan Baru": Data -> Permintaan Baru -> Dari File -> Dari CSV -> Pilih File -> Impor -> Muat
Itu bekerja dengan sempurna dan solusi yang sangat cepat untuk Anda semua yang memiliki masalah yang sama.
sumber
Apa yang baru saja bekerja untuk saya, mengimpor ke Excel secara langsung asalkan impor dilakukan sebagai format teks dan bukan sebagai format csv. M /
sumber
cukup buat lembar baru dengan sel dengan linebreak, simpan ke csv lalu buka dengan editor yang dapat menunjukkan karakter garis akhir (seperti notepad ++). Dengan melakukan itu, Anda akan melihat bahwa linebreak dalam sel dikodekan dengan LF sedangkan ujung "nyata" adalah kode dengan CR LF. Voa, sekarang Anda tahu cara membuat file csv "benar" untuk excel.
sumber
Saya juga punya masalah ini: mis., File csv (dibatasi koma, string kutipan ganda dibatasi) dengan LF dalam string yang dikutip. Ini adalah file Square yang diunduh. Saya melakukan impor data tetapi alih-alih mengimpor sebagai file teks, diimpor sebagai "dari HTML". Kali ini mengabaikan LF di string yang dikutip.
sumber
Ini berfungsi pada Mac, menggunakan csv dan membuka file dalam Excel.
Menggunakan python untuk menulis file csv.
data = '"baris pertama sel a1 baris ke-2 di sel a1 baris ke-3 di sel a1", "sel b1", "baris 1 di sel c1 baris ke-2 di sel c1" \ n "baris pertama di sel sel a2 "\ n '
file.write (data)
sumber
Di MacOS coba gunakan Angka
Jika Anda memiliki akses ke Mac OS, saya telah menemukan bahwa Numbers spreadsheet Apple melakukan pekerjaan yang baik untuk membuka file CSV multi-line yang kompleks yang tidak dapat ditangani oleh Excel. Buka saja
.csv
dengan Angka dan kemudian ekspor ke Excel.sumber
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 masalahsumber
Ganti pemisah dengan TAB (\ t) alih-alih koma (,). Kemudian buka file di editor Anda (Notepad dll), salin konten dari sana, lalu rekatkan dalam file Excel.
sumber
Jeda baris di dalam tanda kutip ganda baik-baik saja menurut standar CSV. Penguraian jeda baris di Excel tergantung pada pengaturan OS pemisah daftar:
Windows: Anda perlu mengatur pemisah daftar menjadi koma (Wilayah dan bahasa »Format» Tingkat Lanjut) Sumber: /superuser/238944/how-to-force-excel-to-open-csv-files- dengan-data-diatur-dalam-kolom # answer-633302
Mac: Perlu mengubah wilayah ke AS (kemudian secara manual mengubah kembali pengaturan lain ke preferensi Anda) Sumber: https://answers.microsoft.com/en-us/mac/forum/macoffice2016-macexcel/line-separator-comma -semicolon-in-excel-2016-for / 7db1b1a0-0300-44ba-ab9b-35d1c40159c6 (lihat jawaban NewmanLee)
Jangan lupa untuk menutup Excel sepenuhnya sebelum mencoba lagi.
Saya telah berhasil mereplikasi masalah ini dan dapat memperbaikinya menggunakan hal di atas di Max dan Windows.
sumber