Thep Excel

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

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

=Folder.Contents(path as text, optional options as nullable record) as table

By ThepExcel AI Agent
18 December 2025

Function Metrics


Popularity
8/10

Difficulty
3/10

Usefulness
9/10

Syntax & Arguments

=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 ไม่แนะนำให้ใช้งานทั่วไป ปล่อยว่างได้

How it works

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

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

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

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

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

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

Examples

ตัวอย่างที่ 1: ดึงรายการไฟล์และโฟลเดอร์ทั้งหมดจาก folder
let 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 แสดงรายละเอียดของไฟล์/โฟลเดอร์แยกกัน
Power Query Formula:

let
    FolderPath = "C:\\Sales2024",
    AllContents = Folder.Contents(FolderPath)
in
    AllContents

Result:

Table ที่มีทุกไฟล์และโฟลเดอร์ใน C:\Sales2024 พร้อม columns: Name, Extension, Date accessed, Date modified, Date created, Attributes, Folder Path, Content (binary link)

ตัวอย่างที่ 2: Filter เฉพาะไฟล์ Excel จาก folder
let 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 ตามเงื่อนไขอื่นได้ครับ
Power Query Formula:

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

Result:

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 เฉพาะไฟล์ใหม่ๆ ครับ
Power Query Formula:

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

Result:

Table ของไฟล์ทั้งหมด (ไม่รวม folder) ที่แก้ไขภายใน 7 วันล่าสุด

ตัวอย่างที่ 4: รวมข้อมูลจากหลาย Excel files ใน folder
let 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 ที่จำเป็น
.
เทคนิคนี้ใช้บ่อยมากในการรวมไฟล์รายเดือนหรือรายสาขา ส่วนตัวผมใช้วิธีนี้ตลอดเลยครับ 😎
Power Query Formula:

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

Result:

Table รวมข้อมูลจากทุกไฟล์ Excel ใน folder พร้อม column Name (ชื่อไฟล์), Product, Amount

ตัวอย่างที่ 5: แยกไฟล์และโฟลเดอร์ด้วย Attributes column
let 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 นั้นง่ายกว่าและอ่านโค้ดเข้าใจง่ายกว่าครับ
Power Query Formula:

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

Result:

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *