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.
excel
csv
formatting
number-formatting
Sergey Stadnik
sumber
sumber
Jawaban:
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:
sumber
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.
sumber
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
sumber
Anda cukup memformat rentang Anda sebagai Teks.
Juga di sini adalah artikel bagus tentang format angka dan bagaimana Anda dapat memprogramnya.
sumber
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.
sumber
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.
sumber
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) .
sumber
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.
sumber
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.
sumber
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.
sumber
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):
sumber
Cukup tambahkan 'sebelum nomor di dokumen CSV.
sumber
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
sumber
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.
sumber
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.
sumber
Letakkan satu kutipan di depan bidang. Excel akan memperlakukannya sebagai teks, meskipun terlihat seperti angka.
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
sumber