Apakah mungkin untuk memaksa Excel mengenali file CSF UTF-8 secara otomatis?

455

Saya sedang mengembangkan bagian dari aplikasi yang bertanggung jawab untuk mengekspor beberapa data ke file CSV. Aplikasi ini selalu menggunakan UTF-8 karena sifat multibahasa di semua tingkatan. Tetapi membuka file CSV seperti itu (mengandung misalnya diakritik, huruf cyrillic, huruf Yunani) di Excel tidak mencapai hasil yang diharapkan seperti sesuatu Г„/Г¤, Г–/Г¶. Dan saya tidak tahu bagaimana memaksa Excel memahami bahwa file CSV terbuka dikodekan dalam UTF-8. Saya juga mencoba menentukan UTF-8 BOM EF BB BF, tetapi Excel mengabaikannya.

Apakah ada solusi?

PS Alat apa yang berpotensi berperilaku seperti Excel?


MEMPERBARUI

Saya harus mengatakan bahwa saya telah membingungkan komunitas dengan rumusan pertanyaan. Ketika saya mengajukan pertanyaan ini, saya meminta cara membuka file UTF-8 CSV di Excel tanpa masalah bagi pengguna, dengan cara yang lancar dan transparan. Namun, saya menggunakan formulasi yang salah meminta untuk melakukannya secara otomatis . Itu sangat membingungkan dan bertentangan dengan otomatisasi makro VBA. Ada dua jawaban untuk pertanyaan ini yang paling saya hargai: jawaban pertama oleh Alex https://stackoverflow.com/a/6002338/166589 , dan saya telah menerima jawaban ini; dan yang kedua oleh Mark https://stackoverflow.com/a/6488070/166589yang muncul sedikit kemudian. Dari sudut pandang kegunaan, Excel tampaknya tidak memiliki dukungan UTF-8 CSV yang ramah pengguna, jadi saya menganggap kedua jawaban itu benar, dan saya telah menerima jawaban Alex terlebih dahulu karena benar-benar menyatakan bahwa Excel tidak dapat melakukan secara transparan. Itulah yang saya bingung secara otomatis di sini. Jawaban Mark mempromosikan cara yang lebih rumit bagi pengguna yang lebih maju untuk mencapai hasil yang diharapkan. Kedua jawaban itu bagus, tetapi jawaban Alex cocok dengan pertanyaan saya yang tidak jelas sedikit lebih baik.


PEMBARUAN 2

Lima bulan kemudian setelah pengeditan terakhir, saya perhatikan bahwa jawaban Alex telah hilang karena suatu alasan. Saya benar-benar berharap itu bukan masalah teknis dan saya berharap tidak ada lagi diskusi tentang jawaban mana yang lebih besar sekarang. Jadi saya menerima jawaban Mark sebagai yang terbaik.

Lyubomyr Shaydariv
sumber
1
Bisakah Anda menggunakan file yang dibatasi-tab? Jika demikian, Anda mungkin memiliki lebih banyak keberuntungan.
Tim Perry
8
Office 2010+: karya terbaik: UTF-16LE dengan BOM dan \tsebagai pembatas. Akan bekerja dalam pengaturan Excel Bahasa Inggris dan bukan Bahasa Inggris. Dapat menekan Ctrl-Stanpa memilih format file, dll. Akan mempertahankan karakter Unicode.
Sebastian
@Duncan terus terang berbicara, saya bingung dan sulit "menilai". Saya telah menerima jawaban alex lebih dari 2 tahun yang lalu (Q dan A keduanya pada 14 Mei), dan kemudian Mark menjawab menyarankan solusi yang sulit (saya sebenarnya tidak memeriksanya) yang secara mengejutkan mencetak skor lebih banyak poin pada pertanyaan saya yang secara mengejutkan menjadi populer juga. Kami sebenarnya menolak dukungan Excel di proyek saya sejak lama, dan saya tidak ingin menghapus skor reputasi alex, karena Excel tampaknya, dan mungkin masih tampak (tolong perbaiki saya jika saya salah), untuk salah menangani CSV. Sulit dikatakan, maaf.
Lyubomyr Shaydariv
2
Jawaban Alex telah dihapus oleh moderator. Tidak ada penjelasan yang diberikan, tetapi jika Anda memiliki reputasi yang cukup, Anda masih dapat melihatnya.
Mark Ransom
1
Karena mesin waktu belum ada dengan baik, hanya perlu tidak setuju.
osexpert

Jawaban:

398

