Membuat file CSV untuk Excel, cara memiliki baris baru di dalam suatu nilai

158

Saya perlu membuat file untuk Excel, beberapa nilai dalam file ini berisi beberapa baris.

ada juga teks non-Inggris di sana, jadi file tersebut harus Unicode.

File yang saya hasilkan sekarang terlihat seperti ini: (dalam UTF8, dengan teks non-Inggris bercampur dan dengan banyak baris)

Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"

Perhatikan nilai multi-baris terlampir dalam tanda kutip ganda, dengan baris harian normal di dalamnya.

Menurut apa yang saya temukan di web ini seharusnya berfungsi, tetapi tidak, setidaknya tidak memenangkan file Excel 2007 dan UTF8, Excel memperlakukan baris ke-3 sebagai baris data kedua bukan sebagai baris kedua dari baris data pertama .

Ini harus dijalankan pada mesin pelanggan saya dan saya tidak memiliki kontrol atas versi Excel mereka, jadi saya perlu solusi yang akan bekerja dengan Excel 2000 dan yang lebih baru.

Terima kasih

EDIT: Saya "memecahkan" masalah saya dengan memiliki dua opsi CSV, satu untuk Excel (Unicode, tab terpisah, tidak ada baris baru di bidang) dan satu untuk seluruh dunia (UTF8, CSV standar).

Bukan apa yang saya cari tetapi setidaknya itu berhasil (sejauh ini)

Nir
sumber
1
FYI: Ini semua bekerja dengan baik di LibreOffice dan mengimpor CSV jauh lebih mudah.
user2061057
9
Jawaban yang diterima tentang ruang ekstra sangat membingungkan sekarang karena Anda telah mengedit pertanyaan Anda dan menghapus ruang ...
Matti Virkkunen

Jawaban:

70

Anda harus memiliki karakter spasi di awal bidang SAJA di mana karakter ruang merupakan bagian dari data. Excel tidak akan menghapus spasi terkemuka. Anda akan mendapatkan ruang yang tidak diinginkan di pos dan bidang data Anda. Lebih buruk lagi, "yang seharusnya "melindungi" bahwa baris-break di kolom ketiga akan diabaikan karena tidak pada awal bidang.

Jika Anda memiliki karakter non-ASCII (dikodekan dalam UTF-8) dalam file, Anda harus memiliki BOM UTF-8 (3 byte, hex EF BB BF) di awal file. Kalau tidak, Excel akan menafsirkan data sesuai dengan pengkodean default lokal Anda (misalnya cp1252) alih-alih utf-8, dan karakter non-ASCII Anda akan dibuang ke tempat sampah.

Komentar berikut berlaku untuk Excel 2003, 2007 dan 2013; tidak diuji di Excel 2000

Jika Anda membuka file dengan mengklik dua kali pada namanya di Windows Explorer, semuanya berfungsi OK.

Jika Anda membukanya dari dalam Excel, hasilnya bervariasi:

  1. Anda hanya memiliki karakter ASCII dalam file (dan tidak ada BOM): berfungsi.
  2. Anda memiliki karakter non-ASCII (dikodekan dalam UTF-8) dalam file, dengan BOM UTF-8 pada awalnya: ia mengakui bahwa data Anda dikodekan dalam UTF-8 tetapi mengabaikan ekstensi csv dan menjatuhkan Anda ke dalam Teks Impor not-a-Wizard , sayangnya dengan hasil yang Anda dapatkan masalah line-break.

