Google Sheet—สร้างรายชื่อตำบล อำเภอ จังหวัด และรหัสไปรษณีย์ ไว้ใช้งานกันเถอะ

Photo by Ragnar Vorel on Unsplash

เพื่อนๆ หลายคนที่ขายของออนไลน์ หรือต้องการใช้ข้อมูลที่อยู่การจัดส่งประเภท รายชื่อตำบล อำเภอ จังหวัด และรหัสไปรษณีย์เป็นประจำคงพบเจอปัญหาในการหาข้อมูลมา่ใช้งานไม่น้อย ผมก็เป็นคนหนึ่งที่คิดว่าฐานข้อมูลพื้นฐานแบบนี้ควรที่จะเข้าถึงและนำมาใช้งานได้อย่างง่ายดายมากกว่านี้ทั้งที่เข้าสู่ยุค 4.0 แล้ว งั้นเรามาลองทำข้อมูลนี้ไว้ใช้งานเองกันดีกว่าครับ 😉


💡 เริ่มจากการค้นหารายชื่อ ตำบล อำเภอ จังหวัด รหัสไปรษณีย์ มาก่อนซึ่งพบว่าหลายๆ หน่วยงานภาครัฐทำข้อมูลไว้เข้าถึงยากมากนำมาใช้ต่อลำบาก และพอดีกับที่ได้ติดตามบทความของ Peerasak’s Blog ที่ได้ไปค้นหาไฟล์ข้อมูลมาให้ทั้งประเทศแล้ว แถมเชื่อถือได้ด้วยเพราะถูกเอามาใช้จริง และไฟล์ที่หามาได้ก็อยู่ในรูป JSON ไฟล์ที่น่าใช้งานมากกว่าอีก มาเริ่มกันเลยดีกว่าว่าจะเอาข้อมูลมาทำเป็นฐานข้อมูลใน Google Sheet ไว้ใช้งานได้อย่างไร

พอดีได้ไปค้นหาเจออีกแหล่งข้อมูลมาครับ รายชื่อจังหวัด, อำเภอ และตำบลในประเทศไทย ในรูปแบบพร้อมนำไปใช้งาน ลองไปโหลดมาดูได้เลย เท่าที่ผมดูข้อมูลมีแตกต่างกันเล็กน้อย หากจะให้ถูกต้องจริงคงต้องนำมาจัดการแล้วดูภาพรวมเปรียบเทียบกับของทางหน่วยงานราชการดูครับ

1. นำเข้าข้อมูลจากไฟล์ JSON

— เมื่อเปิดดูไฟล์ JSON ตามที่ได้มาก็พบว่าชุดข้อมูลมาเป็นแบบรวมมาเลย ไม่ได้แยกข้อมูลออกเป็นตำบล อำเภอ จังหวัด รหัสไปรษณีย์ แต่ไม่เป็นไรครับเดี๋ยวมาจัดการแยกเองทีหลังใน Google Sheet ก็ได้ และ Google Sheet ก็ดันไม่มีฟังก์ชันที่นำเข้าข้อมูลที่เป็นไฟล์ JSON โดยตรงก็เลยต้องเขียน App Script เองแล้วกัน 😎

https://raw.githubusercontent.com/clonezer/thai-address-splitter/master/subdistricts.json

— พร้อมแล้วก็พิมพ์ sheet.new ในช่อง url เพื่อสร้างไฟล์ Google Sheet ขึ้นมาก่อนเลยครับ (ใครยังไม่รู้จักฟีเจอร์ .new อ่านวิธี การสร้างไฟล์ใหม่อย่างรวดเร็วด้วยฟีเจอร์ .new ได้เลยครับ) ไม่รอช้าตั้งชื่อไฟล์งาน และเปิด Script editor มาเลย

— ทำการลบข้อมูลเดิมออกให้หมด ตั้งชื่อไฟล์งาน และฟังก์ชันให้เรียบร้อย แล้วมาเริ่มเขียน code กันเลยครับ โดยผมเริ่มจากกำหนดตัวแปร url เพื่อเก็บค่า url ของไฟล์ JSON และใช้ UrlFetchApp ดึงข้อมูลมาเก็บไว้ในตัวแปร jsondata แค่นี้ก็ได้ข้อมูล JSON มาแล้ว แต่เราต้องมาเปลี่ยนจากข้อมูลจากรูปแบบ String มาให้อยู่ในรูปแบบ Object กันก่อนด้วย JSON.parse() และกำหนดไว้ในตัวแปร objects แล้วลองทำการ log เพื่อดู objects และจำนวน objects กันครับ

log แสดงผลได้ไม่หมดแต่เราได้จำนวนข้อมูลที่มีมา 7,432 !!!

— เพิ่ม code เพื่อทำการเรียกใช้ Google Sheet ที่เปิดมาตอนแรกและเรียก Sheet ที่เปิดใช้งานอยู่ เพื่อที่จะทำการบันทึกข้อมูลลงไปครับ อย่าลืมทำการเก็บค่าแถวสุดท้ายมาดูก่อนด้วยครับ เดี๋ยวจะมีเหตุผลว่าทำไมผมต้องทำการกำหนดค่าตัวแปร lastRow ไว้ด้วย

ได้ค่า lastRow กลับมาเป็น 0 ก็โอเคแล้วครับ เพราะเรายังไม่กำหนดค่าอะไรลงไปใน Sheet (แนะนำว่าตกแต่งทีหลังครับ)

