Excel CSV - Định dạng ô số


86

Tôi tạo báo cáo dưới dạng tệp CSV. Khi tôi cố gắng mở tệp trong Excel, nó đưa ra giả định về kiểu dữ liệu dựa trên nội dung của ô và định dạng lại cho phù hợp.

Ví dụ: nếu tệp CSV chứa

...,005,...

Sau đó, Excel hiển thị nó là 5. Có cách nào để ghi đè điều này và hiển thị 005 không?

Tôi muốn làm điều gì đó với chính tệp đó, để người dùng có thể chỉ cần nhấp đúp vào tệp CSV để mở nó.

Tôi sử dụng Excel 2003.


Xem câu hỏi này để biết giải pháp vĩ mô cho vấn đề này.
Adam Jensen

Ngày nay có rất nhiều thư viện viết Excel trên mạng. Sẽ khá dễ dàng để tạo các tệp .xlsx bằng ngôn ngữ bạn chọn. Nếu người dùng của bạn vẫn đang sử dụng Excel 2003 vì một số lý do (thường gặp khi câu hỏi này ban đầu được hỏi, nhưng hy vọng ngày nay không có khả năng xảy ra), thì cũng có một số tùy chọn tạo .xls. Đối với những người tình cờ gặp câu hỏi này ngày hôm nay, rất có thể bạn không cần phải tự làm.
John Y

Câu trả lời:


129

Không có cách dễ dàng để kiểm soát định dạng Excel áp dụng khi mở tệp .csv. Tuy nhiên được liệt kê dưới đây là ba cách tiếp cận có thể hữu ích.

Sở thích của tôi là lựa chọn đầu tiên.

Tùy chọn 1 - Thay đổi dữ liệu trong tệp

Bạn có thể thay đổi dữ liệu trong tệp .csv như sau ..., = ”005” , ... Điều này sẽ được hiển thị trong Excel dưới dạng ..., 005 , ...

Excel sẽ giữ dữ liệu dưới dạng công thức, nhưng sao chép cột và sử dụng dán các giá trị đặc biệt sẽ loại bỏ công thức nhưng vẫn giữ nguyên định dạng

Tùy chọn 2 - Định dạng dữ liệu

Nếu đó chỉ là vấn đề về định dạng và tất cả dữ liệu của bạn trong cột đó có độ dài ba chữ số. Sau đó, mở dữ liệu trong Excel rồi định dạng cột chứa dữ liệu với định dạng tùy chỉnh này 000

Tùy chọn 3 - Thay đổi phần mở rộng tệp thành .dif (Định dạng trao đổi dữ liệu)

Thay đổi phần mở rộng tệp và sử dụng trình hướng dẫn nhập tệp để kiểm soát các định dạng. Các tệp có phần mở rộng .dif được Excel tự động mở khi nhấp đúp vào.

Từng bước một:

  • Thay đổi phần mở rộng tệp từ .csv thành .dif
  • Nhấp đúp vào tệp để mở tệp trong Excel.
  • 'Trình hướng dẫn Nhập tệp' sẽ được khởi chạy.
  • Đặt 'Loại tệp' thành 'Phân cách' và nhấp vào nút 'Tiếp theo'.
  • Trong Dấu phân cách, đánh dấu vào 'Dấu phẩy' và nhấp vào nút 'Tiếp theo'.
  • Nhấp vào từng cột dữ liệu của bạn được hiển thị và chọn 'Định dạng dữ liệu cột'. Cột có giá trị '005' phải được định dạng là 'Văn bản'.
  • Nhấp vào nút kết thúc, tệp sẽ được mở bằng Excel với các định dạng mà bạn đã chỉ định.

8
.dif không hoạt động trên máy của tôi; Mở thủ công bằng Excel 2007 không hoạt động (cảnh báo với tôi rằng loại tệp khác với phần mở rộng) và có vẻ như .DIF được liên kết với Quicktime trên nhiều máy tính. Just FYI :) Nếu không, các mẹo hay!
Nicholas

15
Tôi nghĩ tùy chọn 1 là tốt nhất, nếu bạn muốn một cách đơn giản để tạo một tệp "chỉ hoạt động" - tức là nó mở trên máy tính của người dùng trong excel mà không yêu cầu họ thực hiện thêm bất kỳ công việc nào.
Kip

Tôi gặp vấn đề tương tự và không có vấn đề nào ở trên là phù hợp, xin lỗi. Sau đó, tôi có thể xuất dưới dạng XML và sử dụng XSLT để chuyển sang CSV. Tôi cần các tập tin CSV là đúng để nó có thể được nhập khẩu vào một ứng dụng khác
Matt

