Nhập CSV có ngắt dòng trong Excel 2007


129

Tôi đang làm việc trên một tính năng để xuất kết quả tìm kiếm sang tệp CSV sẽ được mở trong Excel. Một trong các trường là trường văn bản tự do, có thể chứa dấu ngắt dòng, dấu phẩy, trích dẫn, v.v. Để chống lại điều này, tôi đã bọc trường trong dấu ngoặc kép (").

Tuy nhiên, khi tôi nhập dữ liệu vào Excel 2007, đặt dấu phân cách phù hợp và đặt trình phân loại văn bản thành trích dẫn kép, ngắt dòng vẫn đang tạo các bản ghi mới tại các ngắt dòng, nơi tôi sẽ thấy toàn bộ trường văn bản trong một đơn bào.

Tôi cũng đã thử thay CR / LF (\ r \ n) chỉ bằng CR (\ r) và một lần nữa chỉ bằng LF (\ n), nhưng không gặp may.

Có ai khác gặp phải hành vi này không, và nếu vậy, bạn đã khắc phục nó như thế nào?

TIA,
-J

EDIT:
Đây là một tập tin nhanh tôi viết bằng tay để nhân đôi vấn đề.

ID, Tên, Mô tả
"12345", "Smith, Joe", "Này.
Tên tôi là Joe."

Khi tôi nhập cái này vào Excel 2007, tôi kết thúc bằng một hàng tiêu đề và hai bản ghi. Lưu ý rằng dấu phẩy trong "Smith, Joe" đang được xử lý đúng cách. Nó chỉ là ngắt dòng đang gây ra vấn đề.


Tôi đã xem tệp CSV trong Notepad ++ và mọi thứ dường như đều chính xác. Tôi có các trường khác bằng dấu phẩy và chúng đang được nhập chính xác. Nó chỉ là ngắt dòng đang gây ra vấn đề.
jeremyalan

4
Tôi gặp vấn đề với các tệp .csv UTF8 với dữ liệu nhiều dòng và excel. Cuối cùng tôi chỉ tải tệp lên Google Docs, mở nó ra một trang google, sau đó tải xuống dưới dạng tệp .xls. Hoạt động tốt cho tôi theo cách này.
creuzerm

Câu trả lời:


53

Excel (ít nhất là trong Office 2007 trên XP) có thể hoạt động khác nhau tùy thuộc vào việc tệp CSV được nhập bằng cách mở tệp từ menu Tệp-> Mở hoặc bằng cách bấm đúp vào tệp trong Explorer.

Tôi có một tệp CSV ở dạng mã hóa UTF-8 và chứa các dòng mới trong một số ô. Nếu tôi mở tệp này từ Tệp của Excel-> Menu mở, trình hướng dẫn "nhập CSV" sẽ bật lên và tệp không thể được nhập chính xác: các dòng mới bắt đầu một hàng mới ngay cả khi được trích dẫn. Nếu tôi mở tệp này bằng cách nhấp đúp vào tệp đó trong cửa sổ Explorer, thì nó sẽ mở một cách chính xác mà không cần sự can thiệp của trình hướng dẫn.


1
Bất kỳ ý tưởng làm thế nào để có được các cài đặt tương tự như với nhấp đúp?
Michiel Thalen

7
Đúng rồi! Cách kỳ lạ.
David

5
Nếu bạn đang sử dụng cài đặt khu vực của Đức, bạn phải sử dụng dấu chấm phẩy (;) thay vì dấu phẩy (,) trong csv của bạn để nhấp đúp để hoạt động ...
user1859022

3
nó không làm việc cho tôi. Với "," là dấu phân cách, nó đã mở mọi thứ trong một cột bằng cách nhấp đúp. Với ";" là dấu phân cách, nó được nhập chính xác ngoại trừ các trường văn bản nhiều dòng, được nhập dưới dạng một số bản ghi. Tôi có Excel 2010
Andrej Adamenko

2
@ user1859022 Tôi nhân đôi số đó cho miền địa phương Hungary. trên thực tế, bất kỳ miền địa phương nào sử dụng dấu phẩy làm dấu tách thập phân đều phải sử dụng dấu chấm phẩy làm dấu tách trường cho csv nhấp đúp mở để hoạt động chính xác
robotik

42

Không có giải pháp đề xuất nào làm việc cho tôi.

Những gì thực sự hoạt động (với bất kỳ mã hóa):

Sao chép / dán dữ liệu từ tệp csv (mở trong Trình chỉnh sửa), sau đó thực hiện "văn bản trong cột" -> không hoạt động, được rồi.

Chuyển đến tab tiếp theo và sao chép / dán lại (tương tự những gì bạn đã có trong bảng tạm của mình) -> tự động hoạt động ngay bây giờ.


2
Trong trường hợp của tôi, điều này đã hoạt động, theo một cách nào đó: nó đã thu gọn chính xác CSV thành các bản ghi đơn lẻ nhưng đã xóa tất cả dữ liệu trong một trường qua dòng mới.
Lilienthal

1
Điều này đã làm việc, bất kỳ ý tưởng tại sao nó không hoạt động khi nhập csv từ excel?
Rafael Sisto

1
Tôi có thể xác nhận rằng điều này hoạt động, bạn thậm chí có thể dán thêm dữ liệu vào các trang tính khác nhau mà không cần lặp lại lệnh "chuyển văn bản thành cột". Điều này rất hữu ích nếu bạn cần nhập một số tệp.
Alex

1
Tại sao điều này hoạt động nhưng không mở CSV hoặc thêm nó dưới dạng Dữ liệu văn bản với tất cả các cài đặt phù hợp không hoạt động? Cảm ơn vì tiền hỗ trợ. Nhóm Sao chép / Dán cần nói chuyện với nhóm nhập dữ liệu!
alexGIS

2
Thánh shit. Điều này thực sự hoạt động. và nó có ý nghĩa tại sao. Khi tạo "văn bản thành cột", Excel sẽ ghi nhớ các cài đặt và nó sẽ tự động chuyển đổi. Khi bạn có văn bản đã được tách thành hàng, nó sẽ nhìn từng hàng và bỏ qua các dòng mới. Tôi nghĩ rằng MS nên bao gồm một hộp kiểm để giữ hành vi hoặc quét lại dữ liệu. Tôi không quan tâm, ... nếu công việc quái
đản

28

Nếu bạn đang thực hiện việc này một cách thủ công, hãy tải xuống LibreScript và sử dụng LibreScript Calc để nhập CSV của bạn. Nó thực hiện công việc tốt hơn nhiều so với bất kỳ phiên bản Excel nào tôi đã thử và nó có thể lưu vào XLS hoặc XLSX theo yêu cầu nếu bạn cần chuyển sang Excel sau đó.

Nhưng nếu bạn bị mắc kẹt với Excel và cần sửa chữa tốt hơn, dường như có một cách. Nó dường như là phụ thuộc địa phương (có vẻ ngu ngốc, theo ý kiến ​​khiêm tốn của tôi). Tôi không có Excel 2007, nhưng tôi có Excel 2010 và ví dụ đã cho:

ID,Name,Description
"12345","Smith, Joe","Hey.
My name is Joe."

không hoạt động. Tôi đã viết nó trong Notepad và chọn Lưu dưới dạng ... và bên cạnh nút Lưu, bạn có thể chọn mã hóa. Tôi đã chọn UTF-8 như đề xuất, nhưng không có may mắn. Thay đổi dấu phẩy thành dấu chấm phẩy làm việc cho tôi, mặc dù. Tôi đã không thay đổi bất cứ điều gì khác, và nó chỉ hoạt động. Vì vậy, tôi đã thay đổi ví dụ để trông như thế này và chọn mã hóa UTF-8 khi lưu trong Notepad:

ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."

Nhưng có một nhược điểm! Cách duy nhất nó hoạt động là nếu bạn bấm đúp vào tệp CSV để mở nó trong Excel. Nếu tôi cố gắng nhập dữ liệu từ văn bản và chọn CSV này, thì nó vẫn không thành công trên các dòng mới được trích dẫn.

Nhưng có một cái khác nhược điểm ! Dấu tách trường làm việc (dấu phẩy trong ví dụ ban đầu, dấu chấm phẩy trong trường hợp của tôi) dường như phụ thuộc vào Cài đặt khu vực của hệ thống (được đặt trong Bảng điều khiển -> Vùng và Ngôn ngữ). Ở Na Uy, dấu phẩy là dấu phân cách thập phân. Excel dường như tránh ký tự này và thích dấu chấm phẩy thay thế. Tôi có quyền truy cập vào một máy tính khác được đặt ở miền địa phương Anh và trên máy tính đó, ví dụ đầu tiên với dấu tách dấu phẩy hoạt động tốt (chỉ trên doubleclick), và máy tính có dấu chấm phẩy thực sự thất bại! Quá nhiều cho khả năng tương tác. Nếu bạn muốn xuất bản CSV này trực tuyến và người dùng có thể có Excel, tôi đoán bạn phải xuất bản cả hai phiên bản và đề nghị mọi người kiểm tra tệp nào cho số lượng hàng chính xác.

Vì vậy, tất cả các chi tiết mà tôi đã có thể thu thập để làm việc này là:

  1. Tệp phải được lưu dưới dạng UTF-8 bằng BOM, đây là điều mà Notepad thực hiện khi bạn chọn UTF-8. Tôi đã thử UTF-8 mà không có BOM (có thể chuyển đổi dễ dàng trong Notepad ++), nhưng sau đó bấm đúp vào tài liệu không thành công.
  2. Bạn phải sử dụng dấu phân cách dấu phẩy hoặc dấu chấm phẩy, nhưng không phải là dấu phân cách thập phân trong Cài đặt khu vực của bạn. Có lẽ các nhân vật khác làm việc, nhưng tôi không biết.
  3. Bạn phải trích dẫn các trường có chứa một dòng mới với "ký tự.
  4. Tôi đã sử dụng các kết thúc dòng Windows (\ r \ n) cả trong trường văn bản và dưới dạng phân tách bản ghi, hoạt động.
  5. Bạn phải bấm đúp vào tệp để mở tệp, nhập dữ liệu từ văn bản không hoạt động.

Hy vọng điều này sẽ giúp được ai đó.


Ngoài ra, thủ thuật được đề cập bởi @sdplus dường như có hiệu quả! Tôi nghĩ điều xảy ra là khi bạn lần đầu tiên dán và thực hiện thao tác "chuyển văn bản thành cột", bạn đang định cấu hình công cụ phân tách trường và trích dẫn trong Excel. Lần thứ hai bạn dán, nó sử dụng cấu hình này và phân chia dữ liệu chính xác thành các cột dựa trên cấu hình. Nhưng đây có vẻ là một cách tiếp cận rất thủ công.
ketil

có, mỗi lần bạn nhập Văn bản hoặc thực hiện Văn bản thành Cột, bạn sẽ hiệu chỉnh lại cách sao chép / dán sẽ hoạt động trong phiên đã cho. nó thậm chí còn được áp dụng cho các sổ làm việc mới mà bạn tạo cho đến khi bạn đóng Excel. nó có thể được bực bội, quá. một khi bạn sử dụng một dấu phân tách nhất định để nhập, nó sẽ phân tách văn bản của bạn bằng cách đó ngay cả khi bạn chỉ muốn dán một câu trong một ô. bạn phải làm lại quá trình nhập với tab dưới dạng dấu phân cách hoặc khởi động lại Excel để dừng nó.
robotik

Thủ thuật của bạn thực sự có vẻ hiệu quả. Nhưng có vẻ như dấu chấm phẩy không liên quan gì đến giải pháp. Vấn đề là, Excel xử lý các tệp CSV khác nhau, tùy thuộc vào cài đặt khu vực. Tôi đến từ Đức và đối với tôi, các tệp CSV từ Excel luôn có dấu chấm phẩy thay vì dấu phẩy (lý do cho điều này là ở Đức, dấu phân cách thập phân là dấu phẩy thay vì dấu phẩy). Giải pháp thực sự có vẻ là, Excel tải các tệp CSV hoàn toàn khác với tất cả các tệp văn bản khác. Vì vậy, các tệp CSV chứa ngắt dòng ở giữa các trích dẫn dường như hoạt động. Tất cả các tệp văn bản khác không.
Martini Bianco

@Martini, vâng, tôi có Excel tiếng Na Uy và chúng tôi cũng sử dụng dấu phẩy làm dấu tách thập phân, vì vậy tôi đã đề cập đến cách điều này phụ thuộc vào cài đặt khu vực (mặc dù tôi gọi nó là miền địa phương). Có lẽ tôi nên viết lại cho rõ ràng.
ketil

Đây là câu trả lời cho tất cả mọi người trong khu vực nơi dấu phẩy là dấu phân cách thập phân. Lưu ý rằng đối với các vùng này, Excel cũng sử dụng dấu chấm phẩy làm dấu tách đối số công thức ( =FOO(1;2)thay vì =FOO(1,2)), nhưng rõ ràng Excel không áp dụng điều này cho trình phân tích cú pháp định dạng tệp (chương trình khác phân tích định dạng tệp chuẩn phụ thuộc vào ngôn ngữ ??? )
leeme

25

Cuối cùng tôi đã tìm ra vấn đề!

Hóa ra chúng tôi đã viết tệp bằng mã hóa Unicode, thay vì ASCII hoặc UTF-8. Thay đổi mã hóa trên FileStream dường như để giải quyết vấn đề.

Cảm ơn tất cả mọi người cho tất cả các đề xuất của bạn!


29
Mã hóa ASCII dường như không khắc phục được sự cố cho tôi (trên MacOS) và tôi không có không gian hàng đầu và lĩnh vực của tôi được trích dẫn. Chính xác cùng một tài liệu nhập khẩu tốt trong Google Docs. Bực bội như thế nào. BTW, không có thứ gọi là tệp văn bản được mã hóa "Unicode". Nó phải là một trong những triển khai của Unicode (UTF-8, UTF-16, UTF-32, v.v.)
Ben

11
Cảm ơn giải pháp. Tôi vẫn tò mò không biết câu trả lời là gì nên tôi đã thử tạo một csv với ngắt dòng trong Excel và xem nó đã lưu gì. Tôi chỉ ra rằng Excel chỉ sử dụng một nguồn cấp dữ liệu cho một dòng mới trong một ô. Nếu tôi cố gắng tạo cùng một csv trong Notepad, nó sẽ sử dụng nguồn cấp dữ liệu + trả về vận chuyển cho ngắt dòng. Vì vậy, đối với ngắt dòng trong một ô duy nhất, hãy đảm bảo rằng nó chỉ sử dụng nguồn cấp dữ liệu dòng (LF hoặc \ n) chứ không phải trả về vận chuyển (CR hoặc \ r). Excel không sử dụng cả hai để chấm dứt một hàng.
xr280xr

1
Mã hóa ASCII cũng không khắc phục được sự cố cho tôi - Excel 2000, Windows 7.
ChrisJJ

1
Đối với OS X trên Macintosh, lưu dưới dạng "Windows Comma Tách (csv)". Điều này thêm dòng mới thay vì ngắt dòng. Nó sẽ được liệt kê trong menu thả xuống cho các định dạng trong "Định dạng đặc biệt".
taco

Nên sử dụng mã hóa Unicode nào (UTF-8, UTF-16)?
Andrej Adamenko

7

Câu trả lời ngắn

Xóa các ký tự dòng mới / dòng cấp dữ liệu ( \nvới Notepad ++). Excel vẫn sẽ nhận ra ký tự trả về vận chuyển ( \r) để tách các bản ghi.

Câu trả lời dài

Như các ký tự dòng mới được đề cập được hỗ trợ bên trong các trường CSV nhưng Excel không phải lúc nào cũng xử lý chúng một cách duyên dáng. Tôi đã gặp phải một vấn đề tương tự với CSV của bên thứ ba có thể có vấn đề về mã hóa nhưng không cải thiện được với các thay đổi về mã hóa.

Điều làm việc cho tôi là loại bỏ tất cả các ký tự dòng mới ( \n). Điều này có tác dụng thu gọn các trường thành một bản ghi giả định rằng các bản ghi của bạn được phân tách bằng sự kết hợp giữa trả lại vận chuyển và dòng mới (CR / LF). Excel sau đó sẽ nhập đúng tệp và nhận ra các bản ghi mới bằng cách trả lại vận chuyển.

Rõ ràng một giải pháp sạch hơn là trước tiên thay thế các dòng mới ( \r\n) bằng tổ hợp ký tự tạm thời, thay thế các dòng mới ( \n) bằng ký tự phân tách của bạn (ví dụ: dấu phẩy trong tệp dấu chấm phẩy) và sau đó thay thế các ký tự tạm thời bằng các dòng mới phù hợp.


1
Tôi đã có tình huống ngược lại: \ngiữa các dòng và \r\ngiá trị bên trong. Chỉ cần loại bỏ cái sau trong Notepad ++.
Hiếm

5

+1 trên bình luận của J Ashley. Tôi cũng gặp vấn đề này. Hóa ra Excel yêu cầu:

  • Một ký tự dòng mới ("\ n") trong chuỗi được trích dẫn

  • Một sự trở lại vận chuyển và dòng mới giữa mỗi hàng.

Ví dụ: "Thử nghiệm", "Vật phẩm đa dòng \ n vật phẩm đa dòng" \ r \ n "Test2", "Vật phẩm đa dòng \ n vật phẩm đa dòng" \ r \ n

Tôi đã sử dụng notepad ++ để phân định từng hàng đúng cách và chỉ sử dụng các dòng mới trong chuỗi. Phát hiện ra điều này bằng cách tạo các mục nhập đa dòng trong tài liệu excel trống và mở csv trong notepad ++.


nó hoạt động với tôi chỉ với ký tự dòng mới là cả vật phẩm đa dòng và dải phân cách hàng, một khi tôi đặt dải phân cách trường theo địa phương của tôi
robotik

4

Nếu trường chứa một khoảng trắng hàng đầu, Excel sẽ bỏ qua trích dẫn kép dưới dạng vòng loại văn bản. Giải pháp là loại bỏ khoảng trắng hàng đầu giữa dấu phẩy (dấu tách trường) và dấu ngoặc kép. Ví dụ:

Bị hỏng:
Tên, Tiêu đề, Mô tả
"John", "Mr.", "Mô tả chi tiết của tôi"

Làm việc:
Tên, Tiêu đề, Mô tả
"John", "Mr.", "Mô tả chi tiết của tôi"


2
Tôi đồng ý, tuy nhiên, tôi không có bất kỳ khoảng trống hàng đầu nào trong đầu ra của mình. Có ý kiến ​​gì không?
jeremyalan

chúng ta cần ngắt dòng :(
Luke

4

Sử dụng Google Sheets và nhập tệp CSV.

Sau đó, bạn có thể xuất nó để sử dụng trong Excel


1
Mẹo tốt! Đây là phương thức chuyển đổi thuận tiện nhất nếu bạn đồng ý tải lên CSV của mình lên dịch vụ của bên thứ ba (tức là dữ liệu không bảo mật). Lưu ý rằng bạn có thể phải đặt thủ công dấu phân cách khi nhập. Và bạn có thể cần điều chỉnh kích thước ô trong tệp Excel kết quả để nó hiển thị chính xác.
m000

Cũng hoạt động với Excel trong Office 365 trong trình duyệt. Tôi không thể mở CSV một cách chính xác bằng các ngắt dòng bên trong các ô bằng ứng dụng Excel trên máy tính để bàn (thử hầu hết các đề xuất từ ​​trang này), nhưng Excel trên office.com có ​​thể mở đúng.
Georgia w.

3

Nếu bất cứ ai tình cờ tìm thấy chủ đề này và đang tìm kiếm một câu trả lời dứt khoát ở đây (tín dụng cho người đề cập đến LibreOffice:

1) Cài đặt LibreScript 2) Mở Calc và nhập tệp 3) Tệp txt của tôi có các trường được phân tách bằng và các trường ký tự được đính kèm trong "4) lưu dưới dạng tệp ODS 5) Mở tệp ODS trong Excel 6) Lưu dưới dạng .xls (x) 7) Xong 8) Điều này làm việc hoàn hảo với tôi và giúp tôi tiết kiệm LỚN!


3
không cần lưu dưới dạng ODS, LibreScript có thể lưu xls (x) nguyên bản
robotik

2

Dán vào Notepad ++, chọn Mã hóa> Mã hóa trong ANSI, sao chép lại tất cả và dán vào Excel :)


2

Tôi đã có một vấn đề tương tự. Tôi đã có một số dữ liệu twitter trong MySQL. Dữ liệu có Nguồn cấp dữ liệu (LF hoặc \ n) trong dữ liệu. Tôi có một yêu cầu xuất dữ liệu MySQL vào excel. Các LF đã làm rối tung quá trình nhập tệp csv của tôi. Vì vậy, tôi đã làm như sau -

1. From MySQL exported to CSV with Record separator as CRLF
2. Opened the data in notepad++ 
3. Replaced CRLF (\r\n) with some string I am not expecting in the Data. I used ###~###! as replacement of CRLF
4. Replaced LF (\n) with Space
5. Replaced ###~###! with \r\n, so my record separator are back.
6. Saved and then imported into Excel

LƯU Ý- Trong khi thay thế CRLF hoặc LF, đừng quên Kiểm tra ngoại lệ (\ n, \ r, \ t ... Hộp kiểm [nhìn vào phía dưới bên trái của Hộp thoại)


2

Trải nghiệm của tôi với Excel 2010 trên WinXP với cài đặt khu vực của Pháp

  • dấu phân cách của csv đã nhập của bạn phải tương ứng với dấu phân cách danh sách của cài đặt khu vực của bạn (; trong trường hợp của tôi)
  • bạn phải nhấp đúp chuột vào tập tin từ trình thám hiểm. đừng mở nó từ Excel

1

Excel bị phá vỡ đáng kinh ngạc khi giao dịch với CSV. LibreOffice làm một công việc tốt hơn nhiều. Vì vậy, tôi phát hiện ra rằng:

  • Tệp phải được mã hóa bằng UTF-8 bằng BOM, vì vậy hãy xem xét điều này cho tất cả các điểm dưới đây
  • Kết quả tốt nhất, cho đến nay, đạt được bằng cách mở nó từ File Explorer
  • Nếu bạn mở nó từ trong Excel, có hai kết quả có thể xảy ra:
    • Nếu nó chỉ có các ký tự ASCII, rất có thể nó sẽ hoạt động
    • Nếu nó có các ký tự không phải ASCII, nó sẽ làm rối dòng ngắt của bạn
  • Dường như phụ thuộc rất nhiều vào dấu tách thập phân được định cấu hình trong cài đặt khu vực của HĐH, vì vậy bạn phải chọn đúng.
  • Tôi cá là nó cũng có thể hoạt động khác nhau tùy theo phiên bản HĐH và Office

Bạn đang khẳng định LibreOffice là một tốt hơn guesser hơn Excel, phải không? Excel hỏi tất cả các câu hỏi đúng khi nhập tệp văn bản, trừ khi bạn bảo nó đoán.
Tom Blodget

1
Cảm ơn bạn! Nó giúp tôi chuyển đổi CSV của mình từ "UTF-8 không có BOM" sang "UTF-8 với BOM" (chỉ đơn giản là "UTF-8" trong menu) bằng Notepad ++. Sau đó, tôi vừa mở nó từ Explorer và Excel đã hiển thị nó theo cách thích hợp với các ký hiệu chính xác và ngắt dòng chính xác bên trong các ô. Khi tôi mở nó theo mặc định, mã hóa "UTF-8 không có BOM" từ dòng nhập Excel Explorer bị phá vỡ chính xác, nhưng hiển thị các ký hiệu không phải là chữ Latinh sai cách. Nếu tôi mở nó từ Excel, nó sẽ hiển thị mã hóa đúng cách, nhưng không đối phó với ngắt dòng.
Serge Beloglazov

1

Tổng quat

Gần 10 năm sau bài đăng gốc, Excel đã không cải thiện việc nhập tệp CSV. Tuy nhiên, tôi thấy rằng việc nhập các bảng HTML sẽ tốt hơn nhiều. Vì vậy, người ta có thể sử dụng Python để chuyển đổi CSV sang HTML và sau đó nhập HTML kết quả sang Excel.

Ưu điểm của phương pháp này là: (a) nó hoạt động đáng tin cậy, (b) bạn không cần gửi dữ liệu của mình đến dịch vụ của bên thứ ba (ví dụ: trang tính Google), (c) không cần cài đặt thêm "chất béo" (LibreOffice, Số, v.v.) đối với hầu hết người dùng, (d) mức cao hơn so với việc kết hợp với các ký tự CR / LF và các dấu BOM, (e) không cần phải sử dụng các cài đặt ngôn ngữ.

Các bước

Các bước sau đây có thể được chạy trên bất kỳ shell nào giống như bash miễn là Python 3 được cài đặt. Mặc dù Python có thể được sử dụng để đọc trực tiếp CSV, csvkit được sử dụng để thực hiện chuyển đổi trung gian sang JSON. Điều này cho phép chúng tôi tránh phải đối phó với những rắc rối CSV trong mã Python của chúng tôi.

Đầu tiên, lưu đoạn script sau dưới dạng json2html.py. Kịch bản đọc một tệp JSON từ stdin và kết xuất nó dưới dạng bảng HTML:

#!/usr/bin/env python3
import sys, json, html

if __name__ == '__main__':
    header_emitted = False
    make_th = lambda s: "<th>%s</th>" % (html.escape(s if s else ""))
    make_td = lambda s: "<td>%s</td>" % (html.escape(s if s else ""))
    make_tr = lambda l, make_cell: "<tr>%s</tr>" % ( "".join([make_cell(v) for v in l]) )
    print("<html><body>\n<table>")
    for line in json.load(sys.stdin):
        lk, lv = zip(*line.items())
        if not header_emitted:
            print(make_tr(lk, make_th))
            header_emitted = True
        print(make_tr(lv, make_td))
    print("</table\n</body></html>")

Sau đó, cài đặt csvkit trong môi trường ảo và sử dụng csvjsonđể cung cấp tệp đầu vào cho tập lệnh của chúng tôi. Đó là một ý tưởng tốt để vô hiệu hóa việc đoán kiểu ô với -Iđối số:

$ virtualenv -p python3 pyenv
$ . ./pyenv/bin/activate
$ pip install csvkit
$ csvjson -I input.csv | python3 json2html.py > output.html

Bây giờ output.htmlcó thể được nhập trong Excel. Ngắt dòng trong các tế bào sẽ được bảo tồn.

Tùy chọn, bạn có thể muốn dọn sạch môi trường ảo Python của mình:

$ deactivate
$ rm -rf pyenv

1

Đây là cho Excel 2016:

Cũng gặp vấn đề tương tự với ngắt dòng trong tệp csv với Trình hướng dẫn Excel.

Sau đó, tôi đã thử nó với Tính năng "Truy vấn mới": Dữ liệu -> Truy vấn mới -> Từ tệp -> Từ CSV -> Chọn tệp -> Nhập -> Tải

Nó đã hoạt động hoàn hảo và một cách giải quyết rất nhanh cho tất cả các bạn có cùng một vấn đề.


0

Những gì chỉ làm việc cho tôi, nhập vào Excel trực tiếp cung cấp rằng việc nhập được thực hiện dưới dạng định dạng văn bản thay vì định dạng csv. M /


0

chỉ cần tạo một trang tính mới với các ô có ngắt dòng, lưu nó vào csv sau đó mở nó bằng một trình soạn thảo có thể hiển thị phần cuối của các ký tự dòng (như notepad ++). Bằng cách đó, bạn sẽ nhận thấy rằng một ngắt dòng trong một ô được mã hóa bằng LF trong khi cuối dòng "thực" là mã với CR LF. Voilà, bây giờ bạn đã biết cách tạo tệp csv "chính xác" cho excel.


0

Tôi cũng gặp vấn đề này: ví dụ: các tệp csv (được phân tách bằng dấu phẩy, chuỗi phân tách trích dẫn kép) với các chuỗi được trích dẫn. Chúng được tải xuống tập tin Square. Tôi đã nhập dữ liệu nhưng thay vì nhập dưới dạng tệp văn bản, đã nhập dưới dạng "từ HTML". Lần này, nó đã bỏ qua các chuỗi của LF trong chuỗi trích dẫn.


0

Điều này hoạt động trên Mac, sử dụng csv và mở tệp trong Excel.

Sử dụng python để viết tệp csv.

data = '"dòng đầu tiên của ô a1 \ r Dòng thứ 2 trong ô a1 \ r dòng thứ 3 trong ô a1", "ô b1", "dòng thứ nhất trong ô c1 \ r dòng thứ 2 trong ô c1" \ n " ô a2 "\ n '

file.write (dữ liệu)


0

Trên MacOS hãy thử sử dụng Số

Nếu bạn có quyền truy cập vào Mac OS, tôi đã thấy rằng Số bảng tính của Apple thực hiện tốt việc bỏ chọn tệp CSV nhiều dòng phức tạp mà Excel không thể xử lý. Chỉ cần mở .csvbằng Số và sau đó xuất sang Excel.


0

Trong trường hợp của tôi, mở CSV trong notepad ++ và thêm vào SEP=","dưới dạng dòng đầu tiên cho phép tôi mở CSV với ngắt dòng và utf-8 trong Excel mà không gặp vấn đề gì


0

Thay dấu phân cách bằng TAB (\ t) thay vì dấu phẩy (,). Sau đó mở tệp trong trình chỉnh sửa của bạn (Notepad, v.v.), sao chép nội dung từ đó, sau đó dán tệp vào tệp Excel.


Hãy thử điều này trên các tệp lớn :)
chukko

-1

Ngắt dòng bên trong dấu ngoặc kép là hoàn toàn tốt theo tiêu chuẩn CSV. Việc phân tích cú pháp ngắt dòng trong Excel phụ thuộc vào cài đặt HĐH của trình phân tách danh sách:

  1. Windows: bạn cần đặt bộ tách danh sách thành dấu phẩy (Vùng và ngôn ngữ »Định dạng» Nâng cao) Nguồn: /superuser/238944/how-to-force-excel-to-open-csv-files- với dữ liệu được sắp xếp trong các cột # answer-633302

  2. Mac: Cần thay đổi vùng thành Hoa Kỳ (sau đó thay đổi thủ công các cài đặt khác theo sở thích của bạn) Nguồn: https://answers.microsoft.com/en-us/mac/forum/macoffice2016-macexcel/line-separator-comma -semicolon-in-excel-2016-for / 7db1b1a0-0300-44ba-ab9b-35d1c40159c6 (xem câu trả lời của NewmanLee)

Đừng quên đóng Excel hoàn toàn trước khi thử lại.

Tôi đã thành công trong vấn đề này và có thể khắc phục sự cố bằng cách sử dụng ở trên trong cả Max và Windows.


Tôi không nghĩ rằng nó hoạt động. Tôi đã xuất một CSV với các ngắt dòng trong các ô từ chính Excel. Vì miền địa phương không thay đổi, Excel sẽ có thể tải chính xác. Nhưng nó không thể. Nó vẫn lộn xộn với các ngắt dòng trong các ô.
m000
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.