Alex benar, tetapi karena Anda harus mengekspor ke csv, Anda dapat memberikan saran ini kepada pengguna saat membuka file csv:

  1. Simpan file yang diekspor sebagai csv
  2. Buka Excel
  3. Impor data menggunakan Data -> Impor Data Eksternal -> Impor Data
  4. Pilih jenis file "csv" dan ramban ke file Anda
  5. Di panduan impor ubah File_Origin menjadi "65001 UTF" (atau pilih pengidentifikasi karakter bahasa yang benar)
  6. Ubah Pembatas ke koma
  7. Pilih tempat untuk mengimpor dan Selesai

Dengan cara ini karakter khusus akan ditampilkan dengan benar.

Menandai
sumber
163

Penanda urutan-Byte UTF-8 akan memberi petunjuk pada Excel 2007+ bahwa Anda menggunakan UTF-8. (Lihat posting SO ini ).

Jika ada yang mengalami masalah yang sama dengan saya, kelas pengkodean .NET's UTF8 tidak menampilkan penanda byte-order dalam GetBytes()panggilan. Anda perlu menggunakan stream (atau menggunakan solusi ) untuk mendapatkan output BOM.

StriplingWarrior
sumber
18
Memasukkan BOM UTF-8 tampaknya menjadi cara yang tepat. Setelah itu transparan.
vy32
12
Saya menggunakan Notepad ++ untuk dengan mudah mengkonversi .csv dari UTF-8keUTF-8 with BOM
Sébastien
3
Ya - solusi terbaik. Banyak posting yang membingungkan di sekitar pengaturan tajuk dalam tanggapan http. Ini menyelesaikan masalah. Hal yang sama dapat dilihat saat membuka file di notepad dan menyimpan kembali menggunakan opsi UTF-8. Juga menambahkan penanda byte-order.
user369142
1
@ Ellmue: Saya pikir mungkin (seperti saya) dia pikir dia menyimpannya dengan penanda byte-order, tetapi bukan karena beberapa perpustakaan tidak bekerja seperti yang dia pikirkan. Saya merasa bermanfaat untuk menambahkan jawaban ini, dan ternyata sejumlah orang lain juga merasakan manfaatnya. Bagaimanapun, sepertinya jawaban yang lebih baik daripada mengatakan tidak menggunakan CSV, atau menginstruksikan pengguna cara membuka file dengan cara yang aneh.
StriplingWarrior
1
Versi Mac dari Excel tampaknya masih mengabaikan BOM. (Excel for Mac 2011.)
Thomas Andrews
74

Bug dengan BOM yang diabaikan tampaknya diperbaiki untuk Excel 2013. Saya punya masalah yang sama dengan huruf Cyrillic, tetapi menambahkan karakter BOM \uFEFFmemang membantu.

sshturma
sumber
8
Karena saya menambahkan \ uFEFF di awal file CSV saya (dibuat di Java), Excel dapat membukanya dengan benar! Thx
Galdo
16
itu menyelesaikan masalah saya juga, di php terlihat seperti ini $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText:;
Abdullah
@updola terima kasih banyak atas komentar ini, menyelamatkan saya berjam
nathan hayfield
UTF-8, menurut definisi, tidak menggunakan atau harus menggunakan karakter BOM. Cara Excel membaca BOM mengacaukan keunggulan UTF-8 dibandingkan Unicode, yang merupakan kompatibilitas mundur dengan ASCII. Menambahkan BOM akan membuat Excel berfungsi, tetapi pecahkan file UTF-8 / ASCII lainnya yang layak dibaca.
Nelson
1
\ FE \ FF menjadikan Mac OS Excel 2016 seluruh file sebagai hieroglif Jepang.
Nakilon
56

Sungguh luar biasa bahwa ada begitu banyak jawaban tetapi tidak ada yang menjawab pertanyaan:

"Ketika saya mengajukan pertanyaan ini, saya meminta cara membuka file UTF-8 CSV di Excel tanpa masalah bagi pengguna, ..."

Jawaban yang ditandai sebagai jawaban yang diterima dengan 200+ suara-up tidak berguna bagi saya karena saya tidak ingin memberikan pengguna saya manual cara mengkonfigurasi Excel. Terlepas dari itu: manual ini akan berlaku untuk satu versi Excel tetapi versi Excel lainnya memiliki menu dan dialog konfigurasi yang berbeda. Anda membutuhkan manual untuk setiap versi Excel.

Jadi pertanyaannya adalah bagaimana membuat Excel memperlihatkan data UTF8 dengan klik ganda sederhana?

Yah setidaknya di Excel 2007 ini tidak mungkin jika Anda menggunakan file CSV karena BOM UTF8 diabaikan dan Anda hanya akan melihat sampah. Ini sudah menjadi bagian dari pertanyaan Lyubomyr Shaydariv:

"Saya juga mencoba menentukan UTF-8 BOM EF BB BF, tetapi Excel mengabaikannya."