1
Xin lưu ý rằng tùy chọn 1 không phải lúc nào cũng tốt, nếu bạn có một ô có nội dung "1E02, bất kỳ văn bản nào" và sau đó bạn đặt một dấu bằng ở phía trước thì Excel sẽ tưởng tượng bạn đã nhập một công thức. Đầu tiên công thức sẽ sai nhưng thứ hai và quan trọng nhất là nó sẽ tách văn bản của bạn thành 2 ô.
ghiscoding

1
Cảm ơn vì Tùy chọn 1. Đã khắc phục sự cố ký hiệu khoa học của tôi mà không cần thêm bất kỳ công việc nào.
NaN

28

Không sử dụng CSV, hãy sử dụng SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Nó cung cấp nhiều quyền kiểm soát hơn đối với định dạng và Excel sẽ không cố gắng đoán loại trường bằng cách kiểm tra nội dung. Nó trông hơi phức tạp, nhưng bạn có thể thoát khỏi việc sử dụng một tập hợp con rất nhỏ.


2
+1 Việc ghi vào SYLK rất đơn giản để thực hiện, tôi đã làm điều đó với tư cách là người mới.
Matt H

1
Tôi không biết về định dạng này. Nó trông giống như một cái gì đó mà tôi có thể sử dụng. +1 cho điều này!
Buggabill

+1 Tôi mất năm phút để chuyển từ CSV sang SYLK. Định dạng đầu ra goto của tôi từ bây giờ!
TheFish

@xamde, bạn nói đúng. Thật kỳ lạ là họ không bao giờ mở rộng định dạng để hỗ trợ nó, như họ đã làm với RTF.
Mark Ransom

WTF, hoặc những gì mọi người sẽ giới thiệu nó Tôi trích dẫn từ Wikipedia: "Microsoft không xuất bản đặc điểm kỹ thuật SYLK."
sorin

14

Điều này hoạt động cho Microsoft Office 2010, Phiên bản Excel 14

Tôi đã đọc nhầm tùy chọn của OP "để làm gì đó với chính tệp." Tôi vẫn giữ điều này cho những ai muốn có giải pháp để định dạng nhập trực tiếp

  1. Mở tệp trống (mới) (Tệp -> Mới từ sổ làm việc)
  2. Mở Trình hướng dẫn Nhập (Dữ liệu -> Từ Văn bản)
  3. Chọn tệp .csv của bạn và Nhập
  4. Trong hộp thoại, chọn 'Delimited' và nhấp vào Tiếp theo.
  5. Chọn dấu phân cách của bạn (bỏ chọn mọi thứ trừ 'dấu phẩy'), chọn dấu phân cách Văn bản của bạn (có thể là {Không có}), nhấp vào Tiếp theo
  6. Trong trường Xem trước dữ liệu, chọn cột bạn muốn là văn bản. Nó sẽ làm nổi bật.
  7. Trong trường Định dạng dữ liệu cột , hãy chọn 'Văn bản'.
  8. Bấm xong.

giải thích bằng hình ảnh: support.insight.ly/hc/en-us/articles/…
Yo Ludke

2

Bạn chỉ có thể định dạng phạm vi của mình dưới dạng Văn bản.

Ngoài ra đây là một bài viết tốt đẹp về các định dạng số và làm thế nào bạn có thể lập trình cho họ.


Điều đó sẽ chỉ ảnh hưởng đến cách giá trị được hiển thị. Bạn cần chuyển đổi nó thành văn bản, bằng công thức hoặc trong quá trình nhập, bằng một trong nhiều phương thức trong chủ đề này
leo

2

Trên thực tế, tôi phát hiện ra rằng, ít nhất là bắt đầu với Office 2003, bạn có thể lưu bảng tính Excel dưới dạng tệp XML. Do đó, tôi có thể tạo ra một tệp XML và khi tôi nhấp đúp vào nó, nó sẽ được mở trong Excel. Nó cung cấp mức độ kiểm soát tương tự như SYLK, nhưng cú pháp XML trực quan hơn.


2

Thêm một khoảng trống không ngắt trong ô có thể hữu ích. Ví dụ: "firstvalue";"secondvalue";"005 ";"othervalue"

Nó buộc Excel phải coi nó như một văn bản và khoảng trắng không hiển thị. Trên Windows, bạn có thể thêm không gian không bị phá vỡ bằng cách gõ phím alt + 0160. Xem tại đây để biết thêm thông tin: http://en.wikipedia.org/wiki/Non-break_space