Opsi meliputi:

  1. Latih pengguna untuk tidak membuka file dari dalam Excel :-(
  2. Pertimbangkan untuk menulis file XLS secara langsung ... ada paket / pustaka yang tersedia untuk melakukannya dengan Python / Perl / PHP / .NET / etc
John Machin
sumber
1
Terima kasih, saya memperbaiki masalah spasi utama dalam pertanyaan, saya mengetik contoh CSV secara manual dan tidak menyalin-tempel dari file nyata, file nyata tidak termasuk spasi, tangkapan yang bagus.
Nir
@Nir: Sekarang mari kita bicara tentang masalah Anda yang sebenarnya. Jadi itu berarti Anda memiliki BOM UTF-8, dan membuka file dari dalam Excel dan mendapat Wisaya Impor Teks tidak mengakui bahwa baris Value3 Anda harus "dilindungi" - benar? Atau mungkin Anda tidak memiliki BOM UTF-8 dan Anda harus memberi tahu TIW bahwa data Anda telah dikodekan UTF-8 dan itu masih membingungkan baris baru?
John Machin
Bagaimana jika saya ingin menggunakan | sebagai pemisah bidang, baris baru sebagai pemisah rekaman, gunakan "untuk melindungi konten bidang teks, dan bidang teks mungkin berisi |,", dan baris baru. Apakah ini mungkin?
Giorgio
1
FYI: Saya punya Excel2007 dan CSV yang diekspor dari sistem Redmine. Setelah menambahkan UTF-8 BOM (EFBBBF) pada awalnya, Excel membuka file dengan sempurna. Baris baru yang disematkan pada kolom "deskripsi masalah" diproses dengan benar, dan struktur baris tidak rusak, dan semua karakter nasional dibaca dengan benar (mereka dibuang saat membaca tanpa UTF8 BOM). Excel bahkan belum menampilkan panduan impor teks. Saat ini, CSV itu sekarang memiliki EFBBBFheader, digunakan 0Asebagai pemisah baris, dan 0D0Asebagai baris baru di dalam string dalam sel teks.
quetzalcoatl
1
Jika Anda mencoba membuat Excel untuk OS X membaca CSV Anda dengan benar, serta Excel untuk Windows, berikut ini sumber yang bagus: stackoverflow.com/questions/4348802/…
Alexandre R. Janini
25

Setelah banyak mengutak-atik, inilah konfigurasi yang berfungsi menghasilkan file di Linux, membaca di Windows + Excel, meskipun format baris baru yang disematkan tidak sesuai dengan standar :

  • Baris baru dalam suatu bidang harus \ n (dan jelas dikutip dalam tanda kutip ganda)
  • Akhir catatan: \ r \ n
  • Pastikan Anda tidak memulai bidang dengan yang sama, jika tidak akan diperlakukan sebagai rumus dan terpotong

Di Perl, saya menggunakan Text :: CSV untuk melakukan ini sebagai berikut:

use Text::CSV;

open my $FO, ">:encoding(utf8)", $filename or die "Cannot create $filename: $!";
my $csv = Text::CSV->new({ binary => 1, eol => "\r\n" });

#for each row...:
$csv -> print ($FO, \@row);
Ian
sumber
3
Ya itu yang melakukannya. Saya dapat mengkonfirmasi ini berfungsi dengan Windows + Excel, OSX + Numbers dan Google Documents.
Yorick Sijsling
3
Menggunakan \ n (juga mencoba \ n) di bidang yang dilingkupi ", dan menggunakan \ r \ n untuk membagi baris. Masih tidak memperbaiki masalah ini untuk saya di Excel 2010. Saya telah mencoba ANSI dan UTF8 dengan BOM. Tidak berhasil
nl-x
1
Tapi ini karena saya menggunakan | sebagai pemisah bidang. Jika saya menggunakan; sebagai pemisah bidang, masalahnya masih ada saat mengimpor data CSV, tetapi masalahnya hilang saat membuka CSV dengan mengklik dua kali di File Explorer.
nl-x
2
Jawaban Ian tidak berfungsi untuk saya di Excel 2003/2010 di Windows 7. Saya mencoba menggunakan hex editor untuk mengedit file BOM UTF-8 saya dan menghapus 0D (\ r) dari bit '0D0A' (\ r \ n) untuk baris baru dalam bidang. Tapi itu tidak berhasil.
Dan W
Jawaban ini berhasil bagi saya (dengan nol modifikasi!) Menggunakan Excel 2010 dan WIndows 7; juga menggunakan perl v5.14.2 yang dikirimkan bersama cygwin. Semua baris baru saya yang tertanam semuanya \n. Terima kasih
ardnew
21

Baru-baru ini saya memiliki masalah yang sama, saya menyelesaikannya dengan mengimpor file HTML , contoh dasarnya akan seperti ini:

<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
  <head>
    <style>
      <!--
      br {mso-data-placement:same-cell;}
      -->
    </style>
  </head>
  <body>
    <table>
      <tr>
        <td>first line<br/>second line</td>
        <td style="white-space:normal">first line<br/>second line</td>
      </tr>
    </table>
  </body>
</html>

Saya tahu, ini bukan CSV, dan mungkin bekerja secara berbeda untuk berbagai versi Excel, tapi saya pikir ini patut dicoba.

Saya harap ini membantu ;-)