Saya membuat pengalaman yang sama: Menulis data Rusia atau Yunani ke file UTF8 CSV dengan BOM menghasilkan sampah di Excel:

Konten file UTF8 CSV:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

Hasil di Excel 2007:

CSV UTF8 Excel

Solusinya adalah tidak menggunakan CSV sama sekali. Format ini diterapkan secara bodoh oleh Microsoft sehingga tergantung pada pengaturan wilayah di panel kontrol jika koma atau titik koma digunakan sebagai pemisah. Jadi file CSV yang sama dapat dibuka dengan benar di satu komputer tetapi di komputer anter tidak. "CSV" berarti " Nilai Terpisah Koma " tetapi misalnya pada Windows Jerman dengan titik koma default harus digunakan sebagai pemisah sementara koma tidak berfungsi. (Di sini harus dinamai SSV = Nilai Terpisah Titik Koma) File CSV tidak dapat dipertukarkan antara versi bahasa Windows yang berbeda. Ini adalah masalah tambahan untuk masalah UTF-8.

Excel ada sejak puluhan tahun. Sangat memalukan bahwa Microsoft tidak dapat mengimplementasikan hal mendasar seperti impor CSV selama ini.


Namun, jika Anda memasukkan nilai yang sama ke file HTML dan menyimpan file itu sebagai file UTF8 dengan BOM dengan ekstensi file XLS Anda akan mendapatkan hasil yang benar.

Isi file UTF8 XLS:

<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>

Hasil di Excel 2007:

UTF8 HTML Excel

Anda bahkan dapat menggunakan warna dalam HTML yang akan ditampilkan dengan benar oleh Excel.

<style>
.Head { background-color:gray; color:white; }
.Red  { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>

Hasil di Excel 2007:

UTF8 HTML Excel

Dalam hal ini hanya tabel itu sendiri yang memiliki batas dan garis hitam. Jika Anda ingin SEMUA sel menampilkan garis kisi, ini juga dimungkinkan dalam HTML:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
        <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>MySuperSheet</x:Name>
                        <x:WorksheetOptions>
                            <x:DisplayGridlines/>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
        </xml>
    </head>
    <body>
        <table>
            <tr><td>Colum1</td><td>Column2</td></tr>
            <tr><td>Val1</td><td>Val2</td></tr>
            <tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
        </table>
    </body>
</html>

Kode ini bahkan memungkinkan untuk menentukan nama lembar kerja (di sini "MySuperSheet")

Hasil di Excel 2007:

masukkan deskripsi gambar di sini

Elmue
sumber
1
Dan juga luar biasa bahwa orang masih menjawabnya. :) Namun, saya berpendapat bahwa CSV sudah mati: CSV adalah format streaming sederhana yang mematikan, dan, ketika saya berada di proyek itu, kami sangat menggunakannya untuk interaksi komponen juga. Saya tidak akan pernah menggunakan format HTML karena sifatnya yang terlalu representatif, dan saya tidak pernah bisa membuat pengguna proyek mengekspor data ke HTML hanya untuk membuatnya ramah Excel. Excel mengisap UTF-8 CSV, dan saya tidak tahu apa yang berubah 5 tahun sejak itu. Tapi file yang dibatasi koma, semi-kolon, dan tab-itu benar-benar gila, kurasa.
Lyubomyr Shaydariv
5
Tidaklah mengherankan bahwa orang-orang masih menjawab pertanyaan Anda karena Google membawa mereka ke sini: Semua dengan pertanyaan yang sama: Bagaimana saya mendapatkan Excel yang bodoh untuk melakukan apa yang saya inginkan? Masukkan 3 kata ke Google: "excel csv utf8" dan pertanyaan Anda adalah hasil PERTAMA di seluruh dunia. Anda menulis buku terlaris!
Elmue
8
Karena Anda telah meluangkan waktu untuk menunjukkan bagaimana tidak ada jawaban lain di sini yang menyebabkan Excel membuka file CSV dengan benar, perlu disebutkan bahwa jawaban ini juga tidak melakukannya. Jawaban yang diterima semula (yang dihapus oleh moderator) merekomendasikan untuk mengekspor data ke file Excel secara langsung, atau mengekspor file HTML dan memungkinkan pengguna untuk membuka file di Excel. Salah satu dari solusi tersebut kurang hacky daripada menyimpan file HTML dengan ekstensi file XLS, tetapi tidak ada jawaban yang diajukan yang benar-benar menjawab pertanyaan.
StriplingWarrior
3
@ Prajurit: "..tapi tidak ada jawaban yang diajukan yang benar-benar menjawab pertanyaan." Ini tidak benar. SAYA TELAH menjawab pertanyaan itu: Setidaknya dengan Excel 2007 TIDAK MUNGKIN. Ini adalah jawaban yang pasti. Jika Excel mengabaikan BOM UTF8 dan menginterpretasikan data sebagai ANSI, tidak ada cara untuk mengimpor misalnya teks Yunani atau Rusia ke Excel melalui CSV dengan klik dua kali sederhana pada file (yang merupakan pertanyaan: "tanpa masalah bagi pengguna" ). Apa yang saya usulkan adalah solusi yang berfungsi yang berfungsi dengan SEMUA versi Excel dengan klik dua kali dan tidak memerlukan langkah-langkah tambahan dalam menu Excel.
Elmue
2
Tidak hanya ini tidak menjawab pertanyaan, itu sepenuhnya salah untuk menyatakan CSV adalah "warisan" dan "mati". Hanya karena Anda tidak melihat penggunaannya, tidak berarti itu sudah mati. Juga, Anda jelas tidak mengerti sejarahnya atau seberapa luas digunakannya saat ini. Ini lebih baik daripada XML (karena ukuran paket yang lebih kecil) dan masalahnya di sini adalah bagaimana Microsoft tidak mengikuti standar untuk format UTF8. Jawaban yang benar adalah dengan menggunakan open office dan bukan Microsoft karena Microsoft tidak pernah pandai pengkodean sejak awal.
Jeremy
49

