Excel CSV - Format sel angka

86

Saya membuat laporan sebagai file CSV. Ketika saya mencoba membuka file di Excel, itu membuat asumsi tentang tipe data berdasarkan konten sel, dan memformatnya sesuai.

Misalnya, jika file CSV berisi

...,005,...

Kemudian Excel menunjukkannya sebagai 5. Apakah ada cara untuk menimpanya dan menampilkan 005?

Saya lebih suka melakukan sesuatu pada file itu sendiri, sehingga pengguna bisa mengklik dua kali pada file CSV untuk membukanya.

Saya menggunakan Excel 2003.

Sergey Stadnik
sumber
Lihat pertanyaan ini untuk solusi makro untuk masalah ini.
Adam Jensen
Saat ini ada banyak perpustakaan penulisan Excel di luar sana. Seharusnya cukup mudah membuat file .xlsx dalam bahasa pilihan Anda. Jika pengguna Anda masih menggunakan Excel 2003 karena beberapa alasan (umum terjadi saat pertanyaan ini awalnya diajukan, tapi semoga tidak terlalu mungkin hari ini), ada juga beberapa opsi penghasil .xls. Bagi orang-orang yang menemukan pertanyaan ini hari ini, kemungkinan besar Anda tidak perlu mengajukan pertanyaan sendiri.
John Y

Jawaban:

129

Tidak ada cara mudah untuk mengontrol pemformatan yang diterapkan Excel saat membuka file .csv. Namun di bawah ini adalah tiga pendekatan yang mungkin bisa membantu.

Preferensi saya adalah opsi pertama.

Opsi 1 - Ubah data di file

Anda dapat mengubah data dalam file .csv sebagai berikut ..., = "005" , ... Ini akan ditampilkan di Excel sebagai ..., 005 , ...

Excel akan menyimpan data sebagai rumus, tetapi menyalin kolom dan menggunakan nilai khusus tempel akan menghilangkan rumus tetapi mempertahankan pemformatan

Opsi 2 - Format data

Jika ini hanya masalah format dan semua data Anda di kolom itu memiliki panjang tiga digit. Kemudian buka datanya di Excel kemudian format kolom yang berisi data tersebut dengan custom format 000

Pilihan 3 - Ubah ekstensi file ke .dif (Format pertukaran data)

Ubah ekstensi file dan gunakan wizard impor file untuk mengontrol format. File dengan ekstensi .dif secara otomatis dibuka oleh Excel saat diklik dua kali.

Selangkah demi selangkah:

  • Ubah ekstensi file dari .csv menjadi .dif
  • Klik dua kali pada file tersebut untuk membukanya di Excel.
  • 'File Import Wizard' akan diluncurkan.
  • Setel 'Jenis file' menjadi 'Dibatasi' dan klik tombol 'Berikutnya'.
  • Di bawah Pembatas, centang 'Koma' dan klik tombol 'Berikutnya'.
  • Klik pada setiap kolom data Anda yang ditampilkan dan pilih 'Format data kolom'. Kolom dengan nilai '005' harus diformat sebagai 'Teks'.
  • Klik tombol finish, file akan dibuka oleh Excel dengan format yang telah Anda tentukan.
Robert Mearns
sumber
8
.dif tidak bekerja pada mesin saya; membuka secara manual dengan Excel 2007 tidak berfungsi (memperingatkan saya bahwa jenis file berbeda dari ekstensi) dan sepertinya .DIF dikaitkan dengan Quicktime di banyak komputer. FYI :) Jika tidak, tips bagus!
Nicholas
15
Saya rasa opsi 1 adalah yang terbaik, jika Anda menginginkan cara yang tidak merepotkan untuk menghasilkan file yang "langsung berfungsi" - yaitu terbuka di komputer pengguna di excel tanpa mengharuskan mereka melakukan pekerjaan tambahan.
Kip
Saya memiliki masalah yang sama, dan tidak satu pun dari pertanyaan di atas yang sesuai, maaf. Berpikir saya mungkin mengekspor sebagai XML dan menggunakan XSLT untuk pergi ke CSV. Saya membutuhkan file CSV yang benar sehingga dapat diimpor ke aplikasi lain
Matt
1
Harap dicatat bahwa opsi 1 tidak selalu baik, jika Anda memiliki sel katakanlah "1E02, teks apa pun" dan kemudian Anda meletakkan sama di depan maka Excel akan membayangkan Anda memasukkan rumus. Pertama rumusnya akan salah tapi yang kedua dan yang terpenting itu akan membagi teks Anda menjadi 2 sel.
ghiscoding
1
Terima kasih untuk Opsi 1. Memperbaiki masalah notasi ilmiah saya tanpa pekerjaan tambahan.
NaN
28