dtldarek
sumber
35
@GusDeCooL Kata-kata dari kalimat pertama OP "Saya perlu membuat file untuk Excel, beberapa nilai dalam file ini berisi beberapa baris." menyarankan bahwa mungkin tidak perlu berupa file CSV. Selain itu, format T&J juga berlaku untuk pembaca lain, dan itu mungkin merupakan pilihan yang layak untuk beberapa dari mereka (bahkan jika OP harus menggunakan CSV). Saya menemukan downvote Anda tidak masuk akal (masih, terima kasih telah menjelaskan alasannya).
dtldarek
1
Sebenarnya ini adalah pilihan terbaik bagi saya; terima kasih telah menyarankannya!
Jordan Grey
8

Perlu dicatat bahwa ketika file .CSV memiliki bidang yang dibungkus dengan tanda kutip ganda yang berisi jeda baris, Excel tidak akan mengimpor file .CSV dengan benar jika file .CSV ditulis dalam format UTF-8. Excel memperlakukan jeda baris seolah-olah itu CR / LF dan memulai baris baru. Spreadsheet rusak. Itu tampaknya benar bahkan jika semi-titik dua digunakan sebagai pembatas lapangan (bukan koma).

Masalahnya dapat diatasi dengan menggunakan Windows Notepad untuk mengedit file .CSV, menggunakan File> Save As ... untuk menyimpan file, dan sebelum menyimpan file, mengubah pengkodean file dari UTF-8 ke ANSI. Setelah file disimpan dalam format ANSI, maka saya menemukan bahwa Microsoft Excel 2013 yang berjalan pada Windows 7 Professional akan mengimpor file dengan benar.

OneSkyWalker
sumber
7

Baris baru di dalam nilai tampaknya berfungsi jika Anda menggunakan titik koma sebagai pemisah, bukan koma atau tab, dan menggunakan tanda kutip.

Ini berfungsi untuk saya di Excel 2010 dan Excel 2000. Namun, yang mengejutkan, ini hanya berfungsi saat Anda membuka file sebagai spreadsheet baru, bukan ketika Anda mengimpornya ke spreadsheet yang ada menggunakan fitur impor data.

Esben
sumber
ya, tapi kemudian saya tidak menemukan opsi untuk membuat garis akhir dengan titik koma di excel
GusDeCooL
Bagaimana jika beberapa data teks aktual mengandung titik koma? Ini tidak akan berhasil.
htm11h
4

Pada PC, karakter ASCII # 10 adalah apa yang Anda inginkan untuk menempatkan baris baru dalam suatu nilai.

Namun, begitu Anda masuk ke Excel, Anda perlu memastikan bungkus kata dihidupkan untuk sel multi-baris atau baris baru akan muncul sebagai kotak persegi.

penjahat
sumber
3

