บทที่ 15

ข้อมูลเราอยู่ในไฟล์ Excel

ไม่มีใครอยากพิมพ์จุดส่งสี่สิบจุดใหม่ทุกเช้า ถ้าวันนี้อยู่ในชีตอยู่แล้ว เอาชีตนั้นเข้ามาเลย

บทนี้ไม่มีวันตัวอย่างให้กด เพราะสิ่งที่ต้องลองคือไฟล์ของคุณเอง

1สองทาง เลือกทางที่ตรงกับไฟล์ที่มี

เมนูโหลดข้อมูล มีสี่รายการ เลือกจากสมุดลูกค้า นำเข้าจาก Excel นำเข้าจากไฟล์ CSV และข้อมูลตัวอย่าง
อยู่ที่ปุ่ม โหลดข้อมูล เหนือตารางจุดส่ง

2เริ่มจากแม่แบบ

กล่องนำเข้าจาก Excel มีลิงก์ดาวน์โหลดแม่แบบมีวงสีแดงรอบ คำอธิบายว่าชีตหนึ่งสำหรับคลัง หนึ่งสำหรับจุดส่ง หนึ่งสำหรับรถ ชื่อชีตไม่สำคัญ ระบบดูจากหัวคอลัมน์ และปุ่มใช้สมุดงานที่อัปโหลด
กด ⬇ แม่แบบ ก่อนอย่างอื่น แม่แบบมีคอลัมน์ครบพร้อมตัวอย่างหนึ่งแถว คนที่เริ่มจากแม่แบบไม่เคยเจอข้อความแจ้งคอลัมน์ผิด

ประโยคที่ควรอ่านในกล่องนี้คือ ชื่อชีตไม่สำคัญ ระบบดูจากหัวคอลัมน์ เปลี่ยนชื่อชีตเป็น “จุดส่ง” “คลัง” “รถ” ได้ตามสบาย หรือเพิ่มชีตของตัวเองอย่างชีตสรุปให้เจ้านายดูก็ได้ ระบบจะข้ามชีตที่ไม่รู้จัก

สี่ชีตที่ระบบมองหา ดูจากคอลัมน์ที่มีในหัวตาราง

3อัปโหลดแล้วเกิดอะไรขึ้น

สรุปข้อมูลที่โหลด สมุดงาน Excel คลัง 3 แห่ง จุดส่ง 1 จุด ชุดข้อมูล Monday Bangkok run วันที่ส่งในข้อมูล 2026-08-03 คลัง 3 จุดส่ง 1 จุดส่งที่มีช่วงเวลารับส่ง 1 น้ำหนักรวม 12.0 kg ปริมาตรรวม 0.040 ลูกบาศก์เมตร จุดส่งที่ไม่ได้ทำเครื่องหมายว่าใช้ 1
นี่คือแม่แบบเปล่าที่อัปโหลดเข้าไปตรง ๆ จึงมีจุดส่งแค่หนึ่งจุด แต่บอกครบว่าอ่านอะไรเข้าไปได้บ้าง

สรุปนี้เป็นด่านตรวจที่ควรอ่านทุกครั้ง ไม่ใช่เพราะจะผิด แต่เพราะเลขที่ผิดตรงนี้คือเลขที่จะผิดไปทั้งวัน

ตารางคลังที่อ่านมาจากไฟล์ มีสามแถว
คลังจากไฟล์เข้ามาอยู่ในตารางเหมือนที่พิมพ์เอง แก้ต่อได้ทันที

ของที่นำเข้ามาไม่ได้ล็อก แก้ในตารางได้ตามปกติ ไฟล์คือจุดเริ่ม ไม่ใช่สัญญา

4ถ้าเป็นไฟล์ CSV

กล่องนำเข้าจากไฟล์ CSV มีลิงก์แม่แบบ ปุ่มดูรายการคอลัมน์มีวงสีแดงรอบ ช่องเลือกไฟล์ และปุ่มใช้ไฟล์ที่อัปโหลด
ปุ่มที่วงไว้เปิดรายการคอลัมน์ทั้งหมดที่อ่านได้ พร้อมบอกว่าอันไหนจำเป็น อันไหนใส่ก็ได้ไม่ใส่ก็ได้

CSV เป็นไฟล์แบนไฟล์เดียว ไม่มีชีตแยก คลังจึงต้องอยู่บนแถวของจุดส่งเอง ห้าคอลัมน์นี้ขาดไม่ได้

บวกอีกคู่หนึ่งคือพิกัดของคลังที่จุดนั้นออก origin_1_lat กับ origin_1_long ถ้าจุดนั้นออกได้หลายคลัง ใส่ origin_2_* และ origin_3_* ต่อได้ เป็นวิธีทำเรื่องบทที่ 11 จากไฟล์

ที่ใส่ก็ได้ไม่ใส่ก็ได้ และมีประโยชน์จริง

