Một ô thực sự lưu gì
Một ô bảng tính chứa hai thứ tách biệt: một giá trị và một định dạng số. Giá trị 0.15 có thể hiển thị thành 15%, 0.15, £0.15 hoặc 15.00%, và không cách hiển thị nào làm giá trị thay đổi dù chỉ một chút. Đây là điều hữu ích nhất cần biết về bảng tính, và cũng là lý do Chuyển Excel sang CSV yêu cầu bạn chọn giữa “Như hiển thị trong Excel” và “Số gốc, ngày dạng ISO” thay vì tự đoán. “Như hiển thị trong Excel” ghi đúng chữ trên màn hình — 15/03/2024, 1,234.50, 12% — giống như lệnh Save As của chính Excel và đúng như người đọc CSV mong đợi. “Số gốc, ngày dạng ISO” ghi số thuần và ngày theo chuẩn ISO, đúng thứ mà cơ sở dữ liệu hoặc script cần. Chọn sai là việc nhập dữ liệu thất bại theo kiểu trông như dữ liệu bị hỏng.
Ngày tháng thực chất là số đội lốt ngày tháng. Ô ngày chứa một số đếm ngày tuần tự, và mốc bắt đầu đếm tùy thuộc vào file: bảng tính tạo bằng Excel trên Windows đếm từ năm 1900, bảng tính từ Excel cũ trên Mac đếm từ năm 1904, và hai mốc lệch nhau 1.462 ngày. Hệ 1900 còn kỳ lạ hơn — nó tin rằng có ngày 29 tháng 2 năm 1900, một lỗi thừa hưởng từ Lotus 1-2-3 và được giữ lại từ đó đến nay để tương thích. Các công cụ ở đây đọc cờ mốc ngày riêng của từng bảng tính và tái hiện ngày nhuận giả ấy đúng chỗ của nó, nên ngày chuyển đổi ở đây khớp với những gì Excel hiển thị thay vì lệch đi bốn năm và một ngày.
Công thức và kết quả được lưu cạnh nhau. Bảng tính giữ cả chuỗi công thức lẫn giá trị tính được lần gần nhất. Các chuyển đổi giữa bảng tính với bảng tính — Chuyển ODS sang XLSX, Chuyển XLS sang XLSX, Chuyển XLSX sang ODS — mang theo chính các công thức, được dịch giữa hai bộ tên hàm, nên trang tính vẫn tự tính lại khi bạn chỉnh sửa; số ít hàm chỉ có ở một bên sẽ hiện #NAME? cho đến khi bạn thay chúng. Mọi thứ ra khỏi thế giới bảng tính — CSV, JSON, XML — chỉ mang theo kết quả đã tính, vì không định dạng nào trong số đó có khái niệm công thức.
CSV không thể biểu diễn phần lớn một bảng tính, và cứ giả vờ là được chính là lúc dữ liệu bị mất. CSV không có trang tính, nên mỗi trang tính thành một file riêng (và một file ZIP nếu bạn muốn lấy tất cả). CSV không có kiểu ô, nên mọi trường đều là văn bản cho đến khi có thứ gì đó đoán kiểu. CSV không có định dạng, công thức, biểu đồ, hình ảnh, màu sắc hay độ rộng cột. Ô gộp phải được xử lý theo một trong hai cách — giá trị nằm ở ô đầu tiên, hoặc lặp lại trên toàn vùng gộp. Và CSV không tự ghi lại ký tự phân tách, dấu thập phân hay bảng mã của mình, đó là lý do một file châu Âu dùng dấu chấm phẩy, có dấu phẩy thập phân, lại dồn vào một cột khi mở trong Excel bản Mỹ, và vì sao chữ có dấu biến thành ký tự lỗi trừ khi file bắt đầu bằng BOM (byte-order mark).
Văn bản trông giống số là nơi gây hại thật sự. Excel đoán từng ô một khi bạn mở CSV: mã bưu chính 01234 mất số 0, mã đơn hàng 16 chữ số thành 1.23457E+15 và không khôi phục được, còn tên gen SEPT2 biến thành ngày tháng — nghiêm trọng đến mức giới di truyền học phải đổi tên các gen của mình. Chuyển CSV sang Excel thì quyết định một lần cho mỗi cột, dựa trên mọi giá trị trong cột, và chỉ chuyển đổi khi cả cột thống nhất; mọi thứ có số 0 ở đầu, và mọi số nguyên quá dài để một số JavaScript giữ chính xác, đều được giữ là văn bản. Chuyển JSON sang CSV áp dụng sự cẩn thận tương tự theo chiều ngược lại, chép ID 64-bit đúng từng chữ số trong khi phần lớn công cụ chuyển đổi làm tròn chúng.
JSON và XML mỗi bên đều đánh rơi thứ gì đó. JSON hoàn toàn không có kiểu ngày tháng, nên ngày được truyền dưới dạng văn bản và code bên nhận phải biết mình đang xem gì. XML dữ liệu chỉ mang giá trị, không có định dạng, biểu đồ hay hình ảnh — đúng thứ một luồng nhập dữ liệu cần, nhưng không phải thứ bạn muốn nếu mục đích là giữ nguyên bảng tính.
Khi nào trình duyệt thực sự không phải công cụ phù hợp
Bảy công cụ trong số này không bao giờ gửi file của bạn đi đâu: Chuyển Excel sang CSV, Chuyển CSV sang Excel, Chuyển CSV sang JSON, Chuyển JSON sang CSV, Chuyển XML sang Excel, Chuyển Excel sang XML và Chuyển PDF sang Excel. Không lưu trữ gì cả, điều này quan trọng khi file là bảng lương hay danh sách khách hàng. Bốn công cụ thì khác — Chuyển Excel sang PDF, Chuyển ODS sang XLSX, Chuyển XLS sang XLSX và Chuyển XLSX sang ODS gửi file lên máy chủ của chúng tôi, vì dàn trang in, hay mang phông chữ, màu sắc, định dạng có điều kiện và biểu đồ qua định dạng khác, không phải việc một trang web có thể làm giả được. Các file đó được truyền qua kết nối mã hóa, được chuyển đổi và bị xóa ngay khi bản tải xuống của bạn sẵn sàng. Nếu không kết nối được máy chủ, mỗi công cụ chuyển sang bộ chuyển đổi riêng của nó, vẫn giữ giá trị, công thức, định dạng số, ô gộp và độ rộng cột nhưng không giữ phông chữ, màu sắc hay biểu đồ, và sẽ báo cho bạn biết điều đó.
Dung lượng. Các công cụ chạy trong trình duyệt giữ toàn bộ bảng trong bộ nhớ, nên giới hạn là bộ nhớ dành cho tab của bạn — thoải mái đến vài chục megabyte, khó khăn khi vượt quá một trăm, và vô vọng với file trích xuất vài gigabyte. Các công cụ chuyển đổi bảng tính giới hạn 50 MB mỗi file và Chuyển Excel sang PDF là 40 MB, và cả hai đều báo trước khi chuyển đổi chứ không phải sau đó. Bản thân một trang tính Excel dừng ở 1.048.576 hàng, đó là giới hạn của định dạng, không phải của chúng tôi; Chuyển CSV sang Excel sẽ tiếp tục sang các trang tính bổ sung và lặp lại hàng tiêu đề thay vì âm thầm cắt bớt dữ liệu của bạn.
Xử lý dữ liệu thực thụ. Công cụ chuyển đổi không phải cơ sở dữ liệu. Nối hai bảng, loại bỏ trùng lặp, tổng hợp, lọc mười triệu hàng hay phân tích một file xuất lộn xộn là việc của những công cụ được xây dựng cho mục đích đó, và các công cụ miễn phí rất tốt: csvkit để xử lý CSV nhanh bằng dòng lệnh, Miller để làm điều tương tự cho cả JSON lẫn CSV, qsv cho tốc độ trên file cực lớn, DuckDB để chạy SQL thật trực tiếp trên file CSV hoặc Parquet, và pandas nếu bạn vốn đang dùng Python.
Macro, và bất cứ thứ gì có thể chạy. VBA không thể mang sang .xlsx, vì định dạng này đơn giản là không có chỗ chứa nó, và cũng không được mang sang .ods vì LibreOffice chỉ chạy được một phần VBA, và sự khác biệt sẽ hiện ra thành con số sai chứ không phải thông báo lỗi. Nếu bảng tính phụ thuộc vào macro, hãy giữ file gốc bên cạnh bản đã chuyển đổi. File có mật khẩu phải được gỡ mật khẩu trước, trong chính chương trình đã đặt nó.
Tự động hóa. Các công cụ này chạy khi có người nhấn nút. Chuyển đổi một luồng dữ liệu hằng đêm là việc của dòng lệnh: LibreOffice ở chế độ headless xử lý được mọi định dạng trên trang này.
Chọn giữa những công cụ nghe na ná nhau
Chuyển Excel sang CSV và Chuyển Excel sang XML. Cả hai đều đọc bảng tính và ghi ra một file dữ liệu phẳng, và nơi nhận quyết định chọn cái nào. CSV dành cho bảng tính, cơ sở dữ liệu và bất cứ thứ gì ghi “tải lên file CSV”. XML dành cho các luồng nhập và tích hợp có quy định tên phần tử — bạn đặt tên phần tử gốc và tên hàng, tiêu đề trở thành tên phần tử, còn giá trị được ghi ra dưới dạng số thuần và ngày chuẩn ISO. Chuyển Excel sang XML cũng có thể ghi XML Spreadsheet 2003, một thứ hoàn toàn khác: định dạng mà Excel mở lại thành bảng tính, dùng khi hệ thống yêu cầu “Excel XML” chứ không phải XML dữ liệu của riêng bạn.
Chuyển CSV sang Excel và Chuyển CSV sang JSON. Cùng bộ phân tích, cùng cách nhận diện kiểu theo từng cột, khác đầu ra. Chuyển CSV sang Excel tạo file .xlsx với ngày tháng và con số thật mà bạn có thể tính tổng và sắp xếp, cùng hàng tiêu đề cố định có bộ lọc — dành cho con người. Chuyển CSV sang JSON tạo mảng đối tượng, mảng của mảng, đối tượng theo khóa hoặc JSON Lines — dành cho code. Nếu câu trả lời là “cả hai”, hãy chuyển sang Excel cho con người và sang JSON cho hệ thống; hai bản sẽ khớp nhau, vì kiểu của các cột được quyết định theo cùng một cách.
Chuyển XML sang Excel và Chuyển Excel sang XML. Không đơn giản là hai chiều ngược nhau. Chuyển XML sang Excel phải tìm ra bảng trước: nó tìm các phần tử lặp lại dưới cùng một phần tử cha — mọi <book> trong một danh mục, mọi <item> trong một nguồn RSS — chấm điểm từng nhóm và để các nhóm còn lại cách bạn đúng một cú nhấn, rồi trải phẳng thuộc tính và phần tử lồng nhau thành các cột được đặt tên theo đường dẫn. Chuyển Excel sang XML không cần tìm gì cả, vì các hàng của bạn vốn đã là các bản ghi.
Chuyển XLS sang XLSX và Chuyển CSV sang Excel. Cả hai đều cho ra một bảng tính hiện đại. Chuyển XLS sang XLSX nâng cấp một file nhị phân Excel 97–2003 thực sự và giữ mọi thứ bên trong — trang tính, công thức, định dạng, biểu đồ. Chuyển CSV sang Excel dựng bảng tính từ văn bản thuần vốn chưa bao giờ có những thứ đó. Vùng chồng lấn là trường hợp lưng chừng khó chịu: rất nhiều ứng dụng web xuất ra một bảng HTML hoặc file XML rồi đặt tên là .xls. Chuyển XLS sang XLSX nhận ra bản chất thật của chúng và lưu thành một bảng tính đúng nghĩa.
Chuyển PDF sang Excel và Chuyển Excel sang PDF. Hai chiều ngược nhau, và chỉ một chiều là đáng tin cậy. Chuyển Excel sang PDF là việc dàn trang: bảng tính đã biết vùng in, vị trí ngắt trang và định dạng của nó, và bộ chuyển đổi chỉ việc vẽ ra. Chuyển PDF sang Excel là chiều khó, vì PDF ghi lại vị trí từng ký tự được vẽ mà không hề biết nó thuộc ô nào — các cột được suy ra từ vị trí. Công cụ hoạt động tốt với bảng sạch có kẻ đường, cần chỉnh sửa lại ở những chỗ ô bị gộp hoặc chữ xuống nhiều dòng, tái tạo giá trị chứ không tái tạo định dạng hay công thức, và mỗi trang PDF thành một trang tính riêng. Nếu bảng tính gốc vẫn còn, hãy xin file đó.
Chuyển ODS sang XLSX và Chuyển Excel sang CSV cho file .ods. Chuyển Excel sang CSV mở được file .ods và cho bạn các giá trị. Chuyển ODS sang XLSX giữ bảng tính đúng là bảng tính, cùng công thức, định dạng và biểu đồ. Dùng bộ chuyển đổi khi ai đó cần làm việc trên file, và đi đường CSV khi một hệ thống cần lấy các con số ra.