Ini tidak akan berfungsi jika Anda mencoba mengimpor file ke EXCEL.

Kaitkan ekstensi file csv dengan EXCEL.EXE sehingga Anda dapat memanggil EXCEL dengan mengklik dua kali file csv.

Di sini saya menempatkan beberapa teks diikuti oleh NewLine Char diikuti oleh beberapa teks lagi DAN melampirkan seluruh string dengan tanda kutip ganda.

Jangan menggunakan CR karena EXCEL akan menempatkan bagian dari string di sel berikutnya.

""text" + NL + "text""

Ketika Anda memanggil EXCEL, Anda akan melihat ini. Anda mungkin harus mengukur tinggi secara otomatis untuk melihat semuanya. Di mana garis putus akan tergantung pada lebar sel.

2

TANGGAL

Berikut kode di Basic

CHR$(34,"2", 10,"DATE", 34)
Peabody
sumber
2

Saya menemukan ini dan itu berhasil untuk saya

$delimiter = ',';
$enc1 = '"';
$enc2 = '""';

Lalu di mana Anda harus memiliki barang-barang terlampir

$myfile = ('/path/to/myfile.csv');
//erase any previous contents
$fp = fopen($myfile, 'w+');
fwrite($fp, $enc1 .  'Column Heading 1' . $enc1 . $delimiter );
//append to new file
$fp2 = fopen($myfile, 'a');
fwrite($fp2, $enc1 .  'Column Heading 2' . $enc1 . $delimiter );

.....

fwrite($fp2, $enc1 .  'Last Column Heading' . $enc1 . $delimiter. PHP_EOL );

Lalu ketika Anda perlu menulis sesuatu - seperti HTML yang menyertakan "Anda bisa melakukan ini

fwrite($fp2, $enc2 .  $myhtmlstring . $enc2 . $delimiter);

Baris baru diakhiri dengan . PHP_EOL

Bagian akhir skrip mencetak tautan sehingga pengguna dapat mengunduh file tersebut.

echo 'Click <a href="myfile.csv">here</a> to download file';
Lisa Simpson
sumber
1

File UTF yang berisi BOM akan menyebabkan Excel memperlakukan baris baru secara harfiah bahkan di bidang itu dikelilingi oleh tanda kutip. (Diuji Excel 2008 Mac)

Solusinya adalah membuat setiap baris baru menjadi carriage return (CHR 13) daripada feed garis.

Stephen
sumber
Excel 2016 tampaknya memperlakukan file CSV saya dengan benar meskipun memiliki BOM UTF8. Namun apa yang membuat semua perbedaan menggunakan ';' sebagai pemisah bidang (yang dilakukan Excel untuk semua lokal yang memiliki ',' sebagai pemisah desimal).
Ale
1

Uji ini: Ini sepenuhnya berfungsi untuk saya: Letakkan baris berikut dalam xxxx.csvfile

hola_x,="este es mi text1"&CHAR(10)&"I sigo escribiendo",hola_a

hola_y,="este es mi text2"&CHAR(10)&"I sigo escribiendo",hola_b

hola_z,="este es mi text3"&CHAR(10)&"I sigo escribiendo",hola_c

Buka dengan excel.

dalam beberapa kasus akan terbuka secara langsung jika tidak perlu menggunakan kolom untuk konversi data. perluas lebar kolom dan tekan tombol bungkus teks. atau memformat sel dan mengaktifkan bungkus teks.

dan terima kasih atas saran lainnya, tetapi mereka tidak berhasil untuk saya. Saya di windows env murni, dan tidak ingin bermain dengan unicode atau hal lucu lainnya.

Dengan cara ini Anda meletakkan formula dari csv ke excel. Mungkin banyak kegunaan untuk metode kerja ini. (perhatikan = sebelum tanda kutip)

pd: Dalam saran Anda, harap cantumkan beberapa sampel data, bukan hanya kodenya.