5ตอนที่ไฟล์ยังไม่ถูก

ลองอัปโหลดไฟล์ที่หัวคอลัมน์เป็น รหัส,lat,lng,kg ซึ่งคนทำจริงพลาดกันแบบนี้เกือบทุกคนในครั้งแรก

ข้อความแจ้งปัญหา ไฟล์นี้ยังขาดคอลัมน์ที่ต้องใช้อยู่ 6 คอลัมน์ แล้วไล่รายชื่อ latitude longitude order_id total_volume_cm3 total_weight_kg origin_1_lat/origin_1_long พร้อมหมายเหตุว่าใช้ origin_lat/origin_long แทนได้ และบรรทัดท้ายว่าชื่อคอลัมน์ต้องตรงกันทุกตัวอักษร โหลดแม่แบบด้านบนไปดูได้
บอกว่าขาดอะไรทีละอัน ไม่ใช่แค่ว่าไฟล์ผิด และบอกด้วยว่าคู่พิกัดคลังเขียนได้สองแบบ

ประโยคสุดท้ายคือคำตอบของปัญหานี้เกือบทุกครั้ง ชื่อคอลัมน์ต้องตรงกันทุกตัวอักษร Order_ID ใช้ได้ เพราะระบบตัดช่องว่างและไม่แยกตัวใหญ่ตัวเล็ก แต่ order ใช้ไม่ได้ และ รหัสออเดอร์ ก็ใช้ไม่ได้

หัวตารางเป็นภาษาไทยได้ ถ้ามีบรรทัดคอลัมน์จริงอยู่ด้วย

ชีตที่คนกรอกจริงมักมีสองบรรทัดหัว บรรทัดบนเป็นภาษาคนอย่าง “รหัสออเดอร์” “น้ำหนัก (กก.)” และบรรทัดล่างเป็นชื่อคอลัมน์จริง ระบบรองรับแบบนี้ จะหาบรรทัดที่เป็นชื่อคอลัมน์จริงแล้วทิ้งบรรทัดบนไป แม่แบบที่ดาวน์โหลดไปก็ทำแบบนี้ให้แล้ว

พิกัดที่หลุดออกนอกประเทศจะถูกปฏิเสธ

ถ้าพิกัดอยู่นอกกรอบประเทศไทย ระบบจะไม่รับแถวนั้น เพราะ longitude ที่พิมพ์ผิดเป็น 140 คือญี่ปุ่น และถ้ารับไว้ จะได้แผนที่มีเส้นทางหลายพันกิโลโดยไม่มีใครทันสังเกต สลับ lat กับ long กันเป็นความผิดที่เจอบ่อยที่สุด และด่านนี้จับได้

6ทำให้เป็นงานประจำ

  1. ทำไฟล์ต้นแบบของตัวเองไว้หนึ่งไฟล์ คลังกับรถกรอกครั้งเดียว เพราะสองอย่างนี้ไม่เปลี่ยนทุกวัน

  2. ทุกเช้าเปลี่ยนแค่ชีตจุดส่ง วางทับจากระบบขาย แล้วอัปโหลด

  3. อ่านบรรทัดสรุปก่อนกดวางแผน จำนวนจุดกับน้ำหนักรวม สองตัวนี้พอ

ถ้าลูกค้าซ้ำกันทุกวันเป็นส่วนใหญ่ มีทางที่ดีกว่าไฟล์ คือเก็บลูกค้าไว้ในสมุดลูกค้าของทีม แล้วเลือกจากที่นั่น อยู่ในบทที่ 16

ถ้าส่งข้อมูลเข้ามาเป็น JSONสำหรับคนที่ต่อระบบเอง

ถ้าเขียนโค้ดต่อระบบได้ ไม่ต้องผ่านไฟล์เลย ยิงเข้า POST /api/solve ตรง ๆ ด้วยรูปที่ทุกบทก่อนหน้าใช้ ตัวอ่านไฟล์มีไว้สำหรับคนที่ไม่มีทางเชื่อมระบบ ไม่ใช่ทางหลัก

ที่ยังมีประโยชน์จากฝั่งไฟล์คือแม่แบบ เพราะบอกได้ว่าตัวอ่านรับคอลัมน์อะไร และไฟล์นั้นสร้างจากโค้ดชุดเดียวกับที่ใช้อ่าน จึงไม่มีทางที่แม่แบบจะบอกคอลัมน์ที่ตัวอ่านไม่รู้จัก

คอลัมน์ปริมาตรรับสองหน่วย total_volume_cm3 เป็น cm³ และมีคอลัมน์ลิตรให้ใช้ด้วยในชีตของสมุดงาน หน่วยที่ระบบใช้ข้างในเป็น cm³ เสมอ ตรงกับ volume_cm3 ในคำขอ JSON