Kami telah menggunakan solusi ini:

  1. Ubah CSV ke UTF-16 LE
  2. Masukkan BOM di awal file
  3. Gunakan tab sebagai pemisah bidang
e-seng
sumber
1
Terima kasih! Saya mencoba semua jawaban lain di utas ini, tetapi mengubah ke UTF-8 tidak berhasil. Ketika saya mencoba UTF-16 dengan BOM itu berfungsi langsung.
Husky
Untuk Excel untuk Mac 2011 saya berhasil dengan file UTF-16 little endian csv
multidynamic
Terima kasih, solusi ini sangat bagus untuk memberi pengguna saya cic unicode yang dapat mereka buka di Excel.
user1073075
21

Punya masalah yang sama dengan file CSV yang dihasilkan PHP. Excel mengabaikan BOM ketika Pemisah didefinisikan melalui "sep=,\n"di awal konten (tapi tentu saja setelah BOM).

Jadi menambahkan BOM ( "\xEF\xBB\xBF") di awal konten dan mengatur titik koma sebagai pemisah via fputcsv($fh, $data_array, ";");do the trick.

Ixtlilton
sumber
13

Saya memiliki masalah yang sama di masa lalu (cara menghasilkan file yang dapat dibaca Excel, dan alat lain juga bisa membaca). Saya menggunakan TSV daripada CSV, tetapi masalah yang sama dengan pengkodean muncul.

Saya gagal menemukan cara apa pun untuk membuat Excel mengenali UTF-8 secara otomatis, dan saya tidak mau / dapat memberikan kepada konsumen file-file tersebut instruksi rumit bagaimana cara membukanya. Jadi saya menyandikannya sebagai UTF-16le (dengan BOM), bukan UTF-8. Dua kali ukuran, tetapi Excel dapat mengenali pengkodean. Dan mereka kompres dengan baik, jadi ukurannya jarang (tapi sayangnya tidak pernah) penting.

Steve Jessop
sumber
Ini pertanyaan lama, tapi saya senang orang masih menjawabnya. Terima kasih. :)
Lyubomyr Shaydariv
1
@LyubomyrShaydariv: sejak saya menjawab pertanyaan ini, seorang kolega memberi tahu saya bahwa Excel terbaru mengidentifikasi file-file CSF UTF-8 asalkan mereka memiliki BOM awal. Jadi dalam beberapa tahun, ketika semua orang di dunia (atau lagi pula, semua orang yang kami kirimkan file) ada di versi Excel itu atau lebih baik, saya mungkin dapat mengubah penyandian saya :-)
Steve Jessop
Aneh, bagi saya itu tidak berhasil. Mengubah karakter menjadi simbol Cina ... (mereka seharusnya ibrani)
Veverke
Saya memiliki karakter bahasa Mandarin di Excel ketika saya menyimpan di "UTF-16 BE with BOM". Ketika saya mencoba "UTF-16 LE with BOM" itu berhasil! Saya menggunakan Sublime Text untuk pengujian.
Henno
12

Pertanyaan lama tetapi, solusi paling sederhana adalah:

  1. Buka CSV di Notepad
  2. Save As -> pilih encoding yang tepat
  3. Buka file baru