Ivan Cev
sumber
1

menempatkan "\" di akhir setiap baris sebenarnya memiliki efek dari jeda baris di excel, tetapi dalam .csv menghilang dan meninggalkan kekacauan yang buruk di mana setiap baris terjepit melawan berikutnya tanpa spasi dan tanpa jeda baris

Duncan Wallace
sumber
0

Cara kita melakukannya (kita menggunakan VB.Net) adalah melampirkan teks dengan baris baru di Chr (34) yang merupakan karakter yang mewakili tanda kutip ganda dan mengganti semua karakter CR-LF untuk LF.

Sebastian
sumber
0

Biasanya baris baru adalah "\ r \ n". Di CSV saya, saya mengganti "\ r" dengan nilai kosong. Berikut ini adalah kode dalam Javascript:

cellValue = cellValue.replace(/\r/g, "")

Ketika saya membuka CSV di MS Excel, itu bekerja dengan baik. Jika nilai memiliki beberapa baris, itu akan tetap dalam 1 sel tunggal di lembar Excel.

Tam Tran
sumber
0

Untuk File Open saja, sintaksnya adalah

 ,"one\n
 two",...

Yang penting adalah bahwa tidak ada ruang setelah "," pertama. Biasanya spasi baik-baik saja, dan dipangkas jika string tidak dikutip. Tetapi sebaliknya jahat. Butuh waktu beberapa saat untuk memikirkannya.

Tampaknya tidak masalah jika garis itu diakhiri \ n atau \ c \ n.

Pastikan Anda memperluas bilah rumus sehingga Anda benar-benar dapat melihat teks di dalam sel (dapatkan saya setelah hari yang panjang ...)

Sekarang tentu saja, File Open tidak akan mendukung UTF-8 dengan Benar (kecuali ada yang menggunakan trik).

Excel> Data> Dapatkan Data Eksternal > Dari Teks

Dapat diatur ke mode UTF-8 (itu adalah cara daftar font). Namun, dalam hal ini jalur baru sepertinya tidak berfungsi dan saya tidak tahu cara untuk memperbaikinya.

(Satu hal yang mungkin bahwa setelah 30 tahun MS akan melakukan hal ini dengan benar.)

Tuntable
sumber
0

Di Excel 365 saat mengimpor file:

Data -> Dari Teks / CSV -> Pilih File> Transform Data -> Konfigurasi Sumber Data -> Pilih Sumber Data -> Klik Edit Sumber -> Pada dropdown break line pilih Abaikan line break di dalam tanda kutip.

Teks di atas diterjemahkan dari bahasa Portugis sehingga kata-katanya mungkin berbeda dalam bahasa Inggris.

Clodoaldo Neto
sumber
-1

Anda bisa melakukan selanjutnya "\"Value3 Line1 Value3 Line2\"". Ini berfungsi untuk saya menghasilkan file csv di java

Fredy Chica
sumber
-2

Berikut ini pendekatan menarik menggunakan JavaScript ...

  String.prototype.csv = String.prototype.split.partial(/,\s*/);  

  var results = ("Mugan, Jin, Fuu").csv();                        

  console.log(results[0]=="Mugan" &&                                   
         results[1]=="Jin" &&                                     
         results[2]=="Fuu",                                       
         "The text values were split properly");                  
ddeloy
sumber
-3

Mencetak baris HTML baru <br/>ke dalam konten dan membuka excel akan bekerja dengan baik pada excel mana pun

Shashi
sumber
-3

Anda bisa menggunakan pintasan keyboard ALT + Enter.

  1. Pilih sel yang ingin Anda edit
  2. masuk ke mode edit baik dengan mengklik dua kali atau menekan F2 3.Tekan Alt + enter. Ini akan membuat baris baru dalam sel
Meghana Chamarthy
sumber
Bagaimana Anda mengintegrasikannya ke dalam pembuatan file CVS?
jikuja