กำหนดขั้นตอน เช่น Remove Top Rows/Use First Row as Headers,Detect Data Type/ Fill Down / Trim/Split Column/Extract Data/Column From Example และอีกมากมาย ของพวกนี้ช่วยเคลียร์ข้อมูลรกๆ ได้ไวมาก
ใน Power BI: ป้อนข้อมูลพร้อมเข้าระบบ Model ทำ Dashboard ระดับผู้บริหาร
พูดง่ายๆ คือเรียนรอบเดียว คุ้มสองจักรวาล ของสุดยอดโปรแกรมเรื่องสาย Data ในยุคนี้ 💸 ที่สำคัญ หากในอนาคตถ้าจะย้ายจาก Excel ไปใช้ Power BI สามารถ Copy Query ที่เคยทำไว้ใน Excel ไปแปะใน Power BI ได้เลย ไม่ต้องทำใหม่ด้วย ไม่มี Waste! จะมีอะไรคุ้มกว่านี้อีกไหม 5555
3) เป็นประตูสู่ Data Model + DAX
Power Query คือด่านแรกก่อนส่งข้อมูลเข้า Data Model (ทั้งใน Power BI และ Power Pivot ของ Excel) พอเข้า Data Model แล้ว เราจะสรุปทุกอย่างใน Pivot ได้ โดยไม่ต้องสร้างคอลัมน์ช่วย แบบการเขียนสูตรยุคเดิม แล้วใช้ DAX เขียน Measure ที่ซับซ้อนได้ เช่น
บางเรื่องเขียนสูตรแก้ปัญหาได้ แต่บางเรื่องการแก้ปัญหาด้วยสูตรนั้นยากมาก โดยเฉพาะกรณีโครงสร้าง Data ที่เอามารวมนั้นผิดรูปแบบ (เช่นมีการกระจาย Data ออกเป็นหลายคอลัมน์โดยไม่จำเป็น)
จะบอกว่า เราไม่ควรเรียกใช้งานให้ AI ประเภท LLM แบบนี้มาคำนวณเลขเด็ดขาด เพราะผิดได้ง่ายๆ เลย มันเหมาะกับงานด้านข้อมูลด้านข้อความ ด้านภาษามากกว่านะ
ป.ล. AI LLM คือ Large Language Model เค้าเก่งด้านภาษา เหมือนเด็กศิลป์-ภาษา ไม่ใช่เด็กวิทย์-คณิต 😂 ดังนั้นให้เค้าทำงานที่เค้าถนัด คือ ด้านจัดการข้อความ ดีกว่าคำนวณเลข
# ===================================================================
# CONFIGURABLE VARIABLES
# ===================================================================
# Path to your Excel file (can be .xlsx)
$excelFilePath = "D:\Data\SalesReport.xlsx" # แก้ไขเป็น path ไฟล์ .xlsx ของคุณ
# Maximum time to wait in seconds for the refresh to complete
$timeoutSeconds = 600 # 10 นาที (ปรับตามความเหมาะสม)
# ===================================================================
# Create an Excel COM object
$excel = $null
$workbook = $null
try {
Write-Host "Starting Excel automation..."
$excel = New-Object -ComObject Excel.Application
# Make Excel invisible (runs in the background)
$excel.Visible = $false
# Or make it visible for debugging:
# $excel.Visible = $true
# Disable alerts (e.g., save prompts)
$excel.DisplayAlerts = $false
# Open the workbook
Write-Host "Opening workbook: $excelFilePath"
$workbook = $excel.Workbooks.Open($excelFilePath)
# Refresh all data connections
Write-Host "Starting RefreshAll command..."
$workbook.RefreshAll()
# --- Robust Wait Loop (Replaces Start-Sleep) ---
Write-Host "Waiting for queries to complete..."
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
$isRefreshing = $true
while ($isRefreshing) {
# Check if timeout has been reached
if ($stopwatch.Elapsed.TotalSeconds -ge $timeoutSeconds) {
throw "Timeout: Queries did not complete within $timeoutSeconds seconds."
}
# Assume refresh is done, unless we find one that is still running
$isRefreshing = $false
# Loop through all connections to check their status
foreach ($connection in $workbook.Connections) {
if ($connection.Refreshing) {
$isRefreshing = $true
break # Found a refreshing connection, no need to check others in this loop
}
}
# Wait a moment before checking again to avoid pegging the CPU
Start-Sleep -Seconds 1
}
$stopwatch.Stop()
Write-Host ("Queries completed in {0:N2} seconds." -f $stopwatch.Elapsed.TotalSeconds)
# --- End of Wait Loop ---
# Save the workbook (important to keep the refreshed data)
Write-Host "Saving workbook..."
$workbook.Save()
Write-Host "Closing workbook..."
$workbook.Close()
Write-Host "Quitting Excel application..."
$excel.Quit()
}
catch {
# If any error occurs, log it
Write-Error "An error occurred: $($_.Exception.Message)"
}
finally {
# This block ALWAYS runs, ensuring Excel is closed and memory is released
# even if an error occurred. This prevents lingering Excel processes.
if ($workbook -ne $null) { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($workbook) | Out-Null }
if ($excel -ne $null) { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null }
Remove-Variable excel, workbook -ErrorAction SilentlyContinue
Write-Host "Cleanup complete. Excel process should be terminated."
}
Write-Host "Process finished."
ปกติเวลาเราคุยกับ ChatGPT เราจะไม่เห็น System Prompt หรอก และบางทีเป็นความลับด้วยซ้ำว่าในระบบตั้งค่าอะไรไว้
Sub-Node : Chat Model
เลือกว่าจะเอามันสมองของ AI Model เจ้าไหน รุ่นไหน มาใช้
เลือกโมเดล AI ที่คุณต้องการ ซึ่งจริงๆ แล้ว เราสามารถเลือกใช้ Model ได้มากมาย เช่น OpenAI, Gemini, Claude, Deepseek
หรือเลือกใช้ผ่าน OpenRouter ซึ่งจ่าย API ที่เดียว สามารถใช้ Model อะไรก็ได้
ผมแนะนำให้ใช้ AI Model ที่ถูกที่สุดที่ยังทำงานนั้นไหว คือลองตัวถูกไปก่อน ถ้าไม่ไหว ค่อยขยับไปใช้ตัวที่เก่งขึ้น (แนวโน้มคือ AI จะเก่งขึ้น และ ถูกลงเรื่อยๆ)
Sub-Node : Memory
ให้ AI Agent จดจำการโต้ตอบก่อนหน้าได้ ตามจำนวน Context Windows ที่ระบุ ซึ่งปกติแล้ว Model AI จะไม่ได้มีการจำสิ่งที่คุยกับเราโดยอัตโนนมัติหรอก (ไม่ใช่ว่าคุยไปแล้วมันเรียนรู้ไปนะ)
ไอ้การที่เราคุยกับ AI อย่าง ChatGPT แล้วมันจำ Chat History ได้ก็เป็นเพราะ Open AI โปรแกรมใส่ Chat History ย้อนหลังเข้าไปเป็น Memory ให้เราแล้วโดยอัตโนมัตินั่นเอง แต่ใน n8n เราก็ต้องทำเอง
Sub-Node : Tools
เพิ่มความสามารถให้ AI Agent ซึ่งช่วยให้ AI Agent สามารถดำเนินการตามคำสั่งได้ มากกว่าแค่การพูดโต้ตอบ ซึ่งใน n8n มีเครื่องมือให้เลือกมากมาย เช่น:
ดึงข้อมูลจากฐานข้อมูล เช่น Google Sheets หรือ MySQL
2. เอา AI Agent หลายๆ ตัวทำงานประสานงานกันผ่าน Tool ที่เรียกใช้ Sub Workflow
วิธีที่ยืดหยุ่นกว่าคือ แยกการทำงานออกเป็น Sub-Workflow เพื่อแบ่งการออกแบบเป็นแบบ Modular คือเป็นส่วนๆ ที่ออกแบบมาให้ทำงานประกอบกันภายหลังง่ายขึ้น โดยทำให้ตัว AI Agent เองทำงานภายใต้ Sub Workflow เพื่อรอให้ AI Agent ตัวอื่นส่งข้อมูลหรือส่งคำสั่งมาให้ตัวเองทำงาน
🧩 องค์ประกอบหลักของวิธีการ AI Agent ประสานงานกันได้แบบยืดหยุ่นผ่าน Sub-Workflow มีดังนี้
1. Trigger: ให้ AI Agent ทำงานเมื่อถูกเรียกจาก Workflow อื่น
ใน Sub Workflow เราจะต้องเริ่มต้นด้วย Trigger Node ที่ชื่อว่า When Executed by Another Workflow เสมอ เพื่อให้ AI Agent ตัวนี้สามารถ “ถูกเรียกใช้งานจาก Workflow อื่นได้” เป็นหัวใจสำคัญของการสร้างระบบทำงานแบบ Modular เช่น AI ตัวหนึ่งสรุปข้อมูล แล้วส่งให้ AI ตัวถัดไปวิเคราะห์ต่อ และยังสามารถ Reuse Workflow ได้ง่ายกว่าการใช้แบบสายพานต่อกันไปธรรมดา
ซึ่งเราสามารถกดหนด Field ที่จะรับจาก Workflow อื่นได้หลาย Field ตามใจชอบเลย
2. Chat Model: เลือกสมองให้ AI
ตรง AI Chat Model AI Agent ต้องมี “สมอง” เพื่อใช้คิดวิเคราะห์ เราสามารถเลือก Model ที่เหมาะสมกับงาน ซึ่งเทคนิคคือ ถ้าอยากให้ตัวสมองนี้ยืดหยุ่นด้วย แนะนำให้เลือก Chat Model เป็น OpenRouter เพราะมันสามารถเลือกใช้ Model ได้หลายเจ้า ภายใต้ API เดียว
Tips : เราสามารถอ้างอิงชื่อ Model ด้วยสูตรได้นะ แปลว่า ถ้างานยากหน่อยให้ใช้ Model ฉลาดๆ ถ้างานง่าย ใช้ Model ราคาถูกได้ หรือใช้เปลี่ยนเจ้าผู้พัฒนา AI ก็ได้
3. Memory: ให้ AI จำเรื่องราวได้
อย่างที่บอกไปว่าโดยปกติแล้ว AI ไม่มีความจำ ถ้าอยากให้จำได้ เราต้องใส่ Memory ให้มัน เช่น:
นอกจากนี้ใน Node AI Agent เรายังสามารถเปิดการใช้งาน Structured Output เพื่อให้ AI ให้ผลลัพธ์ออกมาในรูปแบบ JSON ที่เรากำหนดไว้เท่านั้น เหมาะกับการควบคุมผลลัพธ์ให้ทำงานต่อได้แบบไม่มีปัญหา โดยการเปิดโหมด Require Specific Output Format ได้
AI จะถูกสั่งให้ตอบในรูปแบบ JSON หรือรูปแบบเฉพาะอื่น ๆ ที่เรากำหนดไว้ ทำให้การส่งต่อข้อมูลต่อใน Workflow ง่ายและแม่นยำขึ้น
ตัวอย่าง: ถ้าเราทำระบบจองคิว AI อาจส่งผลลัพธ์แบบนี้กลับมา:
อย่าลืมกำหนด User Prompt กับ System Prompt ตามความเหมาะสม โดยเฉพาะอย่าลืมบอก AI ด้วยว่าปัจจุบันคือวันที่เท่าไหร่ เวลาเท่าไหร่ เพราะ AI มันไม่รู้นะ
เราจะบอกโดยใช้สูตรนี้มาช่วยนะ
{{ $now }}
System Prompt รวมๆ ที่ควรใส่ก็ประมาณนี้
## Role & Personality
You are น้องฟ้า, personal AI assistant for พี่ระ. You are 27, cheerful and skilled in Excel, AI automation, and programming.
## General Rules
- Don’t hallucinate, It's okay to say “I don’t know.” Be honest and avoid guessing when unsure.
- Answer in Thai but keep technical terms in English
- Clarify if unsure
- now: {{ $now }}
เทคนิคอื่นๆ :
ลองใช้ Few-shot Prompting เพื่อให้ AI เห็นตัวอย่างที่ดี ที่เราต้องการ
แบ่งเนื้อหาเป็นหัวข้อย่อยด้วย ### หรือ Markdown
ใช้ JSON Structure Output หรือ เพื่อคุม Output จาก AI ได้
7. Node ที่ต่อจาก AI เช่น Split / Action บางอย่าง / Edit Field / Aggregate [Optional]
หลังจากที่เราได้ผลลัพธ์จาก AI แล้ว บางครั้งข้อมูลที่ได้อาจยังไม่ใช่หน้าตาที่เราต้องการใช้งานทันที เราสามารถใช้ Node ต่อจาก AI เพื่อจัดการข้อมูลให้เหมาะสมกับเป้าหมายของเราได้เลย เช่น:
🔀 Split Out – ถ้าผลลัพธ์จาก AI หรือ Node ก่อนหน้า เป็น array หรือมีหลายชิ้นข้อมูลในหนึ่ง item เราสามารถใช้ Split Out เพื่อ “แยกข้อมูลออกมาเป็นหลาย item” ได้ ตัวอย่างเช่น เรามี array ของ stock list หรือข้อความยาวที่มีหัวข้อย่อยหลายหัวข้อ ก็สามารถใช้ Split ให้แต่ละหัวข้อกลายเป็น item แยกกันได้ทันที
ใน Power Query นั้นมี Trim แต่ว่ามันดันไม่ตัดเว้นวรรคตรงกลาง วิธีแก้ปัญหาที่ค่อนข้างดีคือสร้างฟังก์ชันขึ้นมาให้มันทำแบบเดียวกับ Excel ซะเลย
คุณสามารถเอา M code นี้ไปใช้เป็นฟังก์ชันของตัวเองได้ เช่น ตั้งชื่อว่า ThepTrim ก็ได้
(OriginalText as text,optional TrimChar as text) as text=>
let
// MCode created by ThepExcel.com
TrimCharFix = if TrimChar is null then " " else TrimChar,
SplitStep = Text.Split(OriginalText,TrimCharFix),
RemoveBlankStep = List.Select(SplitStep, each _ <> ""),
CombineStep = Text.Combine(RemoveBlankStep,TrimCharFix)
in
CombineStep
let
Source = (OriginalText as text,optional TrimChar as text) as text=>
let
TrimCharFix = if TrimChar is null then " " else TrimChar,
SplitStep = Text.Split(OriginalText,TrimCharFix),
RemoveBlankStep = List.Select(SplitStep, each _ <> ""),
CombineStep = Text.Combine(RemoveBlankStep,TrimCharFix)
in
CombineStep
in
Source
(OriginalText as text,optional TrimChar as text) as text=>
let
TrimCharFix = if TrimChar is null then " " else TrimChar,
SplitStep = Text.Split(OriginalText,TrimCharFix),
RemoveBlankStep = List.Select(SplitStep, each _ <> ""),
CombineStep = Text.Combine(RemoveBlankStep,TrimCharFix)
in
CombineStep
ซึ่งเราจะคำนวณพวก Early Start, Early Finish, Late Start, Late Finish ของแต่ละงานแบบอัตโนมัติครับ บอกไว้ก่อนว่าสูตรในบทความนี้ค่อนข้างซับซ้อน กรุณาทำใจก่อนดู 555
เริ่มลงมือทำ
ข้อมูลดิบใน Excel
เราบันทึกข้อมูลลงไปประมาณนี้
Activity Duration งานก่อนหน้า
A 10
B 12 A,D
C 9 B
D 5
E 7 D,G
F 6 E
G 3
H 4 G
I 6 H
Early Finish (EF)
= ESตัวนั้น + Duration -1
= [@ES]+[@Duration]-1
ซึ่ง EF ก่อนหน้า มันอาจมีหลายตัวก็ได้ เช่น กิจกรรม B มีก่อนหน้าคือ A กับ D ซึ่งเราต้องทำการ Lookup ค่า EF ของ A กับ D ออกมา แล้วหาค่า MAX ซึ่งเราทำแบบนี้ได้
Max EF ก่อนหน้า
=MAX(XLOOKUP(TEXTSPLIT([@งานก่อนหน้า],","),[Activity],[EF]))
ที่นี้จะเห็นว่างานที่จะเสร็จเป็นอันสุดท้ายคือ C ซึ่งจะไปจบวันที่ 31 ไอ้เส้นทางที่จบที่ C นี่แหละ คือ Critical Path ล่ะ
แล้วผมจะส่ง mail invite Live ผ่าน Zoom การอบรม Excel Power Query + Power Pivot ฉบับรวบรัด 2 ชั่วโมง ไปให้ทาง Email ที่ส่ง Slip มาครับ
ณ ตอนนี้มียอดบริจาคเท่านี้แล้วครับ
ยอดบริจาคล่าสุด
เทคนิคการดึงข้อมูล
ผมใช้ n8n ดึงรูป Slip จาก Email แล้วส่งให้ AI อ่านตัวเลขในรูป slip แล้วเอามากรอกใน Google Sheets ให้ จากนั้นเอาไปทำ Dashboard ใน Power BI อีกทีครับ (Refresh เพื่อดึงสดจาก Google Sheets ได้)
Power Pivot สามารถ สร้างความสัมพันธ์ระหว่างตาราง โดยไม่ต้องใช้ VLOOKUP
ซึ่งมีข้อดีหลายอย่าง เช่น
ดึงข้อมูลจากหลายตารางมารวมกันได้อัตโนมัติ
ลดขนาดไฟล์ เพราะไม่ต้อง Copy ข้อมูลซ้ำไปมา
คำนวณเร็วขึ้น เพราะใช้ Data Model แทนการคำนวณแบบ Cell-by-Cell
🔴 3. การคำนวณขั้นสูง (เช่น CALCULATE, Running Total, YTD, MTD) ทำไม่ได้ใน Pivot Table ธรรมดา ถ้าเราใช้ Pivot Table ปกติ จะเจอปัญหา แม้ว่ามันจะมีฟีเจอร์ชื่อว่า Calculated Field มาให้เราสร้าง Field คำนวณขึ้นมาเองได้ แต่ว่าการคำนวณสรุปที่ใช้ได้ถูกจำกัดแค่การ SUM ซึ่งต่างจากเวลาเราใช้ Power Pivot ที่สามารถเขียน Measure ที่สามารถใช้สูตร DAX อะไรก็ได้
นอกจากนี้ใน PivotTable ปกติ แม้จะมี Show Value as มาช่วยคำนวณที่คล้ายกับว่าจะทำ Running Total ได้ แต่จริงๆ แล้วมีข้อจำกัดเยอะ เพราะเครื่องมือไม่ได้เข้าใจความเป็น ปี ไตรมาศ เดือน จริงๆ ซึ่งต่างจาก Time Intelligence ของ DAX ซึ่งสามารถคำนวณเกี่ยวกับเวลาได้อย่างถูกต้องจริงๆ
ตัวอย่างการใช้สูตร DAXใน Measure ของ Power Pivot
Total Sales = SUM(Sales[Amount])
Target Sales = SUM(SalesTarget[TargetAmount])
Sales vs Target % = [Total Sales] / [Target Sales]
' AutoRefresh.vbs - Improved version
On Error Resume Next
Dim objExcel, objWorkbook
Set objExcel = CreateObject("Excel.Application")
If Err.Number <> 0 Then
WScript.Echo "Error: ไม่สามารถสร้าง Excel application ได้"
WScript.Quit 1
End If
objExcel.Visible = False
Set objWorkbook = objExcel.Workbooks.Open("C:\Reports\DailyReport.xlsm")
If Err.Number <> 0 Then
WScript.Echo "Error: ไม่สามารถเปิดไฟล์ DailyReport.xlsm ได้"
objExcel.Quit
WScript.Quit 1
End If
' เรียก Macro AutoRefreshAndClose
objExcel.Run "AutoRefreshAndClose"
If Err.Number <> 0 Then
WScript.Echo "Error: ไม่สามารถเรียกใช้ Macro AutoRefreshAndClose ได้"
objWorkbook.Close False
objExcel.Quit
WScript.Quit 1
End If
' ปิด Workbook (ถ้า Macro ยังไม่ได้ปิด Excel)
objWorkbook.Close True
objExcel.Quit
Set objWorkbook = Nothing
Set objExcel = Nothing
On Error GoTo 0
On Error Resume Next
Dim objExcel, objWorkbook
Set objExcel = CreateObject("Excel.Application")
If Err.Number <> 0 Then
WScript.Echo "Error: ไม่สามารถสร้าง Excel application ได้"
WScript.Quit 1
End If
objExcel.Visible = False
Set objWorkbook = objExcel.Workbooks.Open("C:\ReportsReady\DailyReport.xlsm")
If Err.Number <> 0 Then
WScript.Echo "Error: ไม่สามารถเปิดไฟล์ DailyReport.xlsm ได้"
objExcel.Quit
WScript.Quit 1
End If
' เรียก Macro SendReport
objExcel.Run "SendReport"
If Err.Number <> 0 Then
WScript.Echo "Error: ไม่สามารถเรียกใช้ Macro SendReport ได้"
objWorkbook.Close False
objExcel.Quit
WScript.Quit 1
End If
' ปิด Workbook และ Excel
objWorkbook.Close True
objExcel.Quit
Set objWorkbook = Nothing
Set objExcel = Nothing
On Error GoTo 0
📌 บันทึกไฟล์เป็น"C:\Scripts\AutoSendEmail.vbs"
โค้ด VBA (SendReport) ใน Excel
📌 VBA มีหน้าที่: ✔ สร้าง Email ใน MS Outlook ✔ แนบไฟล์รายงาน ✔ ส่งอีเมลอัตโนมัติ
Sub SendReport()
On Error GoTo ErrHandler
Dim OutApp As Object
Dim OutMail As Object
Dim AttachmentPath As String
AttachmentPath = "C:\ReportsReady\DailyReport.xlsm"
' ตรวจสอบว่าไฟล์แนบมีอยู่จริงหรือไม่
If Dir(AttachmentPath) = "" Then
MsgBox "ไม่พบไฟล์แนบ: " & AttachmentPath, vbExclamation, "SendReport Error"
Exit Sub
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "your_team@example.com"
.CC = "manager@example.com"
.Subject = "Daily Report"
.Body = "แนบไฟล์รายงานประจำวันที่ " & Format(Date, "dd/mm/yyyy") & " ตามที่อัปเดตไว้"
.Attachments.Add AttachmentPath
.Send ' หรือเปลี่ยนเป็น .Display เพื่อเช็คก่อนส่ง
End With
' ล้างตัวแปร
Set OutMail = Nothing
Set OutApp = Nothing
Exit Sub
ErrHandler:
MsgBox "SendReport Error " & Err.Number & ": " & Err.Description, vbCritical, "Error"
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
หลายคนน่าจะใช้ Power Query (ทั้งใน Excel และ Power BI) ดึงข้อมูลจากไฟล์ต่างๆ ทั้งไฟล์ Excel / CSV หรือแม้กระทั่งดึงหลายๆ ไฟล์จาก Folder ในเครื่องตัวเองมารวมกันได้แล้ว… แต่อาจเริ่มอยากพัฒนาไปอีกขึ้น คือ การเอาแหล่ง Data Source ไปไว้บน Online เลย
เพราะถ้าเราดึงจากแหล่งออนไลน์ได้ มันดีกว่าการดึงจากเครื่องตรงที่สามารถทำการ Schedule Refresh ให้ Power BI ได้ รวมถึงแหล่งข้อมูลเอาวางไว้ตรงกลาง ให้เพื่อนๆ มาดึงไฟล์ไปใช้ได้
ว่าแต่การดึงข้อมูลจากแหล่งออนไลน์ด้วย Power Query มันทำยังไงกันแน่? เพราะวิธีมันไม่ได้ตรงไปตรงมานัก
คนที่เคยพยายาลอง Get Data จากบริการ Online ของ Microsoft เองจะพบว่ามันไม่ง่ายเลย บอกเลยว่า จริงๆ แล้วการดึงจากระบบ Microsoft เผลอๆ อาจยากกว่าดึงจากบริการของ Google ซะอย่างงั้น 555
การดึงข้อมูลจาก Google Sheets ที่ง่ายที่สุดคือให้เรา Publish ข้อมูลบน Google Sheets ก่อน โดยไปที่ File- > Share -> Publish to web (ไม่ใช่กด share link ปกตินะ)
การใช้ Publish to web ข้อเสีย คือถ้าใครก็ตามที่มี Link URL ก็จะโหลดไฟล์ไปได้เลย
แล้วกดเลือกว่าจะ Publish เป็นอะไร ซึ่งตัวที่ผมขอแนะนำคือเป็น Microsoft Excel (.xlsx) เพราะเผื่อว่ามีข้อมูลหลายชีท จะได้ไม่มีปัญหา
จากนั้นเราก็จะได้ Link มาซึ่งสามารถเอา URL ที่ได้นี้ไปใช้ใน Power Query โดยเลือก Get Data from Web แล้วแปะ URL แล้ว ok ได้เลย
แล้วผลลัพธ์ก็จะเหมือนกับการ Get Data from Excel ปกติ คือเลือก Sheet เลือก Table ได้เลย
ดึงข้อมูลจาก Google Form
อันนี้แค่เราทำการกดไปที่ Response ของ Google Form แล้วกด Link to Sheets ก็สามารถทำต่อตามหัวข้อตอนที่ดึงจาก Google Sheets ได้เลย
ดึงข้อมูลจาก One Drive Business
สำหรับอันนี้ วิธีทำ คือให้เข้า one drive for business จนเจอไฟล์ที่ต้องการ แล้วต้องกด … แล้วเลือกเปิดไฟล์ใน Desktop App ก่อน เพื่อให้ได้ File Path มา
แล้วกดไปที่ File -> Info -> Copy Path (ไม่ใช่ local นะ)
ซึ่งการใช้ API นั้นจริงๆ ค่อนข้างยืดหยุ่นมาก แต่ก็ใช้ความสามารถทางเทคนิคสูงหน่อย อย่างไรก็ตามในยุคนี้เราใช้ AI มาช่วยได้ด้วย ไว้ผมจะเขียนบทความใหม่ให้อีกทีนะครับ
ถ้าเราลองเปลี่ยนประเภท AI Agent เป็น Conversational Agent ก็จะสามารถคุยโดยมีความทรงจำได้แล้ว (โดยในที่นี้ไม่มีการใช้ Tools ใดๆ)
เพิ่มความสามารถของ AI ด้วย Tools
AI Agent สามารถใช้งานร่วมกับ Tools ที่จะช่วยทำให้ AI สามารถตอบสนองได้อย่างมีประสิทธิภาพ และทำงานได้ซับซ้อนมากขึ้น โดยแต่ละ Tool มีจุดเด่นที่แตกต่างกันดังนี้:
Calculator: ช่วยให้ AI คำนวณที่ซับซ้อนได้แม่นยำยิ่งขึ้น เหมาะสำหรับการตอบคำถามเชิงตัวเลข
SerpAPI: ใช้ค้นหาข้อมูลใหม่ๆ จาก Google ทำให้ AI ตอบคำถามที่เกี่ยวข้องกับข่าวสารปัจจุบันได้
Wikipedia Tool: ดึงข้อมูลความรู้ทั่วไปจาก Wikipedia โดยไม่ต้องใช้ API ทำให้ใช้งานสะดวก
Code Tool: ใช้รันโค้ด Python ซึ่งทำให้ AI รู้จักเวลาท้องถิ่นหรือตรวจสอบข้อมูลตามเงื่อนไขเฉพาะที่กำหนด
HTTP Request Tool: ส่งและรับข้อมูลจาก API ภายนอก เพื่อเพิ่มขอบเขตการเชื่อมต่อกับแหล่งข้อมูลอื่นๆ ได้
Vector Store Tool: เป็นเครื่องมือที่เชื่อมต่อกับฐานข้อมูลที่ออกแบบมาโดยเฉพาะเพื่อรองรับ AI ในการค้นหาข้อมูลที่มีความซับซ้อนและเชิงลึก โดย Vector Store จะจัดเก็บข้อมูลแบบ “Embedding” ซึ่งเหมาะสำหรับการจัดการข้อมูลที่มีความคล้ายคลึงกัน
Tools อีกอันที่ดีและใช้ง่ายมาก คือ Wikipedia แค่ต่อ Tool ตัวนี้เข้าไปเราก็ได้ความรู้มหาศาลจาก Wikipedia มาเป็นเครื่องมือ ซึ่งอันนี้ไม่ต้องระบุ API อะไรเลยด้วย ใช้ง่ายมากๆ
Code Tool
เครื่องมือนี้มีความสามารถที่จะให้ AI ใช้เพื่อรัน Code ที่เรากำหนดเพื่อแก้ไขปัญหาบางอย่าง ที่ใช้บ่อยคือ Code ที่จะทำให้ AI รู้ว่าตอนนี้มันวันที่เท่าไหร่ เวลาเท่าไหร่แล้ว
Control Flow ใน n8n ช่วยให้คุณกำหนดทิศทางการทำงานของ Workflow ได้ตามเงื่อนไขหรือสถานการณ์ที่กำหนด เช่น การแยกเส้นทางตามเงื่อนไขต่าง ๆ การรวมข้อมูลจากหลายแหล่ง การจัดการกับการวนลูป และการเรียกใช้งาน Sub-workflow การใช้ Control Flow ที่ดีจะทำให้คุณสามารถสร้าง Automation ที่ซับซ้อนและยืดหยุ่นได้อย่างมีประสิทธิภาพ
เพื่อความสะดวกในการเรียนรู้ เราจะใช้ Mockup Data ที่มีมาให้สำเร็จรูปใน n8n เพื่อประกอบการสอนบทความนี้ ทุกคนจะได้ทำตามได้ง่าย ๆ โดยไม่ต้องเตรียม Data จากที่อื่นให้ยุ่งยาก เราสามารถดึง Mockup Data มาจากโหนด Customer Datastore (n8n training) ได้เลย
โดยเลือก option Get All People จะได้ลูกค้ามา 5 คนที่มีมาให้สำเร็จรูปใน n8nในการประกอบการสอนบทความนี้นะครับ ทุกคนจะได้ทำตามได้โดยไม่ต้องไปเอา Data มาจากที่อื่นให้ยุ่งยาก
การสรุปข้อมูลใน n8n สามารถทำได้ง่าย เช่น การสรุปยอดขายต่อ Order ID ซึ่งคล้ายกับการใช้ Pivot Table ใน Excel หรือการ Group By ใน Power Query ทำให้ชาว Excel เข้าใจได้ไม่ยาก
ในโลกของการทำงานแบบอัตโนมัติ (Automation) การเชื่อมต่อแอปพลิเคชันและระบบออนไลน์ต่างๆ ผ่าน API กลายเป็นสิ่งจำเป็นมากขึ้นเรื่อยๆ ไม่ว่าจะเป็นการส่งข้อมูลข้ามแอป ตรวจสอบสถานะ หรือดึงข้อมูลเพื่อประมวลผล หลายๆ บริการ เช่น Gmail, Google Sheets, หรือ OpenAI ต่างก็มี API ที่เปิดให้เราสามารถเข้าถึงและใช้งานได้อย่างง่ายดาย
ในตอนที่แล้ว เราได้เรียนรู้เกี่ยวกับการติดตั้งและการเริ่มต้นใช้งาน n8n ซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถสร้าง Workflow Automation ได้โดยไม่ต้องเขียนโค้ดเลย (No-Code) และยังมีฟีเจอร์เด่นในการเชื่อมต่อกับแอปพลิเคชันต่างๆ ผ่าน API ด้วย ในตอนที่สองนี้ เราจะพาคุณเข้าสู่หัวใจหลักของการทำงานกับ API และวิธีการตั้งค่าการเชื่อมต่อกับแอปยอดนิยม เช่น Google Drive, Gmail, Google Sheets, และ Line ผ่าน n8n อย่างละเอียด
นอกจากนี้เรายังจะสาธิตการสร้าง Workflow อัตโนมัติที่ใช้ API แบบง่ายๆ ที่จะช่วยให้คุณแจ้งเตือนการอัปโหลดไฟล์ใหม่ใน Google Drive ผ่าน Line ได้ ซึ่งการสร้าง Workflow ที่เชื่อมโยงหลายแอปพลิเคชันนี้ไม่เพียงแต่จะช่วยให้การทำงานของคุณเป็นระบบมากขึ้น แต่ยังประหยัดเวลาการทำงานแบบซ้ำซ้อนอีกด้วย
พร้อมที่จะเรียนรู้วิธีการเชื่อมต่อ API และสร้าง Automation แบบเต็มรูปแบบไปกับ n8n แล้วหรือยัง? ถ้าพร้อมแล้ว ไปกันเลยครับ!
API คืออะไร?
API หรือ Application Programming Interface เป็นชุดคำสั่งที่ช่วยให้แอปพลิเคชันหรือระบบต่างๆ สามารถสื่อสารและทำงานร่วมกันได้ โดยไม่ต้องให้ผู้ใช้มองเห็นกระบวนการเบื้องหลังที่ซับซ้อน API ทำหน้าที่เป็น “สะพาน” เชื่อมต่อระหว่างโปรแกรมเพื่อดึง ส่ง หรือจัดการข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพ
การใช้ API เป็นฟีเจอร์สำคัญที่ทำให้ n8n สามารถเชื่อมต่อกับบริการออนไลน์ต่างๆ ได้ ไม่ว่าจะเป็นแอปพลิเคชันยอดนิยมอย่าง Google Drive, Gmail, Google Sheets, Open AI, Line ที่มี Node สำเร็จรูปให้ใช้งานใน n8n ทำให้การตั้งค่าและใช้งาน API เป็นเรื่องง่าย
ในการเชื่อมต่อกับ API ส่วนใหญ่ สิ่งที่ขาดไม่ได้เลยคือ API Key ซึ่งทำหน้าที่คล้ายรหัสผ่านเพื่อยืนยันตัวตนและสิทธิ์การเข้าถึง API ของเรา โดยเราจะต้องสร้าง API Key จากบริการที่ต้องการเชื่อมต่อ จากนั้นนำ API Key ที่ได้รับมาใส่ใน n8n เพื่อให้สามารถดึงข้อมูลหรือส่งคำขอไปยัง API ได้
การขอรหัส API Key
ก่อนอื่นเราต้องสร้าง API Key จากบริการที่เราต้องการเชื่อมต่อ ซึ่งขั้นตอนจะแตกต่างกันไปในแต่ละบริการ (ความยากง่ายต่างกัน) เช่น สำหรับ Google Drive เราสามารถรับ API Key ได้จาก Google Cloud Console แต่สำหรับ OpenAI เราจะต้องสร้าง API Key จาก OpenAI Dashboard เป็นต้น
สมมติว่า ผมอยากจะให้มีระบบอัตโนมัติที่สามารถแจ้งเตือนว่า มีการ Upload ไฟล์ใหม่เข้ามาใน Folder ของ Google Drive ที่กำหนดเรียบร้อยแล้ว โดยสามารถแจ้งเตือนเราผ่านทาง Line ได้ภายใน 1 นาทีที่มีการวางไฟล์
ดังนั้นเราจะต้องมีการเชื่อมต่อ API กับ Google Drive และ API ของ Line ให้ได้ ซึ่งมาดูวิธีการเชื่อมต่อทีละตัวกันครับ
เชื่อมต่อกับ Google Drive
เราจะเริ่มจากเริ่มต้น Flow ด้วย Node ที่ชื่อว่า Google Drive Trigger ซึ่งมีความสามารถในการ Run Flow อัตโนมัติ เมื่อเกิดเหตุการณืบางอย่างใน Google Drive
เราสามารถอ่าน Docs เพื่อดูรายละเอียดการตั้งค่าเพื่อเชื่อมต่อ API ไปยัง Google Drive โดยใช้ OAuth2 single service ซึ่งปลอดภัยและทำได้ง่ายกว่าวิธีอื่น
การต่อ API กับ Google ครั้งแรกอาจจะยุ่งยากหน่อยนะ แต่ว่ามันจำเป็นจริงๆ และวิธีนี้ใช้ได้กับ Google Service น่าจะเกือบทุกตัวเลยล่ะ ดังนั้นทำเถอะ 😆 (ทำครั้งเดียว ครั้งต่อไปที่จะต่อผ่านบริการเดิมก็ Login ง่ายๆได้เลย)
ขั้นตอนการสร้าง API / Client ID และ Client Secret กับ Google
การเชื่อมต่อกับ Line Notify เพื่อตั้งค่าการแจ้งเตือนเมื่อมีไฟล์ใหม่ถูกอัปโหลดใน Google Drive สามารถทำได้ง่ายๆ เช่นกัน โดยเข้าไปลงทะเบียนบริการที่ Line Notify และกรอกรายละเอียดตามที่ต้องการ
ป.ล. ในที่นี้เราจะใช้ Line Notify ไปก่อนนะครับ (แม้บริการนี้จะใช้ได้ถึงแค่ 31 มีค. 2025 ก็ตาม ไว้ในอนาคตค่อยมาสอนวิธีเชื่อม Line Messaging API อีกที)
โดยเราสามารถออกแบบการทำงาน Automation โดยเลือกเชื่อมต่อ Node ที่มีอยู่มากมาย เชื่อมต่อกับแอปพลิเคชันต่างๆ ได้หลากหลาย เช่น Gmail, Google Sheets, Line, Notion, หรือแม้กระทั่งการเชื่อมต่อกับ AI Model เช่น OpenAI GPT, Claude หรือ API ของเราเอง
ทักษะที่คุณได้จาก Power BI สามารถนำกลับมาใช้ใน Excel ได้! ไม่ว่าจะเป็น Power Query, Data Model หรือ DAX ก็มีใน Excel รุ่นใหม่ๆ ด้วยนะ (ถ้าคุณใช้ Excel เวอร์ชันเก่า ยิ่งควรมาลองใช้ Power BI)
เริ่มได้ฟรี ไม่ต้องรอบริษัท
โหลด Power BI Desktop ฟรี! ใช้งานได้เต็มที่โดยไม่ต้อง Login ด้วยนะ
คุณเคยรู้สึกผิดหวังกับภาพ AI ที่ Gen ออกมาแล้วบางส่วนดูไม่สมจริงหรือไม่? หรือเคยพยายามแก้ไขเฉพาะบางส่วนของภาพแต่กลับทำให้ทั้งภาพเสียหายหรือไม่? ถ้าคุณกำลังเจอปัญหาเหล่านี้ คุณไม่ได้อยู่คนเดียว!
การ Gen รูป AI นั้นเป็นศิลปะที่ต้องอาศัยทั้งความคิดสร้างสรรค์และเทคนิค แม้ว่า ComfyUI จะเป็นเครื่องมือที่ทรงพลัง แต่ก็มีข้อจำกัดที่ทำให้หลายคนต้องพบกับความท้าทาย:
realistic editorial photo of beautiful sexy white skin thai woman net idol 18 yrs old in white short sleeve shirt and black short fit mini skirt, writing text "Ai Angel Gallery" on blackboard in the classroom, soft light
realistic photo of A beautiful Asian woman cosplay as angel with glowing white wings, flowing black hair, and a radiant face. smile and showing hi-five hand. standing in a celestial heaven with soft clouds
flux1-dev
flux1-schnell
ภาพสาวไหว้พระ
A beautiful young Asian woman 20 yrs old with black hair, kneeling in prayer inside a serene Thai temple. her hands gently clasped, surrounded by golden Buddha statues, ornate temple decor, and soft, ambient light streaming through the windows, creating a peaceful and sacred atmosphere
flux1-dev
flux1-schnell
ภาพสาวทำมือรูปหัวใจ
A beautiful Thai girl 20 yrs, wearing a traditional Thai dress in in front of thai temple making heart shape hand
flux1-dev
flux1-schnell
ภาพการ์ตูน
An anime-style illustration beautiful Thai girl 20 yrs, wearing a traditional Thai dress in vibrant colors in front of thai temple
flux1-dev
flux1-schnell
ภาพกลุ่ม
A group of beautiful white skin sexy Thai korean women 20 yrs old in sexy shorts, happily taking a group photo together
flux1-dev
flux1-schnell
ภาพสาววันตรุษจีน
instagram profile picture of very very beautiful Thai girl, Chinese New Year style very deep spaghetti strap,
analog film photo, faded film, desaturated, (35mm photo, grainy:1.3), vignette, vintage, Kodachrome, Lomography, stained, highly detailed, found footage. sharp background details. 8K, best quality, (very detailed face:1.15)
flux1-dev
flux1-schnell
ภาพ sexy
beautiful white skin sexy Thai korean women 20 yrs nude on the bed in bed room
flux1-dev
flux1-schnell
ภาพอื่นๆ ที่ทำเล่น
flux1-dev
flux1-schnell
ลองเล่นกับ Steps ที่เพิ่มขึ้น
ผมลองใช้ FLUX.1 Dev เมื่อใช้ Steps น้อยๆ ในการ Gen ภาพ Prompt นี้
A beautiful Thai girl 20 yrs, wearing a traditional Thai dress in in front of thai temple making heart shape hand
ทำงานร่วมกับ Power BI ได้อย่างธรรมชาติ! 🔗 เชื่อมต่อกับ Power BI ได้ราวกับมีสายใยเวทมนตร์เชื่อมโยงกัน! ช่วยให้การเตรียมข้อมูลก่อนนำไปวิเคราะห์ใน Power BI เป็นเรื่องง่ายสุดๆ
5.1 หลักการโดยทั่วไปใน Power Query เราจะพยายามจัดการหัวตารางให้มันถูกต้องก่อน ค่อยทำอย่างอื่นต่อ (ซึ่งตรงนี้จะจุกจิกนิดนึง แต่ถ้าผ่านไปได้ ต่อไปจะง่ายแล้ว)
ซึ่งเราจะพบว่าข้อมูลในคอลัมน์แรกนั้นไม่จำเป็น เราจะเลือกคอลัมน์แรกแล้วกดปุ่ม Del บน Keyboard แล้วมันก็จะหายไปแบบง่ายๆ ซึ่งจะพบว่ามี Step Remove Columns โผล่มาที่ด้านขวา และมีคาถา M Code ถูกบันทึกไว้ด้วยว่าให้ลบคอลัมน์ที่ชื่อว่า Column1
การจัดการหัวตารางมันจะมีคำสั่ง Use First Rows as Headers ซึ่งสามารถทำให้ข้อมูลบรรทัดแรกเป็นหัวตารางได้ แต่ สินค้า, Order Date,… ดันอยู่แถวที่ 3 ไม่ใช่แถวแรก
แต่ละ Class เมื่อ Level Up ถึงจุดหนึ่ง จะสามารถเลือก Feat ได้ (ขึ้นกับ Class Level ไม่ใช่ Character Level)เพื่อกำหนดแนวทางพัฒนาความสามารถของตัวละครได้หลายแบบ (ทุก Class มี Feat. ให้เลือกแบบเดียวกัน)
โดยที่แต่ละ Class จะมีจุดที่เลือก Feat. ได้หลายรอบ
ทุก Class สามารถเลือก Feats ได้ตอน Level 4, 8 และ 12
วิธีแกะสูตรนี้ถ้าเรายังใช้ Excel เก่า ก็อาจต้องใช้เครื่องมือ Formula -> Evaluate Formula ซึ่งจะแสดงขั้นตอนการทำงานทีละขั้นตอน ซึ่งอาจไม่สะดวกนักเพราะเราไม่สามารถตรวจเช็คแต่ละส่วนได้ตามใจ
ฟังก์ชัน MATCH ใช้เพื่อหาตำแหน่งของค่า 0 ในอาร์เรย์ที่ได้จาก COUNTIFS ซึ่งหมายถึงตำแหน่งที่ค่าจากคอลัมน์ B ยังไม่ปรากฏในคอลัมน์ C ด้านบนของเซลล์ปัจจุบัน
ฟังก์ชัน IFERROR ใช้เพื่อจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นจากการใช้ MATCH ซึ่งหากไม่มีค่าที่ตรงกับเงื่อนไขเลย (เช่น ทุกค่าจากคอลัมน์ B ปรากฏในคอลัมน์ C แล้ว) ฟังก์ชัน MATCH จะคืนค่า #N/A ซึ่งจะทำให้ INDEX เกิดข้อผิดพลาด
ถ้าแกะสูตรแบบละเอียดเอง ผมแนะนำให้ใช้ Excel Labs: Advanced Formula Environment ช่วยจัดระเบียบสูตรให้อ่านง่ายขึ้น
การจัดแบบนี้เห็นชัดว่า c, d คือการประกาศตัวแปร และใช้ HSTACK ตั้ง List วันที่โปรแกรมไว้เรียบร้อย แล้วตามด้วยการใช้ INDEX ดึงข้อมูลที่เหมาะสมออกจาก C2:D7
ลองถาม AI ดูว่า ThepExcel GPT ว่ามันจะช่วยเราได้ไหม?
มาเลยเพื่อนๆ ดูที่สูตรนี้ AI บอกว่าฟังก์ชัน LET มีขั้นตอนในการจัดการข้อมูลในตาราง
มาดูแต่ละส่วนในสูตรทีละหน่อย
ทำไมมันถึงซับซ้อน?
หลังจากทำงานเสร็จ สูตรนี้จะคืนค่าสำหรับตารางที่มีวันที่ในคอลัมน์ A และวันที่ใกล้เคียงใน C2 ร่วมกับ Vendor
บางที AI เจอบางส่วนที่เข้าใจยาก ให้ AI ลองอธิบายเพิ่มดูดีไหม?
ได้ครับ มาดูอย่างละเอียด:
ส่วนนี้เหมาะสำหรับหาวันที่ใกล้เคียงที่สุดในช่วง d (Delivery Date) และหาค่าเฉลี่ยจากตำแหน่งสองตำแหน่งที่ใกล้เคียงที่สุด:
สรุป:
ส่วนนี้ของสูตรทำให้หาตำแหน่งที่ใกล้ที่สุดในวันที่จากช่วง d โดยดูค่าเฉลี่ยตำแหน่งสองจุดที่ใกล้เคียงที่สุด ลดความเบี่ยงเบนและหาได้อย่างง่ายดายตามวันที่จัดส่ง
แต่อย่าลืมว่า AI เป็นเครื่องมือเสริมที่ช่วยให้เราเข้าใจได้เร็วขึ้น ต้องซักถามและพิจารณาผลลัพธ์ด้วยตนเอง เพื่อเอาสิ่งที่ได้ไปประยุกต์ใช้และต่อยอดต่อได้อย่างเต็มประสิทธิภาพครับ
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Duration
Description
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.