Aki
sumber
1
Versi Excel mana yang Anda gunakan?
Lyubomyr Shaydariv
1
Cemerlang, cukup bekerja dan menyelesaikan masalah (setidaknya untuk saya)
Auberon Vacher
1
Tidak, karena masalahnya adalah meminta Excel membuka file .csv sebagai file csv. Maksud saya, saya memiliki proses di mana saya menghasilkan file csv. Pengguna hanya akan diminta untuk membuka file. Di sini dia dituntut untuk melakukan lebih dari itu.
Veverke
2
@Veverke jika Anda membuat file secara teratur ini bukan solusi terbaik. Tetapi jika ini hanya sekali saja, jawaban ini sempurna. Ini berfungsi karena Notepad akan meletakkan BOM di awal file UTF-8 atau UTF-16.
Mark Ransom
Bekerja seperti pesona. ((:
user2925795
10

Seperti yang saya posting di http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html :

Beri tahu pengembang perangkat lunak yang bertanggung jawab membuat CSV untuk memperbaikinya. Sebagai solusi cepat, Anda dapat menggunakan gsed untuk memasukkan UTF-8 BOM di awal string:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

Perintah ini memasukkan BOM UTF-4 jika tidak ada. Karena itu, ini adalah perintah idempoten. Sekarang Anda harus dapat mengklik dua kali file dan membukanya di Excel.

Nestor Urquiza
sumber
Terima kasih, ini memperbaikinya. Saya baru saja mengkonversi csv ';' dipisahkan menjadi UTF-BOM di Notepad ++ dan tahu excels membukanya dengan benar.
RandomGuy
Persis apa yang dibutuhkan! Berikut ini adalah petunjuk untuk menerapkannya di PHP stackoverflow.com/questions/25686191/…
EFC
Ini adalah solusi untuk excel yang tidak dapat mengenali karakter utf dalam file csv. Jadi koreksi ini untuk memperbaiki masalah excel.
cobp
Ini berfungsi untuk Excel 2007 Versi Yunani, dengan pemisah koma. Terima kasih.
NameOfTheRose
Mengubah penyandian menjadi 'UTF-16le' di fs.createWriteStream (fileName, {encoding: 'UTF-16le'}) dan unggul membuka file CSV dengan benar
rahul shukla
9

Anda dapat mengonversi file .csv ke UTF-8 dengan BOM melalui Notepad ++:

  1. Buka file di Notepad ++ .
  2. Buka menu EncodingConvert to UTF-8.
  3. Buka menu FileSave.
  4. Tutup Notepad ++.
  5. Buka file dalam Excel.

Bekerja di Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) 64-bit dari Microsoft Office Professional Plus 2013 pada Windows 8.1 dengan lokal untuk program non-Unicode diatur ke "Jerman (Jerman)".

Christopher Adi Pascual
sumber
1
Melakukan apa yang Anda katakan, tidak berhasil sama sekali. Konversi / pengkodean, pengaturan set karakter, tidak ada yang berhasil dalam kasus saya. Impor file ke lembar google, unduh sebagai csv, berfungsi dengan sempurna. Terima kasih mulai tahun 2045
pakalbekim
1
Saya harus mengonversinya dengan Encoding -> Cinvert ti UTF-8-BOM Excel versi 2016
Igor Vuković
4

Vba makro sederhana untuk membuka teks utf-8 dan file csv

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

Asal: = 65001 adalah UTF-8. Koma: Benar untuk file .csv yang didistribusikan dalam kolom

Simpan di Personal.xlsb agar selalu tersedia. Personalisasi excel toolbar menambahkan tombol panggilan makro dan membuka file dari sana. Anda dapat menambahkan lebih banyak format ke makro, seperti kolom autofit, perataan, dll.

alc
sumber
2
Terima kasih. Sayangnya, ini adalah saran untuk pengguna Excel yang benar-benar canggih, dan apa yang saya tuju, menanyakan pertanyaan ini, membuat Excel melakukannya sendiri secara otomatis.
Lyubomyr Shaydariv
Saya mencoba menggunakan potongan kode ini tetapi tidak berhasil untuk saya. Saya menggunakan Excel 2013.
Sharunas Bielskis
3

Hanya untuk membantu pengguna yang tertarik membuka file di Excel yang mencapai utas ini seperti saya.

Saya telah menggunakan wizard di bawah ini dan bekerja dengan baik untuk saya, mengimpor file UTF-8. Tidak transparan, tetapi bermanfaat jika Anda sudah memiliki file.

  1. Buka Microsoft Excel 2007.
  2. Klik opsi bilah menu Data.
  3. Klik pada ikon Dari Teks.
  4. Arahkan ke lokasi file yang ingin Anda impor. Klik pada nama file dan kemudian klik tombol Impor. Panduan Impor Teks - Langkah 1 atau 3 sekarang akan muncul di layar.
  5. Pilih jenis file yang paling menggambarkan data Anda - Batas Lebar atau Tetap.
  6. Pilih 65001: Unicode (UTF-8) dari daftar drop-down yang muncul di sebelah asal File.
  7. Klik pada tombol Next untuk menampilkan Wizard Impor Teks - Langkah 2 atau 3 jendela.
  8. Tempatkan tanda centang di sebelah pembatas yang digunakan dalam file yang ingin Anda impor ke Microsoft Excel 2007. Jendela pratinjau Data akan menunjukkan kepada Anda bagaimana data Anda akan muncul berdasarkan pembatas yang Anda pilih.
  9. Klik tombol Berikutnya untuk menampilkan Panduan Impor Teks - Langkah 3 dari 3.
  10. Pilih format data yang sesuai untuk setiap kolom data yang ingin Anda impor. Anda juga memiliki opsi untuk tidak mengimpor satu atau beberapa kolom data jika Anda mau.
  11. Klik tombol Selesai untuk menyelesaikan mengimpor data Anda ke Microsoft Excel 2007.

Sumber: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0

Wagner Bertolini Junior
sumber
3

Ya, ini mungkin. Seperti yang sebelumnya dicatat oleh banyak pengguna, tampaknya ada masalah dengan excel membaca Byte Order Mark yang benar ketika file dikodekan dalam UTF-8. Dengan UTF-16 sepertinya tidak memiliki masalah, sehingga endemik ke UTF-8. Solusi yang saya gunakan untuk ini adalah menambahkan BOM, DUA KALI. Untuk ini saya menjalankan perintah sed berikut dua kali:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

, di mana wildcard dapat diganti dengan nama file apa pun. Namun, ini mengarah ke mutasi dari sep = di awal file .csv. File .csv kemudian akan terbuka secara normal di excel, tetapi dengan baris tambahan dengan "sep =" di sel pertama. "Sep =" juga dapat dihapus di sumber .csv itu sendiri, tetapi ketika membuka file dengan VBA pembatas harus ditentukan:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

Format 6 adalah format .csv. Setel Lokal ke true, jika ada tanggal dalam file. Jika Lokal tidak disetel ke true, tanggal akan di Amerikanisasi, yang dalam beberapa kasus akan merusak format .csv.

TheCharlatan
sumber
1
ketika menjalankan perintah sed, saya mendapatkan: "sed: opsi tidak valid - 'I'", saya pikir itu harus 'i'
BiAiB
2

Ini solusi kerja saya:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

Kuncinya adalah Asal: = 65001

Nobilis
sumber
2

Ya itu mungkin. Saat menulis aliran yang menciptakan csv, hal pertama yang harus dilakukan adalah ini:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)
zax
sumber
Anda tidak membaca pertanyaannya! Lyubomyr Shaydariv menulis: "Saya juga mencoba menentukan UTF-8 BOM EF BB BF, tetapi Excel mengabaikannya."
Elmue
Ini adalah kode yang berfungsi. Jika Anda menulis file UTF-8 dari aplikasi .Net dengan lead ini, Excel akan mengenali file tersebut sebagai UTF8.
zax
Mungkin dalam Excel ANDA berfungsi. Tapi setidaknya di Excel 2007 BOM diabaikan sepenuhnya. Jadi, jika Anda bermaksud menulis kode yang berfungsi pada semua versi Excel, kode Anda tidak berguna.
Elmue
2

