Thep Excel

Folder.Contentsแสดงรายการไฟล์และโฟลเดอร์ทั้งหมดใน folder

Folder.Contents เป็น function สำหรับดึงรายการไฟล์และโฟลเดอร์ทั้งหมดที่อยู่ใน folder path ที่กำหนดไว้ โดยจะคืนค่าเป็น table ที่มีข้อมูล metadata ครบถ้วน เช่น ชื่อไฟล์ วันที่สร้างและแก้ไข ขนาดไฟล์ และ binary content link สำหรับเข้าถึงเนื้อหาภายในไฟล์ เหมาะสำหรับงานที่ต้องการ import ข้อมูลจากหลายไฟล์พร้อมกันในโฟลเดอร์เดียว หรือการวิเคราะห์โครงสร้างไฟล์และคุณสมบัติต่างๆ ก่อนตัดสินใจนำเข้าข้อมูล

fx
=Folder.Contents(path, [options]) as table

ความนิยม8/10
ความยาก3/10
ประโยชน์9/10

อัปเดต 18 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
path text folder path ที่ต้องการดึงรายการไฟล์และโฟลเดอร์ ต้องเป็น absolute path เช่น “C:\\Data\\Files” (Windows) หรือ “/Users/Data/Files” (Mac/Linux)
[options]ไม่บังคับ nullable record null record parameter สำหรับ internal use ไม่แนะนำให้ใช้งานทั่วไป ปล่อยว่างได้

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

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 เฉพาะไฟล์หรือโฟลเดอร์ที่ต้องการได้

How it works

รวมไฟล์ Excel หลายไฟล์จาก folder เดียวกัน

ใช้ Folder.Contents ดึงรายการไฟล์ทั้งหมด แล้ว filter เฉพาะไฟล์ .xlsx ก่อนรวมข้อมูล

ตรวจสอบ file attributes ก่อน import ข้อมูล

ใช้ Folder.Contents ตรวจสอบวันที่แก้ไข ขนาดไฟล์ หรือชื่อไฟล์ เพื่อกรองเฉพาะไฟล์ที่ต้องการนำเข้า

สร้าง file inventory หรือ file catalog

ใช้ Folder.Contents ดึงข้อมูล metadata ของไฟล์ทั้งหมดใน folder เพื่อสร้างรายงานการจัดการไฟล์

Examples

ตัวอย่างที่ 1: ดึงรายการไฟล์และโฟลเดอร์ทั้งหมดจาก folderlet FolderPath = "C:\\Sales2024", AllContents = Folder.Contents(FolderPath) in AllContents

Folder.Contents คืนค่า table ที่มีรายการทั้งหมดใน folder โดย column Name แสดงชื่อไฟล์/โฟลเดอร์ Extension แสดงนามสกุลไฟล์ (folder จะเป็นค่าว่าง) Date modified แสดงวันที่แก้ไขล่าสุด และ Content เป็น binary link สำหรับเข้าถึงข้อมูลภายในไฟล์

ใน Power Query Editor จะเห็นแต่ละ row แสดงรายละเอียดของไฟล์/โฟลเดอร์แยกกัน

fx
let
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)
ตัวอย่างที่ 2: Filter เฉพาะไฟล์ Excel จาก folderlet FolderPath = "C:\\Reports", AllContents = Folder.Contents(FolderPath), ExcelFilesOnly = Table.SelectRows(AllContents, each [Extension] = ".xlsx") in ExcelFi…

หลังจากใช้ Folder.Contents ดึงรายการทั้งหมดแล้ว เราใช้ Table.SelectRows กับ each keyword เพื่อ filter เฉพาะ row ที่มี Extension column = ".xlsx"

เทคนิคนี้มีประโยชน์เมื่อมีไฟล์หลายประเภทใน folder เดียวกัน และต้องการ import เฉพาะ Excel files เท่านั้น สามารถเปลี่ยน condition เป็น [Extension] = ".csv" หรือ Text.Contains([Name], "Sales") เพื่อ filter ตามเงื่อนไขอื่นได้ครับ

fx
let
FolderPath = "C:\\Reports",
AllContents = Folder.Contents(FolderPath),
ExcelFilesOnly = Table.SelectRows(AllContents, each [Extension] = ".xlsx")
in
ExcelFilesOnly

