คุณเคยได้รับมอบหมายให้ทำการย้ายข้อมูลจาก PDF ไฟล์มากรอกใส่ Excel เพื่อนำมาใช้ในการคำนวณหรือประมวลผลหรือเปล่าครับ ผมเชื่อว่าหลายๆคนคงเคยต้องทำงานประมาณนี้กันอยู่บ้าง และหลายๆครั้งก็จะเป็นลักษณะงานที่ต้องทำเป็นประจำ เช่น ทุกวัน ทุกสัปดาห์ ทุกเดือน หรือมากกว่านั้น หากเราต้องทำงานนั้นด้วยมือคงใช้เวลาไม่น้อยเลยทีเดียว (ขึ้นอยู่กับปริมาณข้อมูลที่ต้องกรอก) แต่วันนี้เราจะมาดูวิธีทำทั้งหมดนี้อัตโนมัติและฟรี ด้วยเครื่องมือที่มีมาให้อยู่แล้วบน Windows 11 (สามารถติดตั้งได้ฟรีบน Windows 10)
บน Windows 11 เราสามารถพิมพ์หาโปรแกรมจาก Search bar แล้วพิมพ์ว่า “power automate” เราจะเจอแอพขึ้นมาให้เลือกดังรูปข้างล่าง ให้กดเปิดแอพนั้นได้เลย โดยการเปิดอาจจะมีการดาวน์โหลดอัพเดตกันก่อน หลังจากดาวน์โหลดเรียบร้อยเราก็จะเข้าสู่หน้าต่างให้ทำการ Sign in เข้ากับ Microsoft Account จากนั้นก็สามารถเริ่มใช้งาน Power Automate Desktop (PAD) กันได้เลยครับ
หลังจากเปิด PAD กันขึ้นมาแล้วให้เราเลือกสร้าง Flow ใหม่โดยคลิกที่ New Flow ด้านมุมบนซ้ายได้เลย จากนั้นให้ตั้งชื่อ Flow ที่เราอยากได้ จากนั้นกดปุ่ม Create Flow ได้เลย (ไม่ต้องเปิดออปชั่น Power Fx) เพื่อสาธิตตัวอย่างการอ่านไฟล์ PDF เราจะมาใช้ไฟล์สรุปราคาประเมินทุนทรัพย์ที่ดินจากกรมธนารักษ์กัน โดยสามารถโหลดได้จากลิงค์ข้างล่างนี้เลยนะครับ ไฟล์จะมีขนาดประมาณ 13MB
สรุปราคาประเมินทุนทรัพย์ที่ดิน_รอบบัญชี_พ.ศ.2566 – 2569_กรุงเทพมหานคร.pdf (treasury.go.th)
หากเราเปิดไฟล์มาดูจะพบรายการประเมินมากถึง 429 หน้า!! เพื่อไม่ให้เป็นการเสียเวลาจนเกินไปเราจะทำการทดสอบอ่านแค่หน้าแรกเพียงหน้าเดียวนะครับ เตรียมตัวกันมาเยอะแล้ว ถึงเวลามาลงมือสร้าง Flow ของเรากันซักที
ขั้นตอนที่ 1: Extract ตารางจาก PDF
เนื่องจากเนื้อหาอยู่ในรูปของตารางเราจะทำการอ่านข้อมูลด้วยการ extract ข้อมูลตารางจากไฟล์ PDF กัน โดยให้เราค้นหาคำว่า “pdf” ในช่อง “Search actions” เราจะเห็น Action ที่เกี่ยวกับ PDF ทั้งหมดมาให้เลือกดังรูปข้างล่าง ให้เราลากแอคชั่น “Extract tables from PDF” ไปวางไว้ใน Flow Main ทางด้านขวา (หรือกด double clicks ก็ได้)
จากนั้นจะมีหน้าต่างป๊อปอัพขึ้นมาให้เราใส่พารามิเตอร์ตามนี้
- PDF file: เลือกไฟล์ PDF ที่เราดาวน์โหลดมาก่อนนี้
- Page(s) to extract: เลือก “Single” เพราะเราจะทดสอบแค่หน้าเดียวเท่านั้น
- Single page number: ใส่ 1 เพื่ออ่านค่าจากหน้าแรกเท่านั้น
- Variables produced: ใช้ค่าที่ PAD กำหนดให้มาตอนต้น ในที่นี้คือ “ExtractedPDFTables”
ส่วนค่าอื่นๆ เราจะปล่อยให้เป็นไปตามค่าตั้งต้นที่ PAD กำหนดมาให้ จากนั้นกดปุ่ม Save ได้เลย สิ่งที่เราทำไปคือบอก PAD ว่าให้อ่านตารางทั้งหมดให้หน้าแรกของไฟล์ PDF ที่เราบอกแล้วเก็บค่าที่อ่านไว้ในตัวแปรที่ชื่อว่า “ExtractedPDFTables”
เราสามารถดูข้อมูลเพิ่มเติมได้จากเว็บไซต์หลักของ Microsoft นี้ได้เลย PDF actions reference – Power Automate | Microsoft Learn
ขั้นตอนที่ 2: เปิดไฟล์ Excel
เนื่องจากเราต้องการอ่านข้อมูลจาก PDF มากรอกใส่ Excel ดังนั้นเราจะทำการสร้าง Excel ไฟล์ขึ้นมาสำหรับกรอกข้อมูลลงไป โดยเราจะทำการค้นหาแอคชั่นที่เกี่ยวข้องทั้งหมดด้วยการค้นหาคำว่า “excel” เราจะเห็นแอคชั่นมากมาย แต่ในตอนนี้ให้เราเลือก “Launch Excel” แล้วให้ใส่พารามิเตอร์ตามนี้
- Launch Excel: เลือก with a blank document
- Variables produced: ใช้ค่าที่ PAD กำหนดให้มาตอนต้น ในที่นี้คือ “ExcelInstance”
ส่วนค่าอื่นๆเราจะปล่อยให้เป็นไปตามค่าตั้งต้นที่ PAD กำหนดมาให้ จากนั้นกดปุ่ม Save โดยขั้นตอนที่เราทำไปคือบอก PAD ว่าให้เปิด Excel ไฟล์เปล่าๆขึ้นมาแล้วเก็บไว้ในตัวแปร ExcelInstance
เราสามารถดูข้อมูลเพิ่มเติมได้ที่ Excel actions reference – Power Automate | Microsoft Learn
ขั้นตอนที่ 3: ทำการวนอ่านข้อมูลจากตารางแล้วเขียนใส่ Excel ที่เปิดไว้แล้ว
เรามาถึงขั้นตอนที่ซับซ้อนที่สุดของบทความนี้แล้วครับ แต่มันไม่ยากเกินไปแน่นอนถ้าหากเราพยายาม อย่างแรกให้เราใส่แอคชั่น Set variable ลงไปแล้วกำหนดพารามิเตอร์ตามนี้
- Variable: ItemRow
- Value: 0
ตัวแปร ItemRow นี้เราจะใช้เก็บข้อมูลบรรทัดที่อ่านอยู่ ณ ปัจจุบันเอาไว้ จากนั้นให้เราใส่แอคชั่น “For each” มาในขั้นต่อไปของ Flow เราโดยมีค่าพารามิเตอร์ดังนี้
- Value to iterate: %ExtractedPDFTables[0].DataTable%
- Store into: Row
ขั้นตอนนี้เป็นการบอก PAD ว่าให้ทำการอ่านข้อมูลจากตารางมาทีละบรรทัด โดยแต่ละรอบจะอ่านข้อมูลออกมาหนึ่งบรรทัดแล้วเก็บใส่ตัวแปร Row เอาไว้
จะเห็นว่าเราบอกให้ทำการวนอ่านจากตัวแปร ExtractedPDFTables ซึ่งเป็นตัวแปรที่เราเก็บค่าจากการอ่าน PDF ในขั้นตอนแรกมา จากนั้นเราใส่ [0] เข้าไปเพื่อบอกว่าเราต้องการตารางแรกจากตัวแปรนี้ สาเหตุก็เพราะตัวแอคชั่น Extract tables from PDF จะอ่านตารางทั้งหมดใน PDF มาเก็บใส่ตัวแปร Array (ชุดของข้อมูลต่อๆกัน) ดังนั้นตัวแปร ExtractedPDFTables จะเก็บ List ของตารางทั้งหมดที่มี การที่เราระบุตัวที่ 0 คือเป็นการบอกว่าเราจะเอาตารางแรกจากตารางทั้งหมด ในทางโปรแกรมมิ่งส่วนใหญ่เรามักจะเริ่มต้นอินเด็กซ์ด้วยค่า 0 แต่ข้อมูลที่ได้มาจาก ExtractedPDFTables[0] ยังเป็นแค่ตัวแปรของ “PDF table info” ซึ่งใช้เก็บข้อมูลเกี่ยวกับตารางเอาไว้ 4 อย่างคือ Data Table, TableStartingPage, TableEndingPage และ TableOrderInPage ใน Flow นี้เราต้องการข้อมูลในตารางดังนั้นเราจึงวนอ่านข้อมูลจาก %ExtractedPDFTables[0].DataTable% เท่านั้น
รูปข้างล่างนี้นำมาจากเว็บไซต์หลักของ Microsoft เพื่อใช้ในการอ้างอิงและช่วยให้เราเข้าใจโครงสร้างของ data ต่างๆได้ เราสามารถเข้าไปดูรายละเอียดเกี่ยวกับ data type ต่างๆได้ที่ Variable data types – Power Automate | Microsoft Learn)
จากนั้นข้างใน “For each” ลูปของเราให้ใส่แอคชั่น “Increase variable” โดยมีพารามิเตอร์ดังนี้
- Variable name: %ItemRow%
- Increase by: 1
ในขั้นตอนนี้เป็นการบอก PAD ให้เพิ่มค่าของตัวแปร ItemRow ที่เรากำหนดไว้ก่อนหน้านี้ด้านนอกลูปให้เป็น 0 ดังนั้นเมื่อรันอ่านตารางแต่ละบรรทัดค่า ItemRow ก็จะเพิ่มขึ้น 1 ไปเรื่อยๆ
ขั้นต่อไปให้เลือกใช้แอคชั่น “Write to Excel worksheet” โดยใช้พารามิเตอร์ดังนี้
- Excel Instance: %ExcelInstance%
- Value to write: %Row[0]%
- Write mode: On specified cell
- Column: 1
- Row: %ItemRow%
แปลง่ายๆคือเราบอกให้ PAD เขียนข้อมูลใส่ Cell บรรทัดที่ ItemRow กำหนดซึ่งมันจะเปลี่ยนไปในแต่ละรอบตามที่เราเพิ่มค่าทีละ 1 มาก่อนนี้ ดังนั้นในรอบแรกจะเป็นการบอกให้เขียนไปบน Row ที่ 1 และเรากำหนด Column เป็น 1 เพื่อให้เขียนบน Column A ดังนั้นในการวนตอบแรกจะเขียนที่ Cell A1 การวนรอบที่สองจะเขียนที่ Cell A2 และไปเรื่อยๆจนวนครบ โดยข้อมูลที่จะเขียนลงไปคือ Row[0] ซึ่ง Row ก็คือตัวแปรของ For each ที่เราอ่านแต่ละบรรทัดมาจาก DataTable ก่อนนี้ โดย 0 คือ Column แรก
จากนั้นให้ทำการ Copy และ Paste แอคชั่นนี้สองรอบและอัพเดตค่า Value to write เป็น %Row[1]% และ %Row[2]% ส่วนค่า Column ให้ใส่ 2 และ 3 หลังจากทำเรียบร้อยแล้วให้ลองกดปุ่ม Run ด้านบนดู จะได้ผลลัพธ์ตามนี้
ขั้นตอนที่ 4: Save และปิดไฟล์ Excel
ในขั้นตอนนี้คุณสามารถเลือกใช้แอคชั่น “Save Excel” หรือ “Close Excel” ก็ได้ ความต่างคือ Save Excel จะแค่ทำการเซฟไฟล์เฉยๆ ส่วน Close Excel จะทำการ Save และปิดหน้าต่าง Excel ไปให้เลย ในที่นี้เราจะใช้ Close Excel กันโดยใส่พารามิเตอร์ตามนี้
- Excel Instance: %ExcelInstance%
- Before closing Excel: “Save document as”
- Document format: “Default (From Extension)”
- Document Path: ชื่อไฟล์ที่คุณต้องการจะบันทึก (นามสกุลเป็น xlsx)
คราวนี้ให้ลอง Run อีกทีก็จะพบว่าไฟล์ excel จะถูก Save และปิดไปเรียบร้อย เพียงเท่านี้งานของเราก็เป็นอันจบเรียบร้อย โดย Flow ของเราเมื่อเสร็จแล้วจะมีหน้าตาแบบนี้
คุณอาจจะรู้สึกว่าทำไมมันรันช้าจัง อันนี้เป็นเพราะการรันแบบ debug โหมดคือเขียน Flow ไปด้วยรันไปด้วยมันจะช้ากว่าปกติ ให้ลอง Save Flow นี้และปิดหน้าต่าง Flow ไปแล้วกลับมาที่หน้าต่างหลัก จากนั้นให้ลองกดปุ่ม Run ที่ Flow ที่เราสร้างขึ้นจากหน้าต่างหลัก มันจะทำงานแบบเดียวกันแต่ไม่ใช่ Debug mode แล้วมันจะเร็วกว่ามาก
หวังว่าบทความนี้จะช่วยให้คุณมีไอเดียในการนำ Power Automate Desktop ไปใช้ช่วยให้เราทำงานได้รวดเร็วขึ้นนะครับ