Daftar jawaban yang benar-benar menakjubkan, tetapi karena satu yang cukup bagus masih belum ada, saya akan menyebutkannya di sini: buka file csv dengan google sheets dan simpan kembali ke komputer lokal Anda sebagai file excel.

Berbeda dengan Microsoft, Google telah berhasil mendukung file csv UTF-8 sehingga hanya berfungsi untuk membuka file di sana. Dan format ekspor ke excel juga berfungsi. Jadi, meskipun ini mungkin bukan solusi yang disukai untuk semua, itu cukup gagal aman dan jumlah klik tidak setinggi kedengarannya, terutama ketika Anda sudah masuk ke google.

Christoph
sumber
2

Ini tidak secara akurat menjawab pertanyaan ini tetapi karena saya menemukan ini dan solusi di atas tidak bekerja untuk saya atau memiliki persyaratan yang tidak dapat saya penuhi, berikut adalah cara lain untuk menambahkan BOM ketika Anda memiliki akses ke vim:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv
CannedMoose
sumber
2

hai saya menggunakan ruby ​​on rails untuk generasi csv. Dalam aplikasi kami, kami berencana untuk menggunakan multi bahasa (I18n) dan kami menghadapi masalah saat melihat konten I18n dalam file CSV windows excel.

Baik-baik saja dengan Linux (Ubuntu) dan mac.