2. ทำการเพิ่มข้อมูลจากไฟล์ JSON มาไว้ที่ Google Sheet

— เพิ่ม code เพื่อวนลูปให้นำข้อมูลจากไฟล์ JSON ตามจำนวนข้อมูลทั้งหมด (7,432) มาเพิ่มลงใน Google Sheet ทีละแถวโดยการนำค่า lastRow มากำหนดค่าเริ่มต้นการวนลูปด้วยครับ

— เมื่อทำการ Run ฟังก์ชั่นการทำงานด้วยข้อมูลที่เยอะ ทำให้เวลาในการ Run ฟังก์ชันเกินกว่าค่าที่กำหนดของ Google นั่นคือ ประมาณ 6 นาที ต่อการ Run 1 ครั้ง สำหรับ Account ประเภททั่วไปครับ ไปดูรายละเอียดเพิ่มเติมของ Google ได้ ที่นี่ เลยจ้า

เข้าใจแล้วว่าทำไมเวลาถึงมีค่ามากที่สุด

— หลังจาก Run ฟังก์ชันไปแล้วจะมี Error แจ้งว่าฟังก์ชันเราทำงานเกินเวลากว่าค่าที่กำหนดไว้ก็ให้กด dismiss ไปครับ ช่วงรอก็ให้ไปไถๆ ดูในไฟล์ Google Sheet ครับจะเห็นว่าค่อยๆ มีข้อมูลเพิ่มมาทีละแถว และหากไม่มีข้อมูลเพิ่มแล้วก็ให้ทำการ Run ฟังก์ชันใหม่จนกว่าจะได้ข้อมูลมาครบทั้ง 7,432 แถว ทั้งนี้เราจะไม่ได้ข้อมูลซ้ำกับก่อนหน้าเพราะได้กำหนดให้มีการนำค่า lastRow มาใช้เพื่อเริ่มต้นในการวนลูปใหม่นั่นเอง ช่วงนี้ใช้เวลานานหน่อยอาจจะต้องกด Run ใหม่ประมาณ 3-4 รอบก็ประมาณ 20-25 นาทีซึ่งก็ยังดีกว่า copy&paste ครับ ช่วงนี้ก็ลุกไปกอดลูกซักที หอมแก้มเมียซะหน่อย หรือจะวิดพื้น ซิทอัพได้ครบเซทก็ดีน่ะครับ 😉

กด Dismiss ไปครับแล้วก็ทำการ Run ฟังก์ชันใหม่
ได้ข้อมูลมาครบทั้ง 7,432 แถว

3. จัดการข้อมูลที่ได้มาใน Google Sheet ให้พร้อมใช้

— ข้อมูลที่ได้มาเป็นก้อนในคอลัมน์ A ทั้งหมด จึงต้องนำมาทำการแยกข้อมูล ตำบล อำเภอ จังหวัด และรหัสไปรษณีย์ ไว้ในแต่ละคอลัมน์ให้ง่ายต่อการค้นหา ให้ไถกลับไปเริ่มที่แถวบนสุดในคอลัมน์ B ใช้ฟังก์ชัน SPLIT ทำการแยกข้อมูลออกจากกันโดยใช้ค่า “,ช่องว่าง” เป็นตัวแยกข้อมูลออกจากกัน เราจะได้ข้อมูลที่แยกใส่ในคอลัมน์ถัดไปให้อัตโนมัติเลยครับ

ดูเพิ่มเติมได้ที่ https://support.google.com/docs/answer/3094136
แยกข้อมูลได้อย่างชัดเจน

— ใช้ฟังก์ชัน ARRAYFORMULA() ครอบคำสั่งใน B1 และเพิ่มช่วงจาก A1:A เพื่อเป็นการทำซ้ำฟังก์ชัน SPLIT ไปจนถึงแถวสุดท้ายเลยครับ

ดูเพิ่มเติมได้ที่ https://support.google.com/docs/answer/3093275
ผลลัพธ์น่าพอใจ

— ทำการเพิ่มแถวบนสุดและใส่หัวคอลัมน์ให้ตรงกับข้อมูลแล้วทำการเพิ่มการ FILTER ไว้ให้ง่ายกับการค้นหาก็ง่ายขึ้นแล้วครับ 😀


ท้ายสุด วิธีการนี้ก็เป็นที่น่าพอใจครับกับการได้ข้อมูลพื้นฐานแบบนี้มาไว้ใช้งานถึงแม้มันจะยังเป็นฐานข้อมูลบน Google Sheet แต่ก็ยังดีกว่าข้อมูลที่เค้ามีให้โหลดครับ อาจจะนำไปต่อยอดไว้ใช้กับงานอื่นๆ ได้ครับ แต่ตอนนี้มันก็ช่วยลดเวลาการ copy&paste และเวลาการค้นหาบนอินเตอร์เน็ทได้พอสมควรครับ…Happy Coding. Happy Life 🙂


โปรโมชั่น คูปองส่วนลด และดีล ที่ดีที่สุดของร้านค้าออนไลน์กว่า 300 แบรนด์พร้อมรับเงินคืนจาก ShopBack
🔗 https://bit.ly/3c4tlmV

Ruk-Com จดโดเมน-เช่าโฮสต์ ราคาประหยัด พร้อมให้บริการใน 1 นาที
🔗 http://bit.ly/36q8A12