ผลลัพธ์Table ที่มีเฉพาะไฟล์ .xlsx ใน folder C:\Reports
ตัวอย่างที่ 3: Filter ไฟล์ที่แก้ไขภายใน 7 วันล่าสุดlet FolderPath = "C:\\Data", AllContents = Folder.Contents(FolderPath), Today = DateTime.LocalNow(), SevenDaysAgo = Date.AddDays(Date.From(Today), -7), RecentFi…

ตัวอย่างนี้แสดงการใช้ Folder.Contents ร่วมกับ Date functions เพื่อ filter ไฟล์ตามวันที่ โดย DateTime.LocalNow() ดึงวันเวลาปัจจุบัน Date.AddDays(…, -7) คำนวณย้อนหลัง 7 วัน จากนั้นใช้ each [Date modified] >= SevenDaysAgo กรองเฉพาะไฟล์ที่แก้ไขใหม่กว่า 7 วัน

และ [Extension] <> "" ใช้ filter โฟลเดอร์ออก (เพราะโฟลเดอร์มี Extension เป็นค่าว่าง) เหมาะกับการ import เฉพาะไฟล์ใหม่ๆ ครับ

fx
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 วันล่าสุด
ตัวอย่างที่ 4: รวมข้อมูลจากหลาย Excel files ใน folderlet FolderPath = "C:\\MonthlySales", AllContents = Folder.Contents(FolderPath), ExcelFiles = Table.SelectRows(AllContents, each [Extension] = ".xlsx"), ImportFi…

ตัวอย่างขั้นสูงนี้แสดงวิธีรวมข้อมูลจากหลายไฟล์ Excel โดย Folder.Contents ดึงรายการไฟล์ทั้งหมด Table.SelectRows filter เฉพาะ .xlsx Table.AddColumn สร้าง column ใหม่ชื่อ "Data" ที่เก็บผลลัพธ์จาก Excel.Workbook([Content]) ซึ่งอ่านข้อมูลจาก binary content ของแต่ละไฟล์

จากนั้นใช้ Table.ExpandTableColumn ขยาย nested tables ออกมา filter เฉพาะ sheet ชื่อ "Sales" และขยาย columns ที่ต้องการ (Product, Amount) สุดท้าย Table.SelectColumns เลือกเฉพาะ columns ที่จำเป็น

เทคนิคนี้ใช้บ่อยมากในการรวมไฟล์รายเดือนหรือรายสาขา ส่วนตัวผมใช้วิธีนี้ตลอดเลยครับ 😎

fx
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
ตัวอย่างที่ 5: แยกไฟล์และโฟลเดอร์ด้วย Attributes columnlet FolderPath = "C:\\Projects", AllContents = Folder.Contents(FolderPath), FilesOnly = Table.SelectRows(AllContents, each [Extension] ""), FoldersOnly = Table.…

เทคนิคง่ายๆ ในการแยกไฟล์กับโฟลเดอร์ คือการตรวจสอบ Extension column โดยไฟล์จะมีค่า Extension (เช่น ".xlsx", ".csv", ".txt") แต่โฟลเดอร์จะมีค่าว่าง ("")

ดังนั้น [Extension] <> "" จะ filter เฉพาะไฟล์ ส่วน [Extension] = "" จะ filter เฉพาะโฟลเดอร์ หรือสามารถใช้ Record.HasFields([Attributes], "Directory") ตรวจสอบจาก Attributes column ก็ได้ แต่การใช้ Extension นั้นง่ายกว่าและอ่านโค้ดเข้าใจง่ายกว่าครับ

fx
let
FolderPath = "C:\\Projects",
AllContents = Folder.Contents(FolderPath),
FilesOnly = Table.SelectRows(AllContents, each [Extension] <> ""),
FoldersOnly = Table.SelectRows(AllContents, each [Extension] = "")
in
FilesOnly

ผลลัพธ์Table ที่มีเฉพาะไฟล์ (ไม่รวมโฟลเดอร์)

FAQs

Folder.Contents แตกต่างจาก Folder.Files อย่างไร?+

Folder.Contents คืนค่าทั้งไฟล์และโฟลเดอร์ในระดับเดียว (ไม่ลงไปใน subfolder) เหมาะกับการควบคุม folder structure ได้แม่นยำ

ส่วน Folder.Files คืนค่าเฉพาะไฟล์เท่านั้นและค้นหาลงไปใน subfolder ทั้งหมดอัตโนมัติ เหมาะกับการ import ไฟล์ทั้งหมดใน folder tree โดยไม่สนใจ structure ครับ

จะแยกไฟล์กับโฟลเดอร์จาก Folder.Contents ได้อย่างไร?+