Kami mengidentifikasi bahwa windows excel perlu mengimpor data lagi untuk melihat data aktual. Saat mengimpor kita akan mendapatkan lebih banyak opsi untuk memilih rangkaian karakter.

Tetapi ini tidak dapat dididik untuk setiap pengguna, jadi solusi yang kami cari adalah membuka hanya dengan klik dua kali.

Kemudian kami mengidentifikasi cara menampilkan data dengan mode terbuka dan lahir di windows excel dengan bantuan aghuddleston intisari . Ditambahkan pada referensi.

Contoh konten I18n

Di Mac dan Linux

Swedia: Förnamn Inggris: Nama depan

Di Windows

Swedia: Förnamn Inggris: Nama depan

def user_information_report(report_file_path, user_id)
    user = User.find(user_id)
    I18n.locale = user.current_lang
    open_mode = "w+:UTF-16LE:UTF-8"
    bom = "\xEF\xBB\xBF"
    body user, open_mode, bom
  end

def headers
    headers = [
        "ID", "SDN ID",
        I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
        I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
        I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
        I18n.t('sys_phone_number')
    ]
  end

def body tenant, open_mode, bom
    File.open(report_file_path, open_mode) do |f|
      csv_file = CSV.generate(col_sep: "\t") do |csv|
        csv << headers
        tenant.patients.find_each(batch_size: 10) do |patient|
          csv <<  [
              patient.id, patient.patientid,
              patient.first_name, patient.last_name, "#{patient.dob}",
              "#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
              "#{patient.city}", "#{patient.state}",  "#{patient.zip}",
              "#{patient.phone_number}"
          ]
        end
      end
      f.write bom
      f.write(csv_file)
    end
  end

Hal penting yang perlu diperhatikan di sini adalah mode terbuka dan lahir

open_mode = "w +: UTF-16LE: UTF-8"

bom = "\ xEF \ xBB \ xBF"

Sebelum menulis BOM sisipkan CSV

f.Write menulis

f.write (csv_file)

Windows dan Mac

File dapat dibuka langsung dengan mengklik dua kali.

Linux (ubuntu)

Saat membuka file, minta opsi pemisah -> pilih “TAB” masukkan deskripsi gambar di sini

Praaveen
sumber
1

Saya menghadapi masalah yang sama beberapa hari yang lalu, dan tidak dapat menemukan solusi karena saya tidak dapat menggunakan import from csvfitur ini karena itu membuat semuanya ditata sebagai string.

Solusi saya adalah pertama-tama membuka file dengan notpad ++ dan change the encode to ASCII. Kemudian baru saja membuka file dalam excel dan itu berfungsi seperti yang diharapkan.

lpinto.eu
sumber
1

Di php Anda hanya menambahkan $ lahir ke $ csv_string Anda:

$bom = sprintf( "%c%c%c", 239, 187, 191); // EF BB BF
file_put_contents( $file_name, $bom . $csv_string );

Diuji dengan MS Excel 2016, php 7.2.4

VB
sumber
0

Ini adalah pertanyaan lama tapi saya baru saja mengalami masalah serupa dan solusinya dapat membantu orang lain:

Punya masalah yang sama ketika menulis data teks CSV ke file, kemudian membuka .csv yang dihasilkan di Excel menggeser semua teks ke dalam satu kolom. Setelah membaca jawaban di atas, saya mencoba yang berikut, yang sepertinya menyelesaikan masalah.

Terapkan pengkodean UTF-8 saat Anda membuat StreamWriter Anda. Itu dia.