Jangan gunakan CSV, gunakan SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Ini memberi lebih banyak kontrol atas pemformatan, dan Excel tidak akan mencoba menebak jenis bidang dengan memeriksa isinya. Ini terlihat agak rumit, tetapi Anda dapat melakukannya dengan menggunakan subset yang sangat kecil.

Mark Ransom
sumber
2
+1 Menulis ke SYLK mudah diterapkan, saya melakukannya sebagai pemula.
Matt H
1
Saya tidak tahu tentang format ini. Sepertinya sesuatu yang bisa saya gunakan. 1 untuk ini!
Buggabill
+1 Butuh waktu lima menit untuk beralih dari CSV ke SYLK. Format keluaran goto saya mulai sekarang!
TheFish
@xamde, kamu benar. Aneh bahwa mereka tidak pernah memperpanjang format untuk mendukungnya, seperti yang mereka lakukan dengan RTF.
Markus Tebusan
WTF, atau siapa pun yang akan merekomendasikannya, saya kutip dari Wikipedia: "Microsoft tidak menerbitkan spesifikasi SYLK."
sorin
14

Ini berfungsi untuk Microsoft Office 2010, Excel Versi 14

Saya salah membaca preferensi OP "untuk melakukan sesuatu pada file itu sendiri." Saya masih menyimpan ini untuk mereka yang menginginkan solusi untuk memformat impor secara langsung

  1. Buka file kosong (baru) (File -> Baru dari buku kerja)
  2. Buka Panduan Impor (Data -> Dari Teks)
  3. Pilih file .csv Anda dan Impor
  4. Di kotak dialog, pilih 'Dibatasi', dan klik Berikutnya.
  5. Pilih pembatas Anda (hapus centang semua kecuali 'koma'), pilih Pengualifikasi teks Anda (kemungkinan {Tidak ada}), klik Berikutnya
  6. Pada field Data preview pilih kolom yang ingin dijadikan teks. Ini harus disorot.
  7. Di bidang Format data kolom , pilih 'Teks'.
  8. Klik selesai.

sumber
dijelaskan dengan gambar: support.insight.ly/hc/en-us/articles/…
Yo Ludke
2

Anda cukup memformat rentang Anda sebagai Teks.

Juga di sini adalah artikel bagus tentang format angka dan bagaimana Anda dapat memprogramnya.

Ólafur Waage
sumber
Itu hanya akan mempengaruhi bagaimana nilai ditampilkan. Anda perlu mengubahnya menjadi teks, baik dengan rumus, atau selama impor, dengan salah satu dari banyak metode yang diatur di utas ini
leo
2

Sebenarnya saya menemukan bahwa, setidaknya dimulai dengan Office 2003, Anda dapat menyimpan spreadsheet Excel sebagai file XML. Jadi, saya bisa menghasilkan file XML dan ketika saya mengklik dua kali, file itu akan dibuka di Excel. Ini memberikan tingkat kontrol yang sama dengan SYLK, tetapi sintaks XML lebih intuitif.

Sergey Stadnik
sumber
2

Menambahkan ruang non-break di dalam sel dapat membantu. Misalnya: "firstvalue";"secondvalue";"005 ";"othervalue"

Ini memaksa Excel untuk memperlakukannya sebagai teks dan spasi tidak terlihat. Di Windows, Anda dapat menambahkan ruang non-breaking dengan memberi tip alt + 0160. Lihat di sini untuk info lebih lanjut: http://en.wikipedia.org/wiki/Non-breaking_space

Sudah mencoba Excel 2010. Semoga ini bisa membantu orang yang masih mencari solusi yang cukup tepat untuk masalah ini.

Kloe2378231
sumber
2

