สิ่งที่ทำให้หน้านี้แตกต่าง
การแปลง XLSX เป็น JSON ไม่เหมือนกับการแปลงเป็น CSV ไฟล์ XLSX เป็นซิปของเอกสาร XML ที่สามารถบรรจุหลายชีต ชนิดเซลล์ (ข้อความ ตัวเลข วันที่ บูลีน) สูตร และการจัดรูปแบบ ในขณะที่ JSON เป็นรูปแบบที่มีชนิดข้อมูล — รองรับออบเจกต์ อาร์เรย์ ตัวเลข บูลีน และ null ดังนั้นเมื่อแปลง ตัวเลขและค่าบูลีนใน XLSX จะคงเป็นค่าแบบมีชนิด (ตัวเลข ไม่ใช่สตริง "1234.56") การจัดรูปแบบเซลล์ สูตร (ซึ่งจะไม่ถูกคำนวณใหม่) และข้อมูลในชีตอื่น ๆ จะถูกทิ้งทั้งหมด การทำงานนี้เกิดขึ้นบนเบราว์เซอร์ของคุณเท่านั้น เบราว์เซอร์จะแยกวิเคราะห์ไฟล์และเขียนผลลัพธ์ที่แปลงแล้วลงในอุปกรณ์ของคุณโดยตรง ไม่มีการอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ใด ๆ
ภายในไฟล์ XLSX
ไฟล์.xlsx เป็นไปตามมาตรฐาน Office Open XML (ECMA-376) ภายในเป็นไฟล์ ZIP ที่ประกอบด้วยแฟ้ม XML หลายแฟ้ม เช่น xl/workbook.xml (รายการชีต), xl/worksheets/sheet1.xml (ข้อมูลเซลล์), xl/sharedStrings.xml (ข้อความที่ใช้ซ้ำ) และ xl/styles.xml (ฟอนต์ สี เส้นขอบ) ชีตแต่ละชีตเก็บเซลล์เป็นตารางที่มีพิกัด (เช่น A1, B2) พร้อมกับชนิดข้อมูล (t = "n" สำหรับตัวเลข, "s" สำหรับสตริง, "b" สำหรับบูลีน, "d" สำหรับวันที่ ฯลฯ) และค่าที่เป็นตัวเลขหรือดัชนีสตริง เมื่อแปลงเป็น JSON เครื่องมือนี้จะอ่านเฉพาะชีตแรกเท่านั้น และดึงค่าที่เห็น (visible value) มาใช้
การจับคู่ชนิดเซลล์กับ JSON
ตารางด้านล่างแสดงการแมประหว่างชนิดข้อมูล Excel ที่สำคัญกับค่าที่ได้ใน JSON ตามการทำงานของเครื่องมือนี้:
| ชนิดใน Excel | ตัวอย่างใน XLSX | ค่าใน JSON |
|---|---|---|
| ตัวเลข (Number) | 1234.56 | 1234.56 (ตัวเลข) |
| บูลีน (Boolean) | TRUE | true (บูลีน) |
| วันที่ (Date) | 1/1/2023 | "2023-01-01T00:00:00.000Z" (สตริง ISO 8601) |
| ข้อความ (Text) | "Hello" | "Hello" (สตริง) |
| เซลล์ว่าง | (ไม่มีค่า) | "" (สตริงว่าง) |
หมายเหตุสำคัญ วันที่ใน Excel จริง ๆ แล้วคือตัวเลขลำดับ (serial number) เช่น 44927 แทนวันที่ 1 มกราคม 2023 (ระบบ 1900) เครื่องมือนี้จะแปลงค่าเหล่านี้เป็นสตริง ISO 8601
ทำไมสูตรและฟอร์แมตถึงหายไป
ไฟล์ XLSX เก็บทั้งสูตร (เช่น =SUM(A1:A10)) และผลลัพธ์ที่ถูกคำนวณล่าสุด (cached value) เครื่องมือนี้จะอ่านเฉพาะ cached value เท่านั้น — สูตรจะไม่ถูกคำนวณใหม่ เพราะโค้ดฝั่ง client ไม่มีกลไกคำนวณสูตรเหมือน Excel เต็มรูปแบบ ดังนั้นเซลล์ที่มีสูตรจะปรากฏเป็นตัวเลขหรือข้อความที่ถูกบันทึกครั้งสุดท้าย หากคุณต้องการค่าที่คำนวณใหม่ ต้องเปิดไฟล์ใน Excel ก่อนแล้วบันทึกอีกครั้ง (เพื่อให้ cached value อัปเดต) จากนั้นจึงนำมาแปลง การจัดรูปแบบเซลล์ เช่น สีพื้นหลัง ขนาดฟอนต์ เส้นขอบ หรือรูปแบบตัวเลข (เช่น ทศนิยม, สกุลเงิน) ก็ถูกทิ้งทั้งหมดเช่นกัน เพราะ JSON ไม่มีแนวคิดเรื่องการจัดรูปแบบ
เหตุใดจึงใช้เฉพาะชีตแรกเท่านั้น
ไฟล์ XLSX สามารถมีหลายชีต (Sheet1, Sheet2,...) แต่อินเทอร์เฟซของหน้านี้จำกัดให้แปลงเฉพาะชีตแรกเท่านั้น สาเหตุหลักคือเพื่อให้การทำงานง่ายและรวดเร็ว หากผู้ใช้ต้องการข้อมูลจากชีตอื่น ต้องคัดลอกหรือแยกชีตนั้นไปเป็นไฟล์ XLSX ใหม่ก่อน หรือใช้เครื่องมือที่รองรับหลายชีต ข้อจำกัดนี้ถูกกำหนดไว้อย่างชัดเจนในข้อผิดพลาดที่เกี่ยวข้อง เช่น "This file has no table rows." จะแสดงเมื่อชีตแรกไม่มีข้อมูล
การประมวลผลฝั่งไคลเอ็นต์และความเป็นส่วนตัว
เครื่องมือนี้ใช้ JavaScript บนเบราว์เซอร์ของคุณในการอ่านไฟล์ XLSX และสร้าง JSON ขึ้นใหม่ ข้อมูลทั้งหมดถูกประมวลผลภายใน — ไม่มีการส่งไฟล์หรือผลลัพธ์ไปยังเซิร์ฟเวอร์ใด ๆ ข้อดีคือผู้ใช้ที่กังวลเรื่องข้อมูลลับ (เช่น รายชื่อลูกค้า ข้อมูลการเงิน) สามารถแปลงไฟล์ได้โดยไม่ต้องอัปโหลดขึ้นคลาวด์ อย่างไรก็ตาม ข้อจำกัดคือการแปลงไฟล์ขนาดใหญ่อาจทำให้เบราว์เซอร์ค้างหรือใช้เวลานาน ซึ่งเป็นเหตุผลที่เครื่องมือแสดงข้อผิดพลาด "This conversion is taking too long. Try a smaller file."
ข้อผิดพลาดทั่วไปและแนวทางป้องกัน
- เซลล์รวม (merged cells): การรวมเซลล์ใน Excel มักทำให้เกิดแถวว่างหรือค่าซ้ำซ้อนใน JSON ควรเลิกผสานก่อนแปลง
- แถวหรือคอลัมน์ที่ซ่อน: ข้อมูลที่ถูกซ่อน (แต่ยังมีค่า) จะยังปรากฏใน JSON หากไม่ต้องการ ควรลบหรือ unhide ก่อน
- หัวตารางหลายแถว: หากข้อมูลมี header หลายบรรทัด (เช่น ชื่อเรื่อง, ชื่อคอลัมน์) ระบบจะถือแถวแรกเป็นคีย์ของออบเจกต์ ควรปรับรูปแบบให้เป็นตารางแบบแบนก่อน
- ข้อผิดพลาดที่พบบ่อย:
- "This file is too large. Use a file under ‹max›." — ลดขนาดไฟล์โดยลบชีตที่ไม่จำเป็น
- "Choose a CSV, JSON or XLSX file." — ตรวจสอบนามสกุลไฟล์
- "Could not convert this file." — ไฟล์เสียหายหรือไม่ใช่ XLSX จริง (เช่น เป็น xls แบบเก่า)
คำถามที่พบบ่อย
ถาม: JSON ที่ได้จะมีคีย์เป็นชื่อคอลัมน์จากแถวแรกของชีตใช่ไหม? ตอบ: ใช่ แถวแรกของชีตแรกจะถูกใช้เป็นชื่อคีย์ของออบเจกต์ในอาร์เรย์ (array of objects) ส่วนแถวถัดไปจะเป็นค่าของแต่ละวัตถุ
ถาม: จะเกิดอะไรขึ้นถ้าไฟล์มีชีตเปล่า? ตอบ: เครื่องมือจะแสดงข้อความ "This file has no table rows." เนื่องจากชีตแรกไม่มีข้อมูลใด ๆ
ถาม: สามารถแปลงไฟล์ที่มีหลายชีตพร้อมกันได้หรือไม่? ตอบ: ไม่ได้ เครื่องมือนี้แปลงเฉพาะชีตแรกเท่านั้น หากต้องการข้อมูลจากชีตอื่น ต้องสร้างไฟล์ XLSX แยก หรือใช้เครื่องมืออื่นที่รองรับหลายชีต
ถาม: ทำไมวันที่ใน JSON ถึงออกมาเป็นตัวเลข 44927? ตอบ: เพราะเครื่องมือเก็บค่า visible value ที่บันทึกไว้ใน XLSX ซึ่งใน Excel วันที่คือตัวเลขลำดับ (serial number) หากต้องการรูปแบบวันที่ที่มนุษย์อ่านได้ ควรเปิดไฟล์ใน Excel แล้วจัดรูปแบบคอลัมน์วันที่เป็นข้อความเสียก่อน
ถาม: ขนาดไฟล์สูงสุดที่รองรับคือเท่าไร? ตอบ: ไฟล์มีขนาดจำกัดที่ 8 MB หากไฟล์ใหญ่เกินไปจะแสดงข้อความ "This file is too large. Use a file under ‹max›."
ถาม: การแปลงนี้ปลอดภัยหรือไม่? ตอบ: ปลอดภัย เพราะข้อมูลทั้งหมดถูกประมวลผลบนเบราว์เซอร์ของคุณ ไม่มีการส่งไปยังเซิร์ฟเวอร์ใด ๆ ถือว่าเป็นโซลูชันที่เหมาะกับข้อมูลที่เป็นความลับ
หมายเหตุ: ตัวเลข ‹max› ในข้อความแสดงข้อผิดพลาดเป็นตัวแปรที่ระบบกำหนด อาจแตกต่างกันไปในแต่ละรุ่นของเครื่องมือ