Đã thử trên Excel 2010. Hy vọng điều này có thể giúp những người vẫn đang tìm kiếm một giải pháp khá thích hợp cho vấn đề này.


2

Tôi đã gặp sự cố này khi xuất dữ liệu CSV từ mã C # và đã giải quyết vấn đề này bằng cách thêm dữ liệu 0 ở đầu với ký tự tab \ t, vì vậy dữ liệu được hiểu là văn bản chứ không phải số trong Excel (nhưng không giống như viết trước các ký tự khác, nó sẽ không ' t được nhìn thấy).

Tôi thích cách tiếp cận = "001", nhưng điều này sẽ không cho phép nhập lại dữ liệu CSV đã xuất vào ứng dụng C # của tôi mà không xóa tất cả định dạng này khỏi tệp CSV nhập (thay vào đó, tôi sẽ chỉ cắt bớt dữ liệu nhập) .


1

Tôi tin rằng khi bạn nhập tệp, bạn có thể chọn Loại cột. Đặt nó là Văn bản thay vì Số. Mặc dù vậy, tôi không có bản sao nào trước mặt tôi vào lúc này.


1

Tải csv vào oleDB và buộc tất cả các kiểu dữ liệu được suy ra thành chuỗi

tôi đã hỏi câu hỏi tương tự và sau đó trả lời nó bằng mã.

về cơ bản khi tệp csv được tải, trình điều khiển oledb đưa ra các giả định, bạn có thể cho nó biết những giả định cần thực hiện.

Mã của tôi buộc tất cả các kiểu dữ liệu thành chuỗi mặc dù ... rất dễ dàng để thay đổi lược đồ. vì mục đích của tôi, tôi đã sử dụng xslt để có được theo cách tôi muốn - nhưng tôi đang phân tích cú pháp nhiều loại tệp.


1

Tôi biết đây là một câu hỏi cũ, nhưng tôi có một giải pháp chưa được liệt kê ở đây.

Khi bạn tạo csv, hãy thêm khoảng trắng sau dấu phẩy nhưng trước giá trị của bạn, ví dụ , 005,.

Điều này vẫn ngăn chặn định dạng ngày tháng tự động trong excel 2007.


2
Mới thử nghiệm, dường như không hoạt động với Excel 2007 và một cột số. : - /
Norman H

1

Phương pháp Trình hướng dẫn Nhập Văn bản KHÔNG hoạt động khi tệp CSV đang được nhập có dấu ngắt dòng trong một ô. Phương pháp này xử lý tình huống này (ít nhất là với dữ liệu được phân cách bằng tab):

  1. Tạo tệp Excel mới
  2. Ctrl + A để chọn tất cả các ô
  3. Trong hộp tổ hợp Định dạng Số, hãy chọn Văn bản
  4. Mở tệp được phân cách bằng tab trong trình soạn thảo văn bản
  5. Chọn tất cả, sao chép và dán vào Excel


1

Điều này đã khiến tôi phát điên cả ngày (vì thực sự bạn không thể kiểm soát các loại cột Excel trước khi mở tệp CSV) và điều này đã làm việc với tôi, sử dụng VB.NET và 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

0

Khi mở CSV, bạn sẽ nhận được trình hướng dẫn nhập văn bản. Ở bước cuối cùng của trình hướng dẫn, bạn có thể nhập cột cụ thể dưới dạng văn bản, do đó giữ lại tiền tố '00'. Sau đó, bạn có thể định dạng ô theo bất kỳ cách nào bạn muốn.

Tôi đã thử với Excel 2007 và nó dường như hoạt động.


1
Excel 2003 không bật lên trình hướng dẫn.
Sergey Stadnik

0

Tốt, excel không bao giờ bật lên trình hướng dẫn cho các tệp CSV. Nếu bạn đổi tên nó thành .txt, bạn sẽ thấy trình hướng dẫn khi thực hiện Tệp> Mở trong Excel vào lần tiếp theo.


0

Đặt một trích dẫn duy nhất trước lĩnh vực này. Excel sẽ coi nó là văn bản, ngay cả khi nó trông giống như một số.

...,`005,...

CHỈNH SỬA: Điều này là sai. Thủ thuật dấu nháy đơn chỉ hoạt động khi nhập dữ liệu trực tiếp vào Excel. Khi bạn sử dụng nó trong tệp CSV, dấu nháy đơn xuất hiện trong trường mà bạn không muốn.

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


4
Đây là điều mà mọi người có thể sẽ thử. Vì vậy, biết nó sẽ không hoạt động là hữu ích và tiết kiệm thời gian.
AndyM
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.