Saya mengalami masalah ini saat mengekspor data CSV dari kode C #, dan menyelesaikannya dengan menambahkan data nol terdepan dengan karakter tab \ t, sehingga data tersebut diinterpretasikan sebagai teks daripada numerik di Excel (namun tidak seperti karakter sebelumnya, tidak akan ' tidak terlihat).

Saya memang menyukai pendekatan = "001", tetapi ini tidak akan mengizinkan data CSV yang diekspor untuk diimpor kembali ke aplikasi C # saya tanpa menghapus semua pemformatan ini dari file CSV impor (sebagai gantinya saya hanya akan memangkas data impor) .

Richard Pursehouse
sumber
1

Saya yakin ketika Anda mengimpor file, Anda dapat memilih Jenis Kolom. Jadikan sebagai Teks alih-alih Angka. Saya tidak memiliki salinan di depan saya saat ini untuk diperiksa.

Harley Holcombe
sumber
1

Muat csv ke oleDB dan paksa semua tipe data yang disimpulkan ke string

saya menanyakan pertanyaan yang sama dan kemudian menjawabnya dengan kode.

pada dasarnya ketika file csv dimuat, driver oledb membuat asumsi, Anda dapat mengetahui asumsi apa yang harus dibuat.

Kode saya memaksa semua tipe data untuk string ... sangat mudah untuk mengubah skema. untuk tujuan saya, saya menggunakan xslt untuk mendapatkan cara yang saya inginkan - tetapi saya mem-parsing berbagai macam file.

John Nicholas
sumber
1

Saya tahu ini adalah pertanyaan lama, tetapi saya memiliki solusi yang tidak tercantum di sini.

Saat Anda menghasilkan csv, tambahkan spasi setelah koma tetapi sebelum nilai Anda misalnya , 005, .

Ini berfungsi untuk mencegah pemformatan tanggal otomatis di excel 2007.

plntxt
sumber
2
Baru saja diuji, tampaknya tidak berfungsi dengan Excel 2007 dan kolom angka. : - /
Norman H
1

Metode Wisaya Impor Teks TIDAK berfungsi saat file CSV yang diimpor memiliki jeda baris di dalam sel. Metode ini menangani skenario ini (setidaknya dengan data tab delimited):

  1. Buat file Excel baru
  2. Ctrl + A untuk memilih semua sel
  3. Dalam kotak kombo Format Angka, pilih Teks
  4. Buka file tab delimited di editor teks
  5. Pilih semua, salin dan tempel ke Excel
Acar
sumber
1

Cukup tambahkan 'sebelum nomor di dokumen CSV.

MNassar
sumber
Ini tidak berfungsi di Excel 2010 ('menjadi bagian dari konten sel).
sancho.s ReinstateMonicaCellio
1

Ini membuat saya gila sepanjang hari (karena memang Anda tidak dapat mengontrol jenis kolom Excel sebelum membuka file CSV), dan ini berhasil untuk saya, menggunakan VB.NET dan Excel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function
Ellen
sumber
0

Saat membuka CSV, Anda mendapatkan wizard impor teks. Pada langkah terakhir wizard, Anda harus dapat mengimpor kolom tertentu sebagai teks, dengan demikian mempertahankan awalan '00'. Setelah itu Anda dapat memformat sel dengan cara apa pun yang Anda inginkan.

Saya mencoba dengan Excel 2007 dan ternyata berhasil.

Menandai
sumber
1
Excel 2003 tidak memunculkan wizard.
Sergey Stadnik
0

Nah, excel tidak pernah memunculkan wizard untuk file CSV. Jika Anda mengganti namanya menjadi .txt, Anda akan melihat wizard saat Anda melakukan File> Buka di Excel di lain waktu.

Narayanan
sumber
0

Letakkan satu kutipan di depan bidang. Excel akan memperlakukannya sebagai teks, meskipun terlihat seperti angka.

...,`005,...

EDIT: Ini salah. Trik apostrof hanya berfungsi saat memasukkan data langsung ke Excel. Saat Anda menggunakannya dalam file CSV, tanda kutip muncul di bidang yang tidak Anda inginkan.

http://support.microsoft.com/kb/214233

JW.
sumber
5
Ini adalah sesuatu yang cenderung dicoba orang. Jadi mengetahui itu tidak akan berhasil adalah berguna dan menghemat waktu.
AndyM