Contoh:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}
Rex
sumber
@ apakah Anda ingin sedikit menguraikan? Tentunya menghasilkan CSV menggunakan pengkodean yang benar untuk memulai dengan memastikan tidak ada masalah kompatibilitas dengan Excel nanti dalam alur kerja?
Rex
Kode salah karena Anda tidak perlu output.Tutup () jika Anda memiliki pernyataan using (). Selain itu, inport Excel CSV sangat primitif. Saya tidak akan menggunakannya sama sekali. Jika Anda ingin mengimpor di Excel, gunakan tabel HTML dan buka di Excel.
Elmue
Terima kasih telah mengklarifikasi @Elmue - sayangnya saya telah mengalami sejumlah skenario (termasuk file di drive jaringan) di mana penutupan diperlukan secara eksplisit serta pembuangannya. Tidak menemukan alasan mengapa karena saya pikir saya ingat melihat panggilan ke Close()dalam Disposetumpukan tetapi di sana kita pergi. Anda juga salah dalam pernyataan Anda tentang impor CSV menjadi primitif karena tidak memerlukan pendekatan HTML yang tidak efisien yang Anda sarankan. Bahkan membuat langkah-langkah programatik tambahan untuk mengambil data teks biasa, mentransformasikannya ke dalam HTML lalu menariknya ke Excel tampaknya berlawanan dengan intuisi
Rex
lanjutan ... Namun, skenario yang berbeda memiliki persyaratan yang berbeda dan contoh saya dengan benar menunjukkan cara menentukan pengkodean seperti yang diminta OP
Rex
Harap baca kembali pertanyaan aslinya: "Saya juga mencoba menentukan UTF-8 BOM EF BB BF, tetapi Excel mengabaikannya." Saya menguji hal yang sama dan mencapai hasil yang sama: Excel TIDAK mengenali BOM UTf8. Cobalah! Tulis file CSV dan masukkan karakter Yunani atau Rusia ke dalamnya. Kemudian buka di Excel dan Anda akan mendapatkan garbarge. Jadi jawaban Anda tidak menyelesaikan apa pun.
Elmue
0

Jika Anda ingin membuatnya sepenuhnya otomatis, satu klik, atau memuat secara otomatis ke Excel dari mengatakan halaman web, tetapi tidak dapat menghasilkan file Excel yang tepat, maka saya akan menyarankan melihat format SYLK sebagai alternatif. OK itu tidak sesederhana CSV tetapi berbasis teks dan sangat mudah diimplementasikan dan mendukung UTF-8 tanpa masalah.

Saya menulis kelas PHP yang menerima data dan mengeluarkan file SYLK yang akan terbuka langsung di Excel hanya dengan mengklik file (atau akan meluncurkan otomatis Excel jika Anda menulis file ke halaman web dengan tipe mime yang benar. Anda bahkan dapat tambahkan pemformatan (seperti huruf tebal, format angka dengan cara tertentu, dll.) dan ubah ukuran kolom, atau kolom ukuran otomatis ke teks dalam kolom dan semuanya mungkin tidak lebih dari 100 baris.

Sangatlah mudah untuk merekayasa balik SYLK dengan membuat spreadsheet sederhana dan menyimpan sebagai SYLK dan kemudian membacanya dengan editor teks. Blok pertama adalah header dan format angka standar yang akan Anda kenali (yang baru saja Anda regurgitasi di setiap file yang Anda buat), maka data hanyalah koordinat X / Y dan sebuah nilai.

Cloudranger
sumber
0
  1. Unduh & pasang LibreOffice Calc
  2. Buka file csv pilihan Anda di LibreOffice Calc
  3. Terima kasih kepada surga bahwa penyihir teks impor muncul ...
  4. ... pilih opsi pembatas dan penyandian karakter Anda
  5. Pilih data yang dihasilkan di Calc dan salin tempel ke Excel
Dan
sumber
0

Saya menghasilkan file csv dari aplikasi C # sederhana dan memiliki masalah yang sama. Solusi saya adalah memastikan file tersebut ditulis dengan pengkodean UTF8, seperti:

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

Saya awalnya memiliki kode berikut, dengan aksen yang terlihat bagus di Notepad ++ tetapi semakin rusak di Excel:

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

Jarak tempuh Anda mungkin bervariasi - Saya menggunakan .NET 4 dan Excel dari Office 365.

yoyo
sumber
0

Solusi yang berfungsi untuk kantor 365

  • simpan dalam UTF-16(tanpa LE, BE)
  • gunakan pemisah \t

Kode dalam PHP

$header = ['číslo', 'vytvořeno', 'ěščřžýáíé'];
$fileName = 'excel365.csv';
$fp = fopen($fileName, 'w');
fputcsv($fp, $header, "\t");
fclose($fp);

$handle = fopen($fileName, "r");
$contents = fread($handle, filesize($fileName));
$contents = iconv('UTF-8', 'UTF-16', $contents);
fclose($handle);

$handle = fopen($fileName, "w");
fwrite($handle, $contents);
fclose($handle);
podolinek
sumber
-1

Pertama-tama simpan spreadsheet Excel sebagai teks Unicode. Buka file TXT menggunakan Internet explorer dan klik "Simpan sebagai" Pengkodean TXT - pilih pengkodean yang sesuai, yaitu untuk Win Cyrillic 1251

Bragabondio
sumber
-1

Saya mencoba semua yang saya bisa temukan di utas ini dan yang serupa, tidak ada yang bekerja sepenuhnya. Namun, mengimpor ke lembar google dan hanya mengunduh karena csv bekerja seperti pesona. Cobalah jika Anda sampai pada titik frustrasi saya.

pakalbekim
sumber