Excel เป็น CSV: การแปลงที่เสียข้อมูลอย่างจงใจ
ความแตกต่างเชิงโครงสร้างระหว่าง XLSX กับ CSV
XLSX คือซิปไฟล์ที่ภายในบรรจุชุดเอกสาร XML — มีโครงสร้างเวิร์กบุ๊ก ชีต สูตร ชนิดเซลล์ สี แบบอักษร และเซลล์รวม (merged cells) CSV คือไฟล์ข้อความล้วน แต่ละบรรทัดคือหนึ่งแถว คั่นค่าแต่ละคอลัมน์ด้วยตัวอักเสบ (comma), อัฒภาค (semicolon) หรือแท็บ (tab) ไม่มีที่เก็บเมทาดาทาใดๆ เมื่อหน้าตัวแปลงของเราอ่าน XLSX มันจะดึงเฉพาะค่าที่มองเห็นในชีตแรกที่บันทึกครั้งล่าสุด แล้วเรียงเป็นตารางข้อความล้วน สูตรจะถูกแทนที่ด้วยผลลัพธ์ที่คำนวณไว้แล้ว — ไม่มีการคำนวณใหม่ ฟอร์แมตทั้งหมด ตั้งแต่สีพื้นหลังไปจนถึงตัวหนา หายไปหมด
สิ่งที่สูญเสียอย่างถาวรในการแปลง
| รายการ | XLSX (ต้นทาง) | CSV (ปลายทาง) |
|---|---|---|
| หลายชีต | มีได้หลายชีต | ใช้เฉพาะชีตแรกเท่านั้น |
| สูตร | =SUM(A1:A10) | ตัวเลข 123 (ค่าที่บันทึกไว้) |
| ชนิดข้อมูล | ตัวเลข, วันที่, สกุลเงิน, บูลีน | ข้อความทั้งหมด |
| ฟอร์แมต | สี, แบบอักษร, เส้นขอบ, เซลล์รวม | ไม่มี |
| เลขศูนย์นำหน้า | 00123 (ถ้าเก็บเป็นข้อความ) | 123 (ถ้าเก็บเป็นตัวเลข) |
| เครื่องหมายจุลภาคในเซลล์ | ขึ้นอยู่กับโปรแกรม | ถูก quote อัตโนมัติ |
| การขึ้นบรรทัดใหม่ในเซลล์ | Alt+Enter | ถูก quote อัตโนมัติ |
| nested data / hierarchical | กลุ่ม/แถวที่พับได้ | ต้องแยกเป็นคอลัมน์ล่วงหน้า |
ข้อสังเกต: ถ้าเซลล์ XLSX เก็บค่า 00123 เป็นตัวเลข (ไม่ใช่ข้อความ) CSV จะให้ 123 แก้ได้โดยเปลี่ยนเซลล์ใน Excel ให้เป็นข้อความก่อนอัปโหลด หรือใช้ฟังก์ชัน TEXT() แล้ววางเป็นค่า
จัดการขอบเขตปัญหาที่พบบ่อย
นํ้าหนักของ embedded comma และ line break: หากตัวคั่นที่เลือกคือจุลภาค และในเซลล์มีจุลภาค หรือมีขึ้นบรรทัดใหม่ ตัวแปลงจะครอบค่านั้นด้วยเครื่องหมายคำพูด (") โดยอัตโนมัติ ระบบปฏิบัติตาม RFC 4180 แต่ยังเกิดปัญหาได้ถ้าโปรแกรมปลายทางไม่รองรับเครื่องหมายคำพูดแบบ CSVEscape
Leading zeros หาย: เกิดจาก XLSX เก็บค่าเป็นตัวเลข — ไม่มีข้อมูลว่าควรมีเลขศูนย์กี่ตัว ทางออกคือทำให้ Excel เห็นว่าเป็นข้อความ เช่น ใส่เครื่องหมายอัญประกาศเดี่ยวนำหน้า ('00123) หรือใช้ฟังก์ชัน TEXT ใน Excel แล้วแปลงเป็นค่า
Nested data: CSV ไม่มีแนวคิดเรื่องลำดับชั้น ถ้าคุณมีข้อมูลแบบหัวข้อหลัก-หัวข้อย่อย (เช่น ใบแจ้งหนี้ที่มีรายการสินค้าหลายบรรทัด) ต้องแยกให้เป็นคอลัมน์อิสระ หรือเขียนให้แต่ละบรรทัดซ้ำหัวข้อหลักไว้ก่อนแปลง
เลือกตัวคั่นให้ตรงกับระบบปลายทาง
เครื่องมือให้เลือก comma, semicolon หรือ tab แต่ละตัวมีผลต่อการอ่านของโปรแกรมอื่น:
- Comma (.csv): มาตรฐานสากล แต่อาจเกิดปัญหาถ้าในข้อมูลมีจุลภาคเยอะ (โปรแกรมบางตัวไม่รองรับการ quote)
- Semicolon (.csv): นิยมในยุโรปที่ใช้จุลภาคเป็นตัวคั่นทศนิยม (เช่น 1,5 → 1.5) หลายโปรแกรมบัญชีเยอรมันใช้ semicolon
- Tab (.tsv /.txt): ปลอดภัยที่สุดเพราะแทบไม่ปรากฎในข้อมูลปกติ ใช้กับระบบฐานข้อมูลหรือสคริปต์ที่อ่าน TSV โดยเฉพาะ
ควรตรวจสอบก่อนว่าโปรแกรมปลายทาง (เช่น Excel, SQL, Python pandas) รองรับตัวคั่นนั้นหรือไม่ มิฉะนั้นอาจแยกคอลัมน์ผิด
ข้อจำกัดเฉพาะของเครื่องมือนี้
- ใช้เฉพาะชีตแรกของ XLSX เท่านั้น ถ้ามีหลายชีต ต้องแยกไฟล์แต่ละชีต หรือรวมทุกชีตเป็นชีตเดียวก่อน
- ไม่คำนวณสูตรใหม่ — อ่านเฉพาะค่าที่ถูกคำนวณตอนบันทึกครั้งล่าสุด ถ้าสูตรอ้างอิงเซลล์ที่ไม่ได้บันทึก ค่านั้นจะไม่ถูกอัปเดต
- ข้อความผิดพลาดที่อาจพบ: “Choose one file first.”, “Choose a CSV, JSON or XLSX file.”, “This file is too large. Use a file under ‹max›.”, “This Excel file could not be opened.”, “This file has no table rows.”, “This table has more than ‹max› rows.”, “This conversion is taking too long. Try a smaller file.”
- ขีดจำกัดของแถวและคอลัมน์ถูกกำหนดโดยเครื่องมือ (ตัวเลข ‹max› จะแสดงในข้อความขอrror)
ความปลอดภัย: ไฟล์ไม่เคยออกจากเบราว์เซอร์
การแปลงทั้งหมดทำงานบน JavaScript ในเบราว์เซอร์ของคุณ — ไฟล์ Excel ที่อัปโหลดจะถูกอ่านในหน่วยความจำของเครื่องคุณเท่านั้น ไม่มีการส่งไปยังเซิร์ฟเวอร์ใดๆ นี่เป็นข้อดีที่สำคัญสำหรับข้อมูลที่ละเอียดอ่อน เช่น รายชื่อลูกค้า หรือข้อมูลการเงิน คุณสามารถใช้เครื่องมือนี้ในองค์กรที่ห้ามอัปโหลดข้อมูลขึ้นคลาวด์
เตรียมไฟล์ Excel ก่อนแปลง
- ย้ายทุกชีตที่ต้องการไปยังชีตแรก หรือรวมด้วย Power Query แล้วบันทึกเป็น XLSX ใหม่
- แยก nested data เช่น ถ้ามีคอลัมน์ "ที่อยู่" ที่เก็บถนน-ตำบล-อำเภอ ให้แยกเป็นสามคอลัมน์
- แปลงเลขศูนย์นำหน้าให้เป็นข้อความ โดยใช้ฟังก์ชัน TEXT(A1,"00000") แล้ววางเป็นค่า
- ลบฟอร์แมตที่ไม่จำเป็น ลดขนาดไฟล์และลดความซับซ้อนของโครงสร้าง XML
- ตรวจสอบว่าไม่มีบรรทัดว่างตรงกลางข้อมูล เพราะจะถูกนับเป็นแถวเหมือนกัน (ตัวแปลงจะไม่ตัดทิ้งอัตโนมัติ)
คำถามที่พบบ่อย (FAQ)
1. ทำไมเลขศูนย์นำหน้าถึงหายไปใน CSV? เพราะ XLSX เก็บค่า 00123 เป็นตัวเลข 123 ตัวแปลงอ่านเฉพาะค่าตัวเลข ถ้าต้องการคงเลขศูนย์ไว้ ให้เก็บเป็นข้อความใน Excel ก่อน (ใช้ '00123 หรือฟังก์ชัน TEXT)
2. จะแปลงหลายชีตในไฟล์เดียวได้ไหม? ไม่ได้ ตัวแปลงอ่านเฉพาะชีตแรก ถ้าต้องการหลายชีต ให้แยกชีตละไฟล์ หรือรวมทุกชีตเป็นชีตเดียวด้วย Power Query หรือ Copy/Paste
3. ไฟล์ใหญ่เกินไป ข้อความบอก “This file is too large” ต้องทำอย่างไร? ลดขนาดไฟล์โดยลบชีตที่ไม่จำเป็น ลบคอลัมน์ว่าง หรือบีบอัดภาพใน Excel ก่อนอัปโหลด
4. ทำไมสูตรไม่ถูกคำนวณใหม่? เพราะอะไร? ตัวแปลงอ่านค่าที่บันทึกไว้ครั้งล่าสุด ไม่รันสูตรใหม่อีก ดังนั้นถ้าสูตรอ้างอิงเซลล์อื่นที่ถูกแก้ไขหลังจากบันทึก จะไม่สะท้อนค่าใหม่ ต้องบันทึกไฟล์ด้วย Excel หรือ Google Sheets ก่อน แล้วค่อยอัปโหลด
5. CSV ที่ได้มีเครื่องหมายคำพูด " " ครอบบางคอลัมน์ ผิดปกติไหม? ปกติ ถ้าในเซลล์มีจุลภาคหรือขึ้นบรรทัดใหม่ ตัวแปลงต้องครอบด้วยเครื่องหมายคำพูดตามมาตรฐาน RFC 4180 โปรแกรม CSV ส่วนใหญ่เข้าใจ และจะเอาเครื่องหมายคำพูดออกให้เองเมื่อเปิด
6. ควรใช้ตัวคั่นแบบไหนถ้าไม่แน่ใจ? ถ้าเป็นข้อมูลทั่วไป (ไม่มีจุลภาคในข้อมูล) ใช้ comma.csv ถ้ามีความเสี่ยงว่าผู้รับใช้ Excel ภาษาไทยหรือยุโรปที่ใช้ comma เป็นทศนิยม ให้ใช้ semicolon.csv หรือ tab.tsv