Hentikan Excel dari secara otomatis mengonversi nilai teks tertentu ke tanggal

526

Adakah yang tahu kalau ada token yang bisa saya tambahkan ke csv saya untuk bidang tertentu sehingga Excel tidak mencoba mengubahnya menjadi tanggal?

Saya mencoba menulis file .csv dari aplikasi saya dan salah satu nilainya terlihat cukup mirip tanggal ketika Excel secara otomatis mengubahnya dari teks ke tanggal. Saya sudah mencoba meletakkan semua bidang teks saya (termasuk yang terlihat seperti tanggal) dalam tanda kutip ganda, tetapi itu tidak berpengaruh.

JimmyPena
sumber
120
Ya, seperti ketika file dengan 10.000 nama pengguna memiliki satu seperti "april25", yang dikonversi menjadi tanggal, dan akhirnya diproses sebagai "apr-25", menghasilkan kesalahan "nama pengguna tidak ditemukan", karena Anda tidak berharap Excel akan mengkonversi nilai tunggal ke tanggal, 4000 catatan ke file, sambil meninggalkan teks lainnya. Apa kode baca CSV yang pincang; sungguh, bukankah itu seharusnya menebak jenis berdasarkan catatan X pertama dan tetap menggunakannya? Atau tinggalkan semua teks. Jika saya ingin itu diformat sebagai "umum", saya bisa mengambilnya nanti. Dengan mengasumsikan "umum" sejak awal, itu berisiko korupsi data teks.
Triynko
Saya memiliki masalah ketika melakukan salin dan tempel. Untuk semua yang mencari solusi, pilih kolom target, atur ke string / format teks, lalu salin sumber dan lakukan tempel khusus (klik kanan) dengan 'hanya nilai'. Mempertahankan nilai, tidak ada format tanggal.
Kai Noack
84
Saya hanya ingin menambahkan bahwa saya menganggap perilaku Excel ini sebagai cacat serius. Bagaimana dengan semua orang yang tidak memiliki kemewahan untuk mengubah konten file csv sebelum mengimpor ke Excel? Atau bagaimana dengan orang yang tidak menyadari masalah ini sampai setelah membuat banyak perubahan lain pada file CSV? Itu membuat bekerja dengan file CSV di Excel berantakan.
robguinness
Apakah Anda menggunakan DatatableJS? Karena saya sudah tahu bagaimana melakukan ini dengan API itu. Jika Anda memerlukan ini, Anda dapat menemukannya di sini: stackoverflow.com/a/36142043/4241058
Richard Rebeco
11
Semua solusi ini untuk menggunakan File -> Buka -> Impor berfungsi baik bagi kami karena kami tahu apa yang kami lakukan, tetapi tidak ada gunanya bagi 99,5% lainnya di dunia yang tidak mengerti menavigasi sistem file dari / dalam / an aplikasi. Mereka melihat file, untuk menggunakannya mereka klik dua kali padanya. Saya telah menghabiskan 25 tahun mengajar orang cara menggunakan aplikasi kantor dan menulis kode yang menghasilkan data untuk aplikasi kantor tersebut, dan menggunakan / aplikasi / untuk mencari file yang akan digunakan benar-benar melampaui hampir semua orang.
user2624417

Jawaban:

355

Saya telah menemukan bahwa menempatkan '=' sebelum tanda kutip ganda akan mencapai apa yang Anda inginkan. Ini memaksa data menjadi teks.

misalnya. = "2008-10-03", = "lebih banyak teks"

EDIT (menurut posting lain) : karena bug Excel 2007 yang dicatat oleh Jeffiekins, orang harus menggunakan solusi yang diusulkan oleh Andrew :"=""2008-10-03"""