วิธีที่ง่ายที่สุดคือใช้ Extension column โดยไฟล์จะมีค่า Extension (เช่น ".xlsx") แต่โฟลเดอร์จะมีค่าว่าง ใช้ Table.SelectRows(…, each [Extension] "") เพื่อ filter เฉพาะไฟล์ หรือ each [Extension] = "" เพื่อ filter เฉพาะโฟลเดอร์

Column Content ใน Folder.Contents ใช้ทำอะไร?+

Content column เป็น binary link ที่ชี้ไปยังเนื้อหาภายในไฟล์ สามารถนำไปใช้กับ functions อื่นๆ เช่น Excel.Workbook([Content]) เพื่ออ่านไฟล์ Excel, Csv.Document([Content]) สำหรับ CSV หรือ Json.Document([Content]) สำหรับ JSON

สะดวกมากครับ ไม่ต้องระบุ path ซ้ำอีก 😎

ทำไม Folder.Contents ถึงมี options parameter แต่ไม่ได้ใช้?+

options parameter เป็น nullable record ที่ Microsoft จองไว้สำหรับ internal use ในอนาคตหรือการใช้งานพิเศษเฉพาะ ผู้ใช้ทั่วไปไม่จำเป็นต้องส่งค่านี้ และควรปล่อยให้เป็น null (ค่า default) ไป Microsoft ไม่ได้ document การใช้งาน options นี้ใน official documentation

สามารถใช้ Folder.Contents กับ relative path ได้ไหม?+

ไม่แนะนำครับ เพราะ Power Query ต้องการ absolute path เสมอเพื่อความชัดเจนและป้องกันข้อผิดพลาด ควรใช้ full path เช่น "C:\\Data\\Files" (Windows) หรือ "/Users/Data/Files" (Mac/Linux)

หากต้องการความยืดหยุ่น สามารถใช้ parameter ใน Power Query เพื่อกำหนด path แบบ dynamic ได้ครับ

จะ filter ไฟล์ตามชื่อหรือวันที่ได้อย่างไร?+

ใช้ Table.SelectRows ร่วมกับ each keyword เช่น each Text.Contains([Name], "Sales") สำหรับ filter ตามชื่อ หรือ each Date.From([Date modified]) >= #date(2024,1,1) สำหรับ filter ตามวันที่ สามารถใช้ logical operators (and, or) รวมหลายเงื่อนไขได้

Folder.Contents รองรับ network path หรือ UNC path ไหม?+

รองรับครับ สามารถใช้ UNC path เช่น "\\\\Server\\Share\\Folder" หรือ mapped network drive เช่น "Z:\\Data" ได้ตามปกติ

แต่ต้องแน่ใจว่า Power Query service (Desktop หรือ Service) มีสิทธิ์เข้าถึง network location นั้นได้นะครับ ไม่งั้นจะ error ทันที 😅

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ Folder.Contents จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้Folder.ContentsAccessing data functions
Accessing data functions (3)
Excel.Workbook

Excel.Workbook อ่าน binary content ของไฟล์ Excel แล้วคืนค่าเป็น table ที่แต่ละ row แทนด้วย worksheet, named range หรือ Excel table โดยมี columns คือ Item (ชื่อ), Kind (ประเภท), Name (ชื่อเต็ม), Data (nested table ของข้อมูลจริง), และ Hidden (boolean) รองรับ useHeaders และ delayTypes เป็น parameters แต่ Microsoft แนะนำให้ใช้ Table.PromoteHeaders แทนเพื่อหลีกเลี่ยงปัญหา culture conversion นอกจากนี้ยังมี InferSheetDimensions option สำหรับแก้ปัญหา metadata ที่ผิดพลาด ใช้ร่วมกับ File.Contents หรือ Web.Contents สำหรับโหลดไฟล์

File.Contents

File.Contents ใช้อ่านข้อมูล binary ของไฟล์จากพาธที่ระบุ เพื่อนำเข้าข้อมูลจากระบบไฟล์ลงในโปรแกรม

Folder.Files

Folder.Files ใช้สำหรับอ่านรายชื่อไฟล์ทั้งหมดในโฟลเดอร์ที่กำหนด รวมถึงโฟลเดอร์ย่อยด้วย คืนค่าเป็น table ที่มีข้อมูลไฟล์เช่น ชื่อ วันที่สร้าง ขนาด และลิงก์เข้าถึงไฟล์

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่