บทนำ
การส่งออกข้อมูลไปยังไฟล์ Excel นั้นทำได้ง่ายมากด้วย Power Automate โดยใช้คำสั่ง “Add a row into table” แต่ปัญหาหลักคือ ช้า และ ไม่มีประสิทธิภาพ
ในโพสต์นี้ ผมจะแนะนำวิธีที่ทำให้การทำงานเร็วขึ้น แต่ยังคงได้ผลลัพธ์เหมือนเดิม
ชุดข้อมูล (Dataset)
ผมจะใช้ชุดข้อมูลตัวอย่างที่ชื่อว่า ‘Data100K’ ซึ่งมี 8 คอลัมน์ ดังที่เห็นในตัวอย่างด้านล่าง
ปัญหา (วิธีที่ช้า)
มาดูกันว่าการส่งออกข้อมูลตัวอย่าง 1,000 รายการไปยัง Excel ด้วยวิธีปกติจะใช้เวลานานแค่ไหน
Flow นี้ค่อนข้างเรียบง่าย ดึงข้อมูลจาก SharePoint list และเพิ่มแต่ละแถวลงใน Excel ทีละแถวโดยใช้ “Apply to each”
ผมได้เปิดใช้งานการควบคุมความพร้อมกัน (Concurrency control) ไว้ที่ 10 เท่าแล้ว
แต่ก็ยังใช้เวลาถึงประมาณ 10 นาทีในการส่งออกข้อมูลเพียง 1,000 รายการ ซึ่งช้ามาก ๆ
Solution (วิธีที่เร็ว)
ตอนนี้ถึงเวลาที่จะมาใช้วิธีที่เร็วกว่า โดยการใช้ Excel Office Script
Excel Office Script คืออะไร?
Excel Office Script เป็นการใช้สคริปต์ที่เขียนด้วย TypeScript เพื่อทำงานอัตโนมัติใน Excel ไม่ว่าจะเป็นการทำงานซ้ำๆ จัดการข้อมูล หรือทำงานต่างๆ ในไฟล์ Excel
Office Script นี้ทำงานบนคลาวด์ ดังนั้นคุณต้องใช้งานผ่าน Excel เวอร์ชันเว็บเพื่อสร้างสคริปต์
ขั้นตอนการใช้ Excel Office Script
1. สร้างไฟล์ Excel
แค่สร้างไฟล์ Excel ว่างๆ ใน OneDrive หรือ SharePoint ของคุณ จากนั้นไปที่แท็บ ‘Automate’ แล้วคลิก ‘New Script’
2. สคริปต์
ตั้งชื่อสคริปต์อะไรก็ได้ที่คุณต้องการ แล้ววางโค้ดนี้ใน Code Editor
function main(workbook: ExcelScript.Workbook, tables: string = "[]") {
const data: { [key: string]: string | number | boolean }[] = JSON.parse(tables);
const sheet = workbook.getActiveWorksheet();
if (data.length === 0) return;
const headers = Object.keys(data[0]);
const headerRange = sheet.getRangeByIndexes(0, 0, 1, headers.length);
headerRange.setValues([headers]);
const dataRangeValues = data.map(item => headers.map(header => item[header]));
const dataRange = sheet.getRangeByIndexes(1, 0, data.length, headers.length);
dataRange.setValues(dataRangeValues);
const lastRow = data.length + 1;
const lastColumn = headers.length;
const tableRange = sheet.getRangeByIndexes(0, 0, lastRow, lastColumn);
sheet.addTable(tableRange, true);
}
บันทึกสคริปต์ แล้วก็เสร็จเรียบร้อย!
3. การทำงานของ Flow
มาดู Flow ที่เราต้องตั้งค่าใน Power Automate แทนที่จะใช้คำสั่ง ‘Add a row into table’ ตอนนี้เราจะใช้คำสั่ง ‘Run script’ แทน
เลือกตำแหน่งของไฟล์ Excel ที่ต้องการส่งออกข้อมูล (หรือจะใช้ dynamic content ก็ได้)
สคริปต์ที่บันทึกไว้ใน OneDrive โดยไม่ผูกติดกับไฟล์ ดังนั้นสามารถทำงานได้กับทุกไฟล์ Excel โดยไม่จำเป็นต้องสร้างสคริปต์ใหม่ทุกครั้ง
พารามิเตอร์สำคัญคือ ‘tables’ ที่จะปรากฏหลังจากเลือกสคริปต์นี้ คุณต้องใส่ข้อมูลในรูปแบบ Array ที่จะเขียนลงใน Excel โดยใช้ฟังก์ชัน string()
ยกตัวอย่าง Array ของผมที่ได้จาก dynamic content
body('Select')
ผมจะเขียนโค้ดแบบนี้
string(body('Select'))
สรุป
- ทดสอบด้วยข้อมูลตัวอย่าง 1,000 รายการ
- วิธีช้าใช้เวลาประมาณ 10 นาที
- วิธี Office Script ใช้เวลาแค่ 7 วินาที
- เร็วกว่า 85 เท่า!
- ไม่ต้องใช้ “Apply to each”
ด้วยวิธีนี้ คุณจะสามารถจัดการข้อมูลจำนวนมากได้อย่างรวดเร็ว ประหยัดเวลาได้เยอะเลย!
ก้าวเข้าสู่ Digital Business
ดูผลิตภัณฑ์ที่เกี่ยวข้องได้ที่นี่
แหล่งที่มา : PAWIT.PW