วิธีเปิดไฟล์ CSV ขนาดใหญ่ที่ Excel เปิดไม่หมด
เวิร์กชีตของ Excel รับได้สูงสุด 1,048,576 แถว และ 16,384 คอลัมน์ ไฟล์ที่ส่งออกมา 3 ล้านแถวจึงใส่ไม่พอ Excel จะโหลดส่วนแรก แจ้งเตือน แล้วทิ้งส่วนที่เหลือไว้ ถ้าจะดูทั้งไฟล์ ให้เปิดด้วยเครื่องมือที่ไม่มีข้อจำกัดนี้ เช่น โปรแกรมดู CSV โหลดเข้า Data Model ของ Excel แทนการโหลดลงชีต แบ่งไฟล์ หรือวิเคราะห์ด้วย Python หรือฐานข้อมูล
ทำไม Excel ตัดไฟล์ทิ้ง
ไฟล์ CSV ไม่มีขีดจำกัดขนาดในตัวเอง มันเป็นแค่ข้อความธรรมดา หนึ่งบรรทัดต่อหนึ่งแถว ค่าต่าง ๆ คั่นด้วยจุลภาคหรืออัฒภาค (ถ้าเรื่องนี้ใหม่สำหรับคุณ อ่านไฟล์ CSV คืออะไร) แต่ Excel จะใส่ทุกอย่างที่เปิดลงในเวิร์กชีต และเวิร์กชีตมีตารางขนาดตายตัว คือ 1,048,576 แถว × 16,384 คอลัมน์ (คอลัมน์ XFD)
เมื่อไฟล์ใหญ่กว่าตารางนี้ Excel จะแจ้งเตือนว่าโหลดไฟล์ได้ไม่ครบ และเก็บไว้เฉพาะแถวที่ใส่ได้ หัวตารางกับข้อมูลอีก 1,048,575 แถวเข้ามาได้ ส่วนตั้งแต่แถวที่ 1,048,577 เป็นต้นไปจะหายไปจากสิ่งที่คุณเห็นบนจอ
Google Sheets ก็ช่วยไม่ได้ เพราะจำกัดไว้ที่ 10 ล้านเซลล์ต่อสเปรดชีต นับรวมทุกชีต ไฟล์ 3 ล้านแถว 10 คอลัมน์ก็เท่ากับ 30 ล้านเซลล์แล้ว จึงนำเข้าไม่ได้เช่นกัน
ความเสี่ยงจริง: กดบันทึกแล้วข้อมูลหาย
คำเตือนนั้นกดปิดได้ง่าย และสิ่งที่เหลือบนจอก็ดูเหมือนตารางปกติทุกอย่าง อันตรายมาทีหลัง
- คุณบันทึกไฟล์ Excel จะเขียนกลับเฉพาะสิ่งที่โหลดมา ถ้าคุณกด Save ที่
export.csvข้อมูลเดิม 3 ล้านแถวจะถูกแทนที่ด้วยราวหนึ่งล้านแถว โดยไม่มีคำเตือนอีก - คุณคำนวณยอดรวม
SUMหรือ PivotTable บนชีตที่ถูกตัดจะให้คำตอบที่ดูสมเหตุสมผลแต่ผิด เพราะข้อมูลสองในสามไม่เคยเข้ามา - คุณแชร์ไฟล์ เพื่อนร่วมงานที่ได้รับสำเนาที่บันทึกแล้วไม่มีทางรู้เลยว่ามีแถวหายไป
ถ้า Excel แจ้งเตือนไปแล้ว ให้ปิดไฟล์โดยไม่บันทึก และเก็บไฟล์ต้นฉบับไว้โดยไม่แตะต้อง จากนั้นตรวจว่าไฟล์ใหญ่แค่ไหนจริง ๆ ก่อนตัดสินใจว่าจะทำอย่างไรต่อ
ตัวเลือกที่ 1: เปิดทั้งไฟล์ในเบราว์เซอร์
ถ้าคุณแค่ต้องการ ดู ข้อมูล เช่น ตรวจบางรายการ หาข้อมูลลูกค้า หรือดูว่าคอลัมน์หนึ่งมีอะไร โปรแกรมดูไฟล์ที่ไม่มีข้อจำกัดของตารางคือทางที่เร็วที่สุด
โปรแกรมดู CSV ของ Opener อ่านไฟล์ในเบราว์เซอร์ของคุณและไม่เคยอัปโหลด ซึ่งสำคัญเมื่อไฟล์มีข้อมูลลูกค้าหรือข้อมูลการเงิน การแยกข้อมูลทำงานในเธรดเบื้องหลัง และวาดเฉพาะแถวที่อยู่บนจอ ไฟล์ 200,000 แถวจึงเปิดได้ในราวหนึ่งวินาที และไฟล์หลายล้านแถวก็ใช้ได้บนโน้ตบุ๊กทั่วไป ขีดจำกัดจริงคือหน่วยความจำของอุปกรณ์ ไม่ใช่จำนวนแถวตายตัว
เมื่อเปิดแล้ว คุณสามารถ
- ค้นหาจากทุกคอลัมน์ขณะพิมพ์
- เรียงลำดับตามคอลัมน์ไหนก็ได้
- ส่งออกมุมมองปัจจุบันทั้งที่กรองและเรียงแล้ว เป็น CSV แบบ UTF-8 ที่สะอาด หรือ JSON
ข้อสุดท้ายเป็นเคล็ดลับที่มีประโยชน์ กรองข้อมูล 3 ล้านแถวให้เหลือ 40,000 แถวที่เกี่ยวกับภูมิภาคเดียว ส่งออก แล้วไฟล์ที่เล็กลงจะเปิดใน Excel ได้โดยไม่มีคำเตือน โปรแกรมดูไฟล์นี้ไม่รันสูตร PivotTable หรือแผนภูมิ ถ้าต้องการสิ่งเหล่านั้น อ่านต่อด้านล่าง
ตัวเลือกที่ 2: โหลดเข้า Data Model ของ Excel
Excel บนคอมพิวเตอร์รุ่นใหม่ ๆ นำเข้า CSV ผ่าน Power Query ได้ (เส้นทาง “Get Data” / “From Text/CSV” ในแท็บ Data) แทนการเปิดไฟล์โดยตรง ความต่างอยู่ที่ว่าข้อมูลไปอยู่ที่ไหน
แทนที่จะโหลดผลลัพธ์ลงเวิร์กชีต ให้เลือกโหลดเป็นการเชื่อมต่อเท่านั้น (connection only) และเพิ่มลงใน Data Model ซึ่งเก็บข้อมูลในรูปแบบบีบอัดนอกตารางชีต จึงไม่ติดข้อจำกัด 1,048,576 แถว จากนั้นคุณสร้าง PivotTable บนข้อมูลนี้และสรุปข้อมูลทั้ง 3 ล้านแถวได้ เช่น ยอดรวมรายเดือน จำนวนตามหมวดหมู่ เป็นต้น
ข้อแลกเปลี่ยนคือคุณเลื่อนดูทีละแถวเหมือนชีตปกติไม่ได้ และชื่อเมนูที่แน่นอนต่างกันไปในแต่ละรุ่นของ Excel วิธีนี้ดีที่สุดเมื่อคุณต้องทำงานใน Excel และผลลัพธ์ที่ต้องการคือสรุป ไม่ใช่การดูทีละแถว
ตัวเลือกที่ 3: นับ ดูตัวอย่าง และแบ่งไฟล์ด้วยบรรทัดคำสั่ง
บน macOS, Linux หรือ Windows ที่มี WSL คำสั่งมาตรฐานไม่กี่คำสั่งตอบได้ภายในไม่กี่วินาทีว่า “ไฟล์ใหญ่แค่ไหน” และ “ข้างในมีอะไร” โดยไม่ต้องโหลดไฟล์เข้าโปรแกรมใด
wc -l export.csv # จำนวนบรรทัด
head -n 20 export.csv # 20 บรรทัดแรก
head -n 100000 export.csv > sample.csv # ตัวอย่างไฟล์เล็กลงไว้ทดลอง
โปรดทราบว่า wc -l นับบรรทัด ไม่ใช่แถว ถ้าบางค่ามีการขึ้นบรรทัดใหม่อยู่ในเครื่องหมายคำพูด (ที่อยู่และความคิดเห็นมักเป็นแบบนี้) จำนวนบรรทัดจะมากกว่าจำนวนแถว
ถ้าจะแบ่งไฟล์เป็นส่วนที่ Excel เปิดได้ โดยแต่ละส่วนมีหัวตารางของตัวเอง
tail -n +2 export.csv | split -l 1000000 - part_
for f in part_*; do
{ head -n 1 export.csv; cat "$f"; } > "$f.csv" && rm "$f"
done
การแบ่งไฟล์ใช้ได้ดีสำหรับการตรวจสอบเร็ว ๆ แต่ระวังปัญหาเดียวกันเรื่องการขึ้นบรรทัดในเครื่องหมายคำพูด split ตัดตามบรรทัด จึงอาจผ่าค่าที่มีหลายบรรทัดออกเป็นสองท่อน และการทำงานข้ามเวิร์กบุ๊กสี่ไฟล์ก็ยุ่งยาก ถ้าคุณต้องการยอดรวมของทั้งหมด
ตัวเลือกที่ 4: วิเคราะห์ด้วย pandas, SQLite หรือ DuckDB
ถ้าคุณจะคำนวณ เชื่อมตาราง หรือสรุปข้อมูล เครื่องมือข้อมูลจริงจังคือคำตอบที่ตรงที่สุด ทุกตัวต่อไปนี้รับข้อมูลหลายสิบล้านแถวได้บนโน้ตบุ๊กทั่วไป
Python กับ pandas อ่านทั้งไฟล์เข้าหน่วยความจำ
import pandas as pd
df = pd.read_csv("export.csv")
print(len(df))
print(df.groupby("region")["amount"].sum())
ถ้าไฟล์ใหญ่กว่า RAM ให้อ่านทีละก้อน
total = 0
for chunk in pd.read_csv("export.csv", chunksize=500_000):
total += chunk["amount"].sum()
DuckDB คิวรีไฟล์ CSV ด้วย SQL ได้โดยตรง ไม่ต้องนำเข้าก่อน
SELECT region, COUNT(*) AS orders, SUM(amount) AS revenue
FROM 'export.csv'
GROUP BY region
ORDER BY revenue DESC;
SQLite ติดตั้งมากับหลายระบบ และเหมาะเมื่อคุณอยากเก็บข้อมูลไว้ในไฟล์เดียวที่คิวรีได้
sqlite3 sales.db
sqlite> .mode csv
sqlite> .import export.csv sales
sqlite> SELECT COUNT(*) FROM sales;
ขั้นตอนที่ดีคือทำงานหนักที่นี่ แล้วเขียนผลลัพธ์ขนาดเล็ก เช่น แถวสรุปไม่กี่พันแถว กลับเป็น CSV สำหรับ Excel หรือรายงาน
คำถามที่พบบ่อย
เพิ่มขีดจำกัดจำนวนแถวของ Excel ได้ไหม?
ไม่ได้ ขีดจำกัด 1,048,576 แถวตายตัวสำหรับทุกเวิร์กชีต ทำได้แค่หลบเลี่ยง คือโหลดข้อมูลเข้า Data Model แบ่งไฟล์ หรือใช้เครื่องมืออื่น
จะรู้ได้อย่างไรว่าไฟล์ถูกตัด?
Excel จะแจ้งเตือนตอนเปิดไฟล์ และชีตที่ข้อมูลจบพอดีที่แถว 1,048,576 คือสัญญาณที่ชัดเจน ถ้าต้องการให้แน่ใจ ให้ตรวจขนาดไฟล์ต้นฉบับด้วย wc -l หรือเปิดในโปรแกรมดู CSV ซึ่งแสดงจำนวนแถวทั้งหมด
Google Sheets หรือ LibreOffice เปิดแทนได้ไหม?
ส่วนใหญ่ไม่ได้ Google Sheets จำกัดไว้ที่ 10 ล้านเซลล์ต่อสเปรดชีต และ LibreOffice Calc ก็มีจำนวนแถวสูงสุดต่อชีตที่ตายตัวเช่นกัน ทั้งสองใช้ได้ดีกับไฟล์ขนาดเล็กกว่า แต่ไฟล์หลายล้านแถวต้องใช้โปรแกรมดูไฟล์ ฐานข้อมูล หรือสคริปต์
เปิดไฟล์ข้อมูลลูกค้าขนาดใหญ่ในเครื่องมือบนเบราว์เซอร์ปลอดภัยไหม?
ขึ้นอยู่กับเครื่องมือ ตัวแปลงไฟล์ออนไลน์หลายตัวอัปโหลดไฟล์ของคุณขึ้นเซิร์ฟเวอร์ Opener อ่านไฟล์ในเบราว์เซอร์ของคุณเองและไม่ส่งอะไรไปไหน ข้อมูลจึงอยู่บนอุปกรณ์ของคุณ