Jarod Elliott
sumber
12
Saya menerima jawaban ini karena 1) file csv saya hanya akan digunakan oleh Excel, dan 2) ini untuk akuntansi dan tidak dapat memiliki 'pada awalnya, dan 3) Saya tidak ingin mereka harus melakukan sebuah impor. Saya hanya ingin mereka membuka csv.
5
Bagus! Tetapi karena Excel 2007 bug menggunakan solusi yang diusulkan oleh Andrew : "=""2008-10-03""". Memperbarui pos.
TMS
1
Ini tidak berfungsi untuk saya di Excel 2010 jika teksnya terlalu panjang :(
steve
7
Alasan ini berfungsi adalah karena ketika Excel melihat karakter "=" itu memutuskan untuk mengevaluasi ekspresi yang mengikutinya. Dalam hal ini ekspresi hanyalah string literal dan nilai string literal adalah konten string. Dengan demikian tanda kutip menghilang secara ajaib. Anda dapat menempatkan = 1 + 2 + 3 dan mendapatkan nilai 6 setelah impor CSV. Formula itu sendiri tidak dihancurkan dalam proses impor.
lokori
4
Ada masalah besar dengan pendekatan ini - jika Anda membuka file di excel dan mengedit dan kemudian menyimpan dan membuka lagi semua ini "menghilang
ACV
150

Saya tahu ini adalah pertanyaan lama, tetapi masalahnya tidak akan hilang segera. File CSV mudah dihasilkan dari sebagian besar bahasa pemrograman, agak kecil, dapat dibaca oleh manusia dalam sebuah krisis dengan editor teks biasa, dan ada di mana-mana.

Masalahnya tidak hanya dengan tanggal dalam bidang teks, tetapi numerik apa pun juga akan dikonversi dari teks ke angka. Beberapa contoh di mana ini bermasalah:

  • ZIP / kode pos
  • nomor telepon
  • nomor ID pemerintah

yang terkadang dapat dimulai dengan satu atau lebih nol (0), yang dibuang ketika dikonversi ke numerik. Atau nilai berisi karakter yang dapat dikacaukan dengan operator matematika (seperti pada tanggal: /, -).

Dua kasus yang saya bisa memikirkan bahwa solusi "mengawali =", seperti yang disebutkan sebelumnya, mungkin tidak ideal adalah

  • di mana file mungkin diimpor ke dalam program selain MS Excel (fungsi Penggabungan MS Word terlintas dalam pikiran),
  • di mana keterbacaan manusia mungkin penting.

Retas saya untuk mengatasi ini

Jika satu pra / menambahkan karakter non-numerik dan / atau non-tanggal dalam nilai, nilai akan dikenali sebagai teks dan tidak dikonversi. Karakter yang tidak dicetak akan baik karena tidak akan mengubah nilai yang ditampilkan. Namun, karakter spasi lama yang biasa (\ s, ASCII 32) tidak berfungsi untuk ini karena akan dipotong oleh Excel dan kemudian nilainya masih akan dikonversi. Tetapi ada berbagai karakter ruang cetak dan non-cetak lainnya yang akan berfungsi dengan baik. Namun yang termudah adalah menambahkan (menambahkan setelah) karakter tab sederhana (\ t, ASCII 9).

Manfaat dari pendekatan ini:

  • Tersedia dari keyboard atau dengan kode ASCII yang mudah diingat (9),
  • Itu tidak mengganggu impor,
  • Biasanya tidak mengganggu hasil Gabungan Surat (tergantung pada tata letak templat - tetapi biasanya hanya menambah ruang yang luas di akhir baris). (Namun, jika ini merupakan masalah, lihat karakter lain misalnya ruang lebar nol (ZWSP, Unicode U + 200B)
  • bukan halangan besar saat melihat CSV di Notepad (dll),
  • dan dapat dihapus dengan menemukan / mengganti di Excel (atau Notepad dll).
  • Anda tidak perlu mengimpor CSV, tetapi cukup klik dua kali untuk membuka CSV di Excel.

Jika ada alasan Anda tidak ingin menggunakan tab, cari di tabel Unicode untuk hal lain yang cocok.

Pilihan lain

mungkin untuk menghasilkan file XML, yang format tertentu juga diterima untuk diimpor oleh versi MS Excel yang lebih baru, dan yang memungkinkan lebih banyak opsi mirip dengan format .XLS, tapi saya tidak punya pengalaman dengan ini.

Jadi ada berbagai opsi. Tergantung pada persyaratan / aplikasi Anda, satu mungkin lebih baik daripada yang lain.


Tambahan

Perlu dikatakan bahwa versi yang lebih baru (2013+) dari MS Excel tidak lagi membuka CSV dalam format spreadsheet - satu lagi speedbump dalam alur kerja seseorang membuat Excel kurang bermanfaat ... Setidaknya, ada instruksi untuk menyiasatinya. Lihat misalnya Stackoverflow ini: Bagaimana cara menampilkan file .csv dengan benar dalam Excel 2013? .

fr13d
sumber
6
Saya mendapat angka nol di depan yang benar setelah menambahkan \tkarakter pemisahan saya ;... sialan, MS Office, mengapa ini perlu waktu lebih dari 2 menit untuk saya ketahui?
Morten Jensen
2
Menambahkan \ t di akhir semua nilai memang merupakan kiatnya. Ini solusi yang buruk, tetapi dalam praktiknya itu berfungsi dengan baik. Saya lebih suka ini dengan trik rumus dengan sama dengan '=', karena yang pertama mungkin sulit untuk dikerjakan dengan alat lain.
ocroquette
3
Tidak ada cukup upvotes yang dapat mengungkapkan rasa terima kasih saya untuk Anda. Cari dan ganti notepad ++ ',' to '\ t, \ t' (untuk mengakomodasi kolom pertama dan terakhir juga) berfungsi seperti pesona. Terima kasih.
Asaf
1
Dalam permintaan MySQL saya (untuk output CSV melalui PHP), saya menggunakan CONCAT ('\ t', column_name). Juga berhasil. Terima kasih!
Just Plain High
1
Ide yang hebat. Sayangnya, Numbers sedikit "lebih pintar" dari Excel, dan tidak jatuh cinta pada trik tab. Alternatif terbaik yang bisa saya temukan adalah yang terdepan ', karena agak dipahami dengan baik dan tidak terlalu mengganggu ... tetapi yang tidak terlihat akan lebih baik.
Heath Raftery
101

Mengatasi solusi Jarod dan masalah yang diangkat oleh Jeffiekins, Anda dapat memodifikasi

"May 16, 2011"

untuk

"=""May 16, 2011"""
Andrew Ferk
sumber
6
Tidak berfungsi di Excel 2010 jika teks lebih panjang dari panjang tertentu.
steve
1
@Andrew, "perbaikan" ini akan menyebabkan masalah jika Anda perlu memiliki "nilai di mana saja di antara tanggal.
Pacerier
8
FYI, jika Anda menyimpan file Excel, = hilang dan Anda kembali ke titik awal saat Anda membuka berikutnya.
d512
Pengalaman saya tidak cocok dengan steve atau d512. Ini berfungsi untuk saya di .csv yang masuk di Excel 2013, dan setelah menyimpan sebagai .xlsx tidak kembali. Cukup mudah bagi siapa pun untuk menguji menggunakan deretan data ini: "806676", "None", "41", "=" "16 Mei 2011" "", "100.00", "False"
tbc0
1
@ tbc0 Coba "806676","None","41","=""05-16-2011""","100.00","False"sebagai gantinya dan Anda akan melihat save dan reload kehilangan teks yang ditulis dgn tanda penghubung.
NetMage
65

Saya memiliki masalah yang sama dan ini adalah solusi yang membantu saya tanpa harus mengedit konten file csv:

Jika Anda memiliki fleksibilitas untuk memberi nama file selain ".csv", Anda dapat menamainya dengan ekstensi ".txt", seperti "Myfile.txt" atau "Myfile.csv.txt". Kemudian ketika Anda membukanya di Excel (bukan dengan drag and drop, tetapi menggunakan File-> Open atau daftar file yang Terakhir Digunakan), Excel akan memberi Anda "Text Import Wizard".

Di halaman pertama panduan, pilih "Dibatasi" untuk jenis file.

Di halaman kedua panduan pilih "," sebagai pembatas dan juga pilih kualifikasi teks jika Anda telah melingkupi nilai-nilai Anda dengan tanda kutip

Di halaman ketiga, pilih setiap kolom satu per satu dan tentukan masing-masing jenis "Teks" alih-alih "Umum" untuk menghentikan Excel dari mengacaukan data Anda.

Semoga ini bisa membantu Anda atau seseorang dengan masalah serupa!

jas hujan
sumber
2
Oh, omong-omong aku bukan yang pertama kali menemukan ini. risingline.com/use-excel-read-csv-without-reformatting.php Halaman web itu juga memiliki instruksi yang membantu Anda bisa menggeser-klik kolom di halaman ketiga wizard untuk memilih semuanya bersama-sama sebelum menetapkan masing-masing jenis "Teks".
rainerbit
Ini mungkin bekerja untuk nilai tanggal, tetapi tampaknya tidak berfungsi untuk hal-hal yang lebih baik menafsirkan penafsiran sebagai angka. Jika string Anda semua angka dan koma, format "Teks" akan menjadi format angka ilmiah.
Michael - Di mana Clay Shirky
3
ini berfungsi dengan baik untuk saya dan tidak melibatkan perubahan apa pun pada file saya kecuali untuk menamainya sebagai .txt. Terima kasih.
Kevin
1
Sayangnya, Excel hanya memungkinkan Anda melakukan ini untuk 6 kolom pertama. Jika Anda membutuhkan lebih banyak, pendekatan yang lebih baik adalah menyalin konten csv, membuat dan mengosongkan file excel, pilih semua kolom / baris dan atur jenisnya menjadi Teks, lalu tempel konten dan gunakan Data | Teks ke kolom
nachocab
Ini adalah solusi terbaik dan harus ditandai sebagai jawabannya.
Rob
28

PERINGATAN: Excel '07 (setidaknya) memiliki bug (nother): jika ada koma di isi bidang, itu tidak menguraikan = "bidang, isi" dengan benar, tetapi menempatkan semuanya setelah koma ke dalam bidang berikut, terlepas dari tanda kutip.

Satu-satunya solusi yang saya temukan yang berfungsi adalah untuk menghilangkan = ketika konten bidang menyertakan koma.

Ini mungkin berarti bahwa ada beberapa bidang yang tidak mungkin untuk mewakili tepat "benar" di Excel, tetapi sekarang saya percaya tidak ada yang terlalu terkejut.

Jeffiekins
sumber
Saya baru saja menguji ini di excel 2007, dan itu berfungsi dengan benar untuk saya. Namun jika ada spasi sebelum tanda kutip, maka itu tidak menguraikan koma dengan benar.
Sunny88
8
Tampaknya ini tidak akan menjadi bug menurut RFC 4180. Cara yang benar untuk mengutip bidang adalah dengan mengutip seluruh bidang dan kemudian mengutip ganda kutipan internal. Jadi "=" "bidang, konten" "" tools.ietf.org/html/rfc4180
Peter Stephens
2
@PeterStephens, Ini tidak berfungsi jika field, contentada "di dalamnya. Misalnya"=""field, co""ntent"""
Pacerier
1
@ Peracerier Mungkin kutipan yang disematkan harus dikutip dua kali lipat, berubah menjadi """".
ErikE
Saya dapat mengonfirmasi saran @ ErikE yang benar. Untuk bidang dengan nilai 1"2, jika Anda memilih untuk menggunakan trik ini (bukan hanya membiarkannya seperti "1""2"dalam file - excel akan diperlakukan sebagai teks), maka string yang benar dalam file CSV penargetan Excel berakhir sedang "=""1""""2""".
Tao
22

Saat membuat string untuk ditulis ke file CSV saya di C # saya harus memformatnya dengan cara ini:

"=\"" + myVariable + "\""
Colin Pear
sumber
2
ini membangunkan saya di Rails juga. Terima kasih
Vieenay Siingh
3
Bekerja di Jawa juga
Shoyo
Bekerja untuk saya dalam JavaScript menggunakan Papa Parse.
wobsoriano
17

2018

Satu-satunya solusi yang tepat yang bekerja untuk saya (dan juga tanpa memodifikasi CSV ).

Excel 2010:

  1. Buat buku kerja baru
  2. Data> Dari Teks> Pilih file CSV Anda
  3. Di munculan, pilih tombol radio "Dibatasi", lalu klik "Selanjutnya>"
  4. Kotak centang pembatas: centang hanya "Koma" dan hapus centang opsi lain, lalu klik "Berikutnya>"
  5. Dalam "Pratinjau data", gulir ke kanan, lalu tahan shift dan klik pada kolom terakhir (ini akan memilih semua kolom). Sekarang di "Format data kolom" pilih tombol radio "Teks", lalu klik "Selesai".

Excel office365: (versi klien)

  1. Buat buku kerja baru
  2. Data> Dari Teks / CSV> Pilih file CSV Anda
  3. Deteksi tipe data> tidak terdeteksi

Catatan: Excel office365 (versi web), saat saya menulis ini, Anda tidak akan dapat melakukannya.

evilReiko
sumber
3
Ini berfungsi tanpa mengubah file CSV sebelumnya, jadi saya pikir ini harus menjadi jawaban yang benar.
Jack
Ini sepertinya jawaban yang benar. Saya memiliki harapan tinggi. Tetapi pada MacOS (office365), saya tidak bisa memilih SEMUA kolom: tidak ada gulir horizontal di jendela pratinjau yang ditampilkan dalam panduan impor teks, sehingga saya hanya bisa memilih kolom yang terlihat. Saya mencoba jalan pintas (CMD + A, atau hal-hal lain), tidak berhasil. Pilihan "jangan terdeteksi" juga tidak ada. Saya hancur.
normanius
Excel office 365, pilih File, Opsi, Data. Ada kotak centang untuk menampilkan penyihir impor data lama jika diperlukan.
Kurt Schultz
15

Di Excel 2010 buka lembar baru. Pada pita Data klik "Dapatkan Data Eksternal Dari Teks". Pilih file CSV Anda lalu klik "Buka". Klik "Selanjutnya". Hapus centang "Tab", tempatkan tanda centang di sebelah "Koma", lalu klik "Berikutnya". Klik di mana saja di kolom pertama. Sambil menahan tombol shift, seret slider ke seberang hingga Anda dapat mengklik di kolom terakhir, lalu lepaskan tombol shift. Klik tombol radio "teks" lalu klik "Selesai"

Semua kolom akan diimpor sebagai teks, sama seperti yang ada di file CSV.

Rob Stockley
sumber
1
Saya mengalami masalah yang sama, tetapi mengikuti instruksi @ Rob dengan hati-hati akan berhasil dengan sempurna !. Terima kasih
Milacay
2
Sayangnya, Asisten Data Dari Teks tidak mendukung sel multi-line. Jika teks multi-baris seperti itu ditemui, itu akan menulis semua baris setelah yang pertama ke baris baru, memecah seluruh impor. Itu hanya mengartikan jeda baris dengan benar jika Anda membuka file CSV dengan mengklik ganda. Sialan Anda Microsoft ...
CodeManX
1
Sayangnya ini tidak menyelesaikan masalah pemformatan acak Excel "help" - teks DEC1 masih berubah menjadi tanggal Dec-01. Sama dengan teks YYYY-MM-DD yang dialihkan ke DD / MM / YYYY. :(
Baracus
12

Masih merupakan masalah dalam rilis Microsoft Office 2016, agak mengganggu bagi kita yang bekerja dengan nama gen seperti MARC1, MARCH1, SEPT1 dll. Solusi yang saya temukan adalah yang paling praktis setelah membuat file ".csv" di R, yang kemudian akan dibuka / dibagikan dengan pengguna Excel:

  1. Buka file CSV sebagai teks (notepad)
  2. Salin (ctrl + a, ctrl + c).
  3. Rekatkan di lembar excel baru - semua akan disisipkan dalam satu kolom sebagai string teks yang panjang.
  4. Pilih / pilih kolom ini.
  5. Pergi ke Data- "Teks ke kolom ...", di jendela yang terbuka pilih "dibatasi" (berikutnya) Periksa bahwa "koma" ditandai (menandainya akan menampilkan pemisahan data ke kolom di bawah) (berikutnya), di jendela ini Anda dapat memilih kolom yang Anda inginkan dan menandainya sebagai teks (bukan umum) (Selesai).

HTH

Ana Maria Mendes-Pereira
sumber
Upaya manual juga tidak menarik bagi saya. Namun, setelah melelahkan setiap kemungkinan yang ada, yang ini adalah yang paling kuat dan dapat diandalkan.
Ana Maria Mendes-Pereira
Meskipun demikian, pemrosesan batch.
Ana Maria Mendes-Pereira
Ini sebenarnya jawaban terbaik di sini yang membutuhkan paling sedikit pekerjaan. Saya berharap Anda bisa mengatur beberapa opsi untuk memaksanya agar tidak mem-parsing file.
bergulung
Anda juga dapat mengganti semua koma dengan tab, kemudian akan dihapus secara otomatis
rolls
10

Berikut adalah metode sederhana yang kami gunakan di tempat kerja di sini saat membuat file csv di tempat pertama, itu memang mengubah nilai sedikit sehingga tidak cocok di semua aplikasi:

Tambahkan ruang untuk semua nilai dalam csv

Ruang ini akan dikupas oleh excel dari angka-angka seperti "1", "2.3" dan "-2.9e4" tetapi akan tetap pada tanggal seperti "01/10/1993" dan boolean seperti "BENAR", menghentikannya diubah menjadi tipe data internal excel.

Ini juga menghentikan tanda kutip ganda yang sedang dibaca saat dibaca, sehingga cara yang sangat mudah untuk membuat teks dalam csv tetap tidak berubah oleh excel BAHKAN JIKA beberapa teks seperti "3.1415" adalah mengelilinginya dengan tanda kutip ganda DAN menambahkan seluruh string dengan spasi, yaitu (menggunakan tanda kutip tunggal untuk menunjukkan apa yang akan Anda ketik) '"3,1415"'. Kemudian di excel Anda selalu memiliki string asli, kecuali dikelilingi oleh tanda kutip ganda dan diawali dengan spasi sehingga Anda perlu memperhitungkannya dalam rumus apa pun, dll.

Dan
sumber
Ini berhasil untuk saya. Saya memiliki beberapa nilai seperti 1-1-1 yang otomatis dikonversi ke tanggal. Seperti yang disebutkan ruang akan ditransfer sehingga nilainya berubah, tapi saya melakukan strip ketika menguraikannya bagi saya itu bukan masalah besar.
jacklin
Ruang tidak lagi berfungsi untuk mencegah interpretasi tanggal atau pengupasan nol terkemuka. Tapi Anda bisa menggunakan non-breaking-space "\xA0"sebagai gantinya - itu akan berhasil.
Lakukan
8

(Mengasumsikan Excel 2003 ...)

Saat menggunakan Wisaya Teks-ke-Kolom, pada Langkah 3 Anda dapat menentukan tipe data untuk setiap kolom. Klik pada kolom dalam pratinjau dan ubah kolom yang tidak pantas dari "Umum" menjadi "Teks."

DocMax
sumber
8
Ini adalah pilihan yang sangat baik jika saya bisa memaksa pengguna untuk menggunakan proses impor.
Ini sebenarnya tidak membantu masalah, karena angka-angka di kolom TEXT akan dikonversi menjadi NUMBERS ketika mengekspor ke .csv lagian ...
Chonez
8

Ini adalah satu-satunya cara saya tahu cara melakukannya tanpa mengacaukan file itu sendiri. Seperti biasa dengan Excel, saya belajar ini dengan memukul kepala saya selama berjam-jam.

Ubah ekstensi file .csv ke .txt; ini akan menghentikan Excel dari mengonversi file secara otomatis ketika dibuka. Inilah cara saya melakukannya: buka Excel ke lembar kerja kosong, tutup lembar kosong, lalu File => Buka dan pilih file Anda dengan ekstensi .txt. Ini memaksa Excel untuk membuka "Text Import Wizard" di mana ia akan bertanya kepada Anda tentang bagaimana Anda ingin menafsirkan file. Pertama Anda memilih pembatas Anda (koma, tab, dll ...), lalu (inilah bagian penting) Anda memilih satu set kolom kolom dan pilih format. Jika Anda menginginkan apa yang ada di dalam file maka pilih "Teks" dan Excel akan menampilkan apa yang ada di antara pembatas.

Chris
sumber
Ini hanya bekerja dengan baik untuk saya pada 2015-03-03 bekerja dengan Excel untuk Mac 2011 (versi 14.4.8 150116), bekerja dengan data dalam pertanyaan SO awk- hindari memformat ulang nilai seperti tanggal , di mana masalahnya ada pada Excel dan bukan daripada awk, meskipun judul pertanyaan.
Jonathan Leffler
4

(EXCEL 2007 dan yang lebih baru)

Cara memaksa excel untuk tidak "mendeteksi" format tanggal tanpa mengedit file sumber

Antara:

  • ganti nama file sebagai .txt
  • Jika Anda tidak dapat melakukannya, alih-alih membuka file CSV langsung di excel, buat buku kerja baru kemudian buka
    Data > Get external data > From Text
    dan pilih CSV Anda.

Either way, Anda akan disajikan dengan opsi impor, cukup pilih setiap kolom yang berisi tanggal dan beri tahu excel untuk memformat sebagai "teks" bukan "umum".

Beberapa pria
sumber
4

Apa yang saya lakukan untuk masalah yang sama ini adalah menambahkan berikut sebelum setiap nilai csv: "=" "" dan satu kutipan ganda setelah setiap nilai CSV, sebelum membuka file di Excel. Ambil nilai-nilai berikut sebagai contoh:

012345,00198475

Ini harus diubah sebelum dibuka di Excel ke:

"="""012345","="""00198475"

Setelah Anda melakukan ini, setiap nilai sel muncul sebagai rumus di Excel dan karenanya tidak akan diformat sebagai angka, tanggal, dll. Misalnya, nilai 012345 muncul sebagai:

="012345"
ChrisB
sumber
Pendekatan lain adalah menyimpan nomor dalam csv sebagai 1234500198475E-8; dengan cara ini perhitungan lebih lanjut dalam excel masih dimungkinkan.
bert bruynooghe
4

Tidak ada solusi yang ditawarkan di sini adalah solusi yang baik. Ini mungkin bekerja untuk masing-masing kasus, tetapi hanya jika Anda mengendalikan tampilan akhir. Ambil contoh saya: karya saya menghasilkan daftar produk yang mereka jual ke ritel. Ini dalam format CSV dan berisi kode bagian, beberapa di antaranya dimulai dengan nol, ditetapkan oleh pabrikan (tidak di bawah kendali kami). Singkirkan nol terkemuka dan Anda mungkin benar-benar cocok dengan produk lain. Pelanggan ritel menginginkan daftar dalam format CSV karena program pemrosesan back-end, yang juga di luar kendali kami dan berbeda per pelanggan, sehingga kami tidak dapat mengubah format file CSV. Tidak ada awalan '=', atau tab yang ditambahkan. Data dalam file CSV mentah benar; saat pelanggan membuka file-file itu di Excel masalah mulai. Dan banyak pelanggan tidak benar-benar mengerti komputer. Mereka bisa saja membuka dan menyimpan lampiran email. Kami berpikir untuk menyediakan data dalam dua format yang sedikit berbeda: satu sebagai Excel Friendly (menggunakan opsi yang disarankan di atas dengan menambahkan TAB, yang lain sebagai 'master'. Tetapi ini mungkin angan-angan karena beberapa pelanggan tidak akan mengerti mengapa kita perlu melakukan ini. Sementara itu kami terus menjelaskan mengapa mereka terkadang melihat data yang 'salah' dalam spreadsheet mereka. Sampai Microsoft membuat perubahan yang tepat, saya tidak melihat resolusi yang tepat untuk ini, selama orang tidak memiliki kendali atas bagaimana pengguna akhir gunakan file. Tapi ini mungkin angan-angan karena beberapa pelanggan tidak akan mengerti mengapa kita perlu melakukan ini. Sementara itu kami terus menjelaskan mengapa mereka terkadang melihat data yang 'salah' di spreadsheet mereka. Sampai Microsoft membuat perubahan yang tepat, saya tidak melihat resolusi yang tepat untuk ini, selama orang tidak memiliki kendali atas bagaimana pengguna akhir menggunakan file. Tapi ini mungkin angan-angan karena beberapa pelanggan tidak akan mengerti mengapa kita perlu melakukan ini. Sementara itu kami terus menjelaskan mengapa mereka terkadang melihat data yang 'salah' di spreadsheet mereka. Sampai Microsoft membuat perubahan yang tepat, saya tidak melihat resolusi yang tepat untuk ini, selama orang tidak memiliki kendali atas bagaimana pengguna akhir menggunakan file.

mljm
sumber
Jika ruang ekstra di sebelah kiri data Anda tidak masalah, maka Anda dapat memperbaiki masalah Excel dengan menambahkan "\xA0"(ruang bebas-pecah) ke data Anda.
Lakukan
3

Saya baru saja bertemu dengan konvensi ini, yang tampaknya merupakan pendekatan yang sangat baik, tetapi saya tidak dapat menemukannya di mana pun. Adakah yang akrab dengannya? Bisakah Anda mengutip sumbernya? Saya belum mencari berjam-jam tetapi saya berharap seseorang akan mengenali pendekatan ini.

Contoh 1: = ("012345678905") ditampilkan sebagai 012345678905

Contoh 2: = ("1954-12-12") ditampilkan sebagai 1954-12-12 , bukan 12/12/1954 .

GW4
sumber
2

Ini bukan Excel. Windows mengenali rumus, data sebagai tanggal dan koreksi otomatis. Anda harus mengubah pengaturan Windows.

"Panel Kontrol" (-> "Beralih ke Tampilan Klasik") -> "Opsi Regional dan Bahasa" -> tab "Opsi Regional" -> "Sesuaikan ..." -> tab "Angka" -> Lalu ubah simbol sesuai dengan yang kamu inginkan.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Ini akan berfungsi di komputer Anda, jika pengaturan ini tidak diubah misalnya di komputer pelanggan Anda, mereka akan melihat tanggal alih-alih data.

syanda
sumber
2

Hai saya punya masalah yang sama,

Saya menulis vbscipt ini untuk membuat file CSV lain. File CSV baru akan memiliki spasi di font masing-masing bidang, jadi excel akan memahaminya sebagai teks.

Jadi, Anda membuat file .vbs dengan kode di bawah ini (misalnya Modify_CSV.vbs), simpan dan tutup. Seret dan Jatuhkan file asli Anda ke file vbscript Anda. Ini akan membuat file baru dengan "SPACE_ADDED" untuk nama file di lokasi yang sama.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing
Harry Duong
sumber
2

Tanpa memodifikasi file csv Anda, Anda dapat:

  1. Ubah opsi Format sel excel menjadi "teks"
  2. Kemudian gunakan "Text Import Wizard" untuk mendefinisikan sel csv.
  3. Setelah diimpor hapus data itu
  4. lalu cukup tempelkan sebagai teks biasa

excel akan memformat dan memisahkan sel csv Anda dengan benar sebagai teks yang diformat dengan mengabaikan format tanggal otomatis.

Agak konyol bekerja, tetapi mengalahkan memodifikasi data csv sebelum mengimpor. Andy Baird dan Richard agak menghindari metode ini, tetapi melewatkan beberapa langkah penting.

cliffclof
sumber
1

Saya tahu ini adalah utas lama. Untuk yang seperti saya, yang masih memiliki masalah ini menggunakan office 2013 via powershell com objek dapat menggunakan metode opentext . Masalahnya adalah bahwa metode ini memiliki banyak argumen, yang terkadang saling eksklusif. Untuk mengatasi masalah ini, Anda dapat menggunakan metodeparameter bernama invoke yang diperkenalkan dalam posting ini . Contohnya adalah

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

Sayangnya saya baru menemukan bahwa metode ini entah bagaimana memecah csv parsing ketika sel mengandung linebreak. Ini didukung oleh csv tetapi implementasi microsoft tampaknya disadap. Juga entah bagaimana tidak mendeteksi karakter spesifik Jerman. Memberinya budaya yang benar tidak mengubah perilaku ini. Semua file (csv dan skrip) disimpan dengan pengkodean utf8. Pertama saya menulis kode berikut untuk memasukkan sel csv dengan sel.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Tapi ini sangat lambat, itulah sebabnya saya mencari alternatif. Tampaknya Excel memungkinkan Anda untuk mengatur nilai rentang sel dengan matriks. Jadi saya menggunakan algoritma di blog ini untuk mengubah csv di multiarray.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Anda dapat menggunakan kode di atas sebagaimana mestinya mengkonversi csvs menjadi excel. Ubah saja path ke csv dan karakter pembatas di bagian bawah.

berdetak kencang
sumber
terlalu rumit
memutar
1

Dalam kasus saya, "Sept8" dalam file csv yang dihasilkan menggunakan R diubah menjadi "8-September" oleh Excel 2013. Masalahnya diselesaikan dengan menggunakan fungsi write.xlsx2 () dalam paket xlsx untuk menghasilkan file output dalam format xlsx , yang dapat dimuat oleh Excel tanpa konversi yang tidak diinginkan. Jadi, jika Anda diberi file csv, Anda dapat mencoba memuatnya ke R dan mengubahnya menjadi xlsx menggunakan fungsi write.xlsx2 ().

Dinghai Zheng
sumber
Saya tidak tahu mengapa jawaban Anda diturunkan. Ini berguna untuk orang yang menggunakan R. Jawaban ini sangat membantu saya. Terima kasih :)
sriharsha KB
1

Solusi menggunakan Google Drive (atau Angka jika Anda menggunakan Mac):

  1. Buka data dalam Excel
  2. Atur format kolom dengan data yang salah ke Teks (Format> Sel> Nomor> Teks)
  3. Muat .csv ke Google Drive, dan buka dengan Google Sheets
  4. Salin kolom yang menyinggung
  5. Tempel kolom ke Excel sebagai Teks (Edit> Tempel Spesial> Teks)

Atau jika Anda menggunakan Mac untuk langkah 3, Anda dapat membuka data dalam Angka.

Bukit Derek
sumber
Ini adalah solusi yang masuk akal daripada bekerja selama berjam-jam tanpa resolusi.
imsrgadich
1

(EXCEL 2016 dan yang lebih baru, sebenarnya saya belum mencoba dalam versi yang lebih lama)

  1. Buka halaman kosong baru
  2. Buka tab "Data"
  3. Klik "Dari Teks / CSV" dan pilih file csv Anda
  4. Periksa pratinjau apakah data Anda benar.
  5. Dalam kasus ketika beberapa kolom dikonversi ke tanggal klik "edit" dan kemudian pilih jenis Teks dengan mengklik kalender di kepala kolom
  6. Klik "Tutup & Muat"
Roman Yakoviv
sumber
0

Oke menemukan cara sederhana untuk melakukan ini di Excel 2003 hingga 2007. Buka buku kerja xls kosong. Lalu pergi ke menu Data, impor data eksternal. Pilih file csv Anda. Pergi melalui wizard dan kemudian dalam "format data kolom" pilih kolom apa saja yang perlu dipaksa untuk "teks". Ini akan mengimpor seluruh kolom itu sebagai format teks yang mencegah Excel dari mencoba memperlakukan sel tertentu sebagai tanggal.

Richard
sumber
0

Masalah ini masih ada di Mac Office 2011 dan Office 2013, saya tidak bisa mencegahnya terjadi. Sepertinya hal yang mendasar.

Dalam kasus saya, saya memiliki nilai seperti "1 - 2" & "7 - 12" dalam CSV yang terlampir dengan benar dalam koma terbalik, ini secara otomatis dikonversi ke tanggal dalam excel, jika Anda kemudian mencoba mengubahnya menjadi teks biasa yang akan Anda dapatkan representasi nomor dari tanggal seperti 43768. Selain itu memformat ulang sejumlah besar yang ditemukan dalam barcode dan nomor EAN ke nomor 123E + lagi yang tidak dapat dikonversi kembali.

Saya menemukan bahwa Google Drive Google Sheets tidak mengubah angka menjadi tanggal. Barcode memiliki koma di dalamnya setiap 3 karakter tetapi ini mudah dihapus. Ini menangani CSV dengan sangat baik terutama ketika berhadapan dengan MAC / Windows CSV.

Mungkin saja menyelamatkan seseorang.

EricNo7
sumber
0

SOLUSI TERMUDAH Saya baru tahu ini hari ini.

  • Buka di Word
  • Ganti semua tanda hubung dengan en dashes
  • Simpan dan tutup
  • Buka di Excel

Setelah selesai mengedit, Anda selalu dapat membukanya kembali di Word lagi untuk mengganti en dashes dengan tanda hubung lagi.

Randy Hoffman
sumber
0

Saya melakukan ini untuk nomor kartu kredit yang terus dikonversi ke notasi ilmiah: Saya akhirnya mengimpor .csv saya ke Google Sheets. Opsi impor sekarang memungkinkan untuk menonaktifkan pemformatan otomatis nilai numerik. Saya mengatur kolom sensitif apa saja ke Teks Biasa dan mengunduh sebagai xlsx.

Ini adalah alur kerja yang mengerikan, tetapi setidaknya nilai-nilai saya dibiarkan seperti seharusnya.

Brendonwbrown
sumber
Jika Anda repot membaca beberapa jawaban lain, Anda akan melihat bahwa seseorang sudah menyarankan ini di sini .
Laurel
Saya memang repot, terima kasih. Saya mengisyaratkan pilihan pemformatan otomatis menjadi bagian baru dari proses impor. Jawaban saya memberikan alur kerja yang sangat spesifik, bagi mereka yang, seperti saya, telah dipaksa untuk menggunakan Lembar untuk mengatasi masalah khusus ini. Dalam pikiran saya, ini layak mendapat jawaban yang terpisah. Penyesuaian kecil dari nada Anda mungkin benar-benar menghasilkan komentar Anda ditafsirkan bermanfaat, yang merupakan inti dari rangkaian situs web ini.
Brendonwbrown
Tetapi Anda bisa menggunakan Text Import in Excel untuk mengimpor file CSV dan tidak repot dengan Sheets, seperti disebutkan dalam jawaban lain.
NetMage
0

Saya membuat vba makro ini yang pada dasarnya memformat rentang output sebagai teks sebelum menempelkan angka. Bekerja sempurna untuk saya ketika saya ingin menempelkan nilai-nilai seperti 8/11, 23/6, 1/3 dll tanpa Excel menafsirkannya sebagai tanggal.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Saya sangat tertarik mengetahui apakah ini bekerja untuk orang lain juga. Saya telah mencari solusi untuk masalah ini untuk sementara waktu, tetapi saya belum melihat solusi vba cepat untuk itu sebelumnya yang tidak termasuk memasukkan 'di depan teks input. Kode ini menyimpan data dalam bentuk aslinya.

Lars
sumber
-1

Jika Anda meletakkan koma terbalik di awal bidang, itu akan ditafsirkan sebagai teks.

Contoh: 25/12/2008menjadi'25/12/2008

Anda juga dapat memilih jenis bidang saat mengimpor.

Harley Holcombe
sumber
9
Saya tidak ingin 'di awal data saya.
27
-1. Karakter 'hanya berfungsi ketika dimasukkan langsung di excel, tetapi tidak berfungsi di CSV - Anda akan memiliki karakter ekstra' di sel excel setelah impor.
TMS
-1

Metode alternatif:

Ubah format kolom yang ingin Anda ubah menjadi 'Teks'. Pilih semua sel yang ingin Anda pertahankan, salin. Tanpa membatalkan pilihan kolom-kolom itu, klik "Edit> Rekat Khusus> Sebagai nilai"

Simpan sebagai CSV. Perhatikan bahwa ini harus menjadi hal terakhir yang Anda lakukan pada file karena ketika Anda membukanya kembali, itu akan memformat dirinya sendiri sebagai tanggal karena format sel tidak dapat disimpan dalam file CSV.

Andy Baird
sumber