it-swarm-vi.tech

Định dạng CSV được phân tách bằng dấu phẩy để buộc Excel diễn giải giá trị dưới dạng chuỗi

Tôi đã tìm kiếm một lúc trong khi cố gắng tìm ra cách xuất tệp CSV theo cách để buộc Excel diễn giải các giá trị dưới dạng chuỗi và không cố chuyển đổi chúng thành số hoặc ngày.

ví dụ.:

"141", "10/11/2002", "350.00", "1311742251"

Excel cố gắng "chuyển đổi" một cách thông minh tất cả những định dạng này sang định dạng ngày/số gốc. Có cách nào xung quanh đó không?


EDIT: Làm rõ ý định câu hỏi của tôi, xin lỗi vì nhầm lẫn.

56
Simon East

Đối với những người có quyền kiểm soát dữ liệu nguồn, rõ ràng Excel sẽ tự động phát hiện định dạng của trường CSV trừ khi cột CSV có định dạng này:

"=""Data Here"""

ví dụ...

20,       5.5%,      "0404 123 351", "3-6",  "=""123"""
[number]  [percent]  [number]        [date]  [string]  <-- how Excel interprets

Nó cũng hoạt động trong Bảng tính Google, nhưng không chắc các ứng dụng bảng tính khác có hỗ trợ ký hiệu này hay không.

Nếu bạn nghi ngờ bất kỳ dữ liệu nào có thể chứa dấu ngoặc kép, bạn cần thoát kép chúng, như thế này ...

"=""She said """"Hello"""" to him"""



[.__.] (EDIT: Được cập nhật với các chỉnh sửa, cảm ơn DMA57361!)

58
Simon East

Giống như nhiều người khác, tôi đã phải vật lộn với những quyết định tương tự mà Microsoft đưa ra và thử nhiều giải pháp được đề xuất.

Đối với Excel 2007 như sau:

  • Đặt tất cả các giá trị trong dấu ngoặc kép KHÔNG giúp
  • Đặt một = trước tất cả các giá trị sau khi đặt chúng vào các giá trị kép giúp ích, NHƯNG làm cho tệp csv trở nên vô dụng đối với hầu hết các ứng dụng khác
  • Đặt dấu ngoặc đơn quanh dấu ngoặc kép xung quanh tất cả các giá trị là rác
  • Đặt một khoảng trắng trước tất cả các giá trị trước khi đặt dấu ngoặc kép xung quanh chúng KHÔNG ngăn chuyển đổi thành ngày, nhưng KHÔNG ngăn chặn việc cắt các số 0 đứng đầu hoặc dấu.
  • Đặt một trích dẫn trước một giá trị chỉ hoạt động khi nhập dữ liệu trong Excel.

Tuy nhiên:

Đặt một tab trước tất cả các giá trị trước khi đặt dấu ngoặc kép xung quanh chúng KHÔNG ngăn chuyển đổi thành ngày VÀ KHÔNG ngăn cắt các số 0 ở đầu hoặc cuối và trang tính thậm chí không hiển thị các dấu hiệu cảnh báo khó chịu ở góc trên bên trái của mỗi ô.

Ví dụ.:

"<tab character><some value>","<tab character><some other value>"

Lưu ý rằng ký tự tab phải nằm trong dấu ngoặc kép. Chỉnh sửa: hóa ra dấu ngoặc kép thậm chí không cần thiết.

Nhấp đúp vào tệp csv có thể mở tệp dưới dạng bảng tính trong Excel hiển thị tất cả các giá trị được xử lý như ở trên, như dữ liệu văn bản. Đảm bảo đặt Excel để sử dụng '.' làm dấu thập phân chứ không phải ',' hoặc mỗi dòng của tệp csv sẽ kết thúc dưới dạng một văn bản trong ô đầu tiên của mỗi hàng. Rõ ràng Microsoft nghĩ rằng CSV có nghĩa là "Không phải là dấu thập phân" Giá trị tách biệt.

33
ajabo

Sử dụng chức năng nhập của Excel cho phép bạn chỉ định định dạng (tự động, văn bản hoặc ngày) mỗi cột nên được hiểu là không yêu cầu bất kỳ sửa đổi nào đối với các tệp dữ liệu.

Bạn có thể tìm thấy nó dưới dạng DataGet External DataFrom Text trong Excel 2007/2010.
[.__.] Hoặc DataImport External DataImport Data trong Excel 2003.

Đây là hình ảnh của Nhập văn bản Excel 2003 Wizard đang hoạt động trên dữ liệu mẫu được cung cấp, hiển thị cho tôi nhập hai cột sau dưới dạng văn bản:

Excel 2003: Text Import Wizard on Step 3 - data types

21
DMA57361

Ví dụ từ Simon không hiệu quả với tôi và tôi nghi ngờ đó là một sự khác biệt về ngôn ngữ. Trong C # đây là chuỗi định dạng làm việc của tôi trông như thế nào:

var linebreak = (i++ == list.Count) ? "" : "\r\n";

csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
    item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);

và đây là những gì các tập tin đầu ra trông như:

="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""

Có thể thấy, định dạng trong tệp đầu ra là ="VALUE", không phải "=""VALUE""", mà tôi tin rằng có thể là quy ước Visual Basic.

Tôi đang sử dụng Excel 2010. Ngẫu nhiên, Google Sheets sẽ không mở/chuyển đổi tệp được định dạng theo cách này. Nó sẽ hoạt động nếu bạn xóa dấu bằng như vậy "VALUE", - Excel vẫn sẽ mở tệp nhưng bỏ qua thực tế là bạn muốn các cột của mình là chuỗi.

1
Shane