Folder.Contents เป็น function สำหรับดึงรายการไฟล์และโฟลเดอร์ทั้งหมดที่อยู่ใน folder path ที่กำหนดไว้ โดยจะคืนค่าเป็น table ที่มีข้อมูล metadata ครบถ้วน เช่น ชื่อไฟล์ วันที่สร้างและแก้ไข ขนาดไฟล์ และ binary content link สำหรับเข้าถึงเนื้อหาภายในไฟล์ เหมาะสำหรับงานที่ต้องการ import ข้อมูลจากหลายไฟล์พร้อมกันในโฟลเดอร์เดียว หรือการวิเคราะห์โครงสร้างไฟล์และคุณสมบัติต่างๆ ก่อนตัดสินใจนำเข้าข้อมูล
=Folder.Contents(path as text, optional options as nullable record) as table
=Folder.Contents(path as text, optional options as nullable record) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| path | text | Yes | folder path ที่ต้องการดึงรายการไฟล์และโฟลเดอร์ ต้องเป็น absolute path เช่น “C:\\Data\\Files” (Windows) หรือ “/Users/Data/Files” (Mac/Linux) | |
| options | nullable record | Optional | null | record parameter สำหรับ internal use ไม่แนะนำให้ใช้งานทั่วไป ปล่อยว่างได้ |
ใช้ Folder.Contents ดึงรายการไฟล์ทั้งหมด แล้ว filter เฉพาะไฟล์ .xlsx ก่อนรวมข้อมูล
ใช้ Folder.Contents ตรวจสอบวันที่แก้ไข ขนาดไฟล์ หรือชื่อไฟล์ เพื่อกรองเฉพาะไฟล์ที่ต้องการนำเข้า
ใช้ Folder.Contents ดึงข้อมูล metadata ของไฟล์ทั้งหมดใน folder เพื่อสร้างรายงานการจัดการไฟล์
let FolderPath = "C:\\Sales2024", AllContents = Folder.Contents(FolderPath) in AllContentslet
FolderPath = "C:\\Sales2024",
AllContents = Folder.Contents(FolderPath)
in
AllContents
Table ที่มีทุกไฟล์และโฟลเดอร์ใน C:\Sales2024 พร้อม columns: Name, Extension, Date accessed, Date modified, Date created, Attributes, Folder Path, Content (binary link)
let FolderPath = "C:\\Reports", AllContents = Folder.Contents(FolderPath), ExcelFilesOnly = Table.SelectRows(AllContents, each [Extension] = ".xlsx") in ExcelFi…let
FolderPath = "C:\\Reports",
AllContents = Folder.Contents(FolderPath),
ExcelFilesOnly = Table.SelectRows(AllContents, each [Extension] = ".xlsx")
in
ExcelFilesOnly
Table ที่มีเฉพาะไฟล์ .xlsx ใน folder C:\Reports
let FolderPath = "C:\\Data", AllContents = Folder.Contents(FolderPath), Today = DateTime.LocalNow(), SevenDaysAgo = Date.AddDays(Date.From(Today), -7), RecentFi…let
FolderPath = "C:\\Data",
AllContents = Folder.Contents(FolderPath),
Today = DateTime.LocalNow(),
SevenDaysAgo = Date.AddDays(Date.From(Today), -7),
RecentFiles = Table.SelectRows(AllContents, each Date.From([Date modified]) >= SevenDaysAgo and [Extension] <> "")
in
RecentFiles
Table ของไฟล์ทั้งหมด (ไม่รวม folder) ที่แก้ไขภายใน 7 วันล่าสุด
let FolderPath = "C:\\MonthlySales", AllContents = Folder.Contents(FolderPath), ExcelFiles = Table.SelectRows(AllContents, each [Extension] = ".xlsx"), ImportFi…let
FolderPath = "C:\\MonthlySales",
AllContents = Folder.Contents(FolderPath),
ExcelFiles = Table.SelectRows(AllContents, each [Extension] = ".xlsx"),
ImportFiles = Table.AddColumn(ExcelFiles, "Data", each Excel.Workbook([Content])),
ExpandTables = Table.ExpandTableColumn(ImportFiles, "Data", {"Name", "Data"}, {"SheetName", "SheetData"}),
FilterSheet = Table.SelectRows(ExpandTables, each [SheetName] = "Sales"),
ExpandData = Table.ExpandTableColumn(FilterSheet, "SheetData", {"Product", "Amount"}, {"Product", "Amount"}),
FinalData = Table.SelectColumns(ExpandData, {"Name", "Product", "Amount"})
in
FinalData
Table รวมข้อมูลจากทุกไฟล์ Excel ใน folder พร้อม column Name (ชื่อไฟล์), Product, Amount
let FolderPath = "C:\\Projects", AllContents = Folder.Contents(FolderPath), FilesOnly = Table.SelectRows(AllContents, each [Extension] ""), FoldersOnly = Table.…let
FolderPath = "C:\\Projects",
AllContents = Folder.Contents(FolderPath),
FilesOnly = Table.SelectRows(AllContents, each [Extension] <> ""),
FoldersOnly = Table.SelectRows(AllContents, each [Extension] = "")
in
FilesOnly
Table ที่มีเฉพาะไฟล์ (ไม่รวมโฟลเดอร์)
Folder.Contents คืนค่าทั้งไฟล์และโฟลเดอร์ในระดับเดียว (ไม่ลงไปใน subfolder) เหมาะกับการควบคุม folder structure ได้แม่นยำ
.
ส่วน Folder.Files คืนค่าเฉพาะไฟล์เท่านั้นและค้นหาลงไปใน subfolder ทั้งหมดอัตโนมัติ เหมาะกับการ import ไฟล์ทั้งหมดใน folder tree โดยไม่สนใจ structure ครับ
วิธีที่ง่ายที่สุดคือใช้ Extension column โดยไฟล์จะมีค่า Extension (เช่น “.xlsx”) แต่โฟลเดอร์จะมีค่าว่าง ใช้ Table.SelectRows(…, each [Extension] “”) เพื่อ filter เฉพาะไฟล์ หรือ each [Extension] = “” เพื่อ filter เฉพาะโฟลเดอร์
Content column เป็น binary link ที่ชี้ไปยังเนื้อหาภายในไฟล์ สามารถนำไปใช้กับ functions อื่นๆ เช่น Excel.Workbook([Content]) เพื่ออ่านไฟล์ Excel, Csv.Document([Content]) สำหรับ CSV หรือ Json.Document([Content]) สำหรับ JSON
.
สะดวกมากครับ ไม่ต้องระบุ path ซ้ำอีก 😎
options parameter เป็น nullable record ที่ Microsoft จองไว้สำหรับ internal use ในอนาคตหรือการใช้งานพิเศษเฉพาะ ผู้ใช้ทั่วไปไม่จำเป็นต้องส่งค่านี้ และควรปล่อยให้เป็น null (ค่า default) ไป Microsoft ไม่ได้ document การใช้งาน options นี้ใน official documentation
ไม่แนะนำครับ เพราะ Power Query ต้องการ absolute path เสมอเพื่อความชัดเจนและป้องกันข้อผิดพลาด ควรใช้ full path เช่น “C:\\Data\\Files” (Windows) หรือ “/Users/Data/Files” (Mac/Linux)
.
หากต้องการความยืดหยุ่น สามารถใช้ parameter ใน Power Query เพื่อกำหนด path แบบ dynamic ได้ครับ
ใช้ Table.SelectRows ร่วมกับ each keyword เช่น each Text.Contains([Name], “Sales”) สำหรับ filter ตามชื่อ หรือ each Date.From([Date modified]) >= #date(2024,1,1) สำหรับ filter ตามวันที่ สามารถใช้ logical operators (and, or) รวมหลายเงื่อนไขได้
รองรับครับ สามารถใช้ UNC path เช่น “\\\\Server\\Share\\Folder” หรือ mapped network drive เช่น “Z:\\Data” ได้ตามปกติ
.
แต่ต้องแน่ใจว่า Power Query service (Desktop หรือ Service) มีสิทธิ์เข้าถึง network location นั้นได้นะครับ ไม่งั้นจะ error ทันที 😅
Folder.Contents เป็น M function ที่ใช้สำหรับดึงรายการไฟล์และโฟลเดอร์ทั้งหมดที่อยู่ภายใน folder path ที่ระบุ โดยจะคืนค่าเป็น table ที่มีทั้งข้อมูล metadata (ชื่อไฟล์ วันที่แก้ไข ขนาด ฯลฯ) และ link สำหรับเข้าถึง content ของแต่ละไฟล์
.
ฟังก์ชันนี้มีประโยชน์อย่างมากเมื่อต้องการ import ข้อมูลจากหลายไฟล์ในโฟลเดอร์เดียวกัน หรือต้องการวิเคราะห์ file structure และ attributes ของไฟล์ต่างๆ ก่อนนำเข้าข้อมูล
ความแตกต่างระหว่าง Folder.Contents และ Folder.Files คือ Folder.Contents จะคืนค่าทั้ง ไฟล์และโฟลเดอร์ ที่อยู่ใน path ระดับเดียว (ไม่รวม subfolder) ในขณะที่ Folder.Files จะคืนค่าเฉพาะ ไฟล์เท่านั้น และจะค้นหาใน subfolder ทั้งหมดด้วย
.
การใช้ Folder.Contents จึงเหมาะกับการควบคุม folder structure ได้แม่นยำกว่า และสามารถนำไปใช้กับ Table.SelectRows เพื่อ filter เฉพาะไฟล์หรือโฟลเดอร์ที่ต้องการได้