Excel表格合并手软?M语言自动化办公
一句话核心价值点:
教你用Excel365内置PowerQuery的M语言,把反复复制粘贴的表格合并活儿,变成一键跑批的自动流程,让2026年的你从此告别手软,笑着提前下班。
目录
多表堆叠像搬砖?一招纵向合并
办公室常见场面:每月销售表格式一样,却得分开存,汇总时只能一个个复制粘贴,手都点酸。
用M语言,把同结构表直接摞成一列,省时省力。
let
源 = Excel.CurrentWorkbook(),
筛选表 = Table.SelectRows(源, each Text.StartsWith([Name], "2026销售_")),
合并 = Table.Combine(Table.TransformColumns(筛选表, {"Content", each _})[Content])
in
合并
原理:Table.SelectRows按名字过滤,Table.Combine把多个表串成一张长表,像叠罗汉一样稳。
同结构跨文件?批量收进一张表
每月各门店交来同格式Excel,放不同文件,逐个打开合并太磨人。
M语言能跨文件批量读,像收快递一样自动归位。
let
文件夹 = Folder.Files("D:\2026门店数据\"),
筛选Excel = Table.SelectRows(文件夹, each [Extension] = ".xlsx"),
读取内容 = Table.AddColumn(筛选Excel, "数据", each Excel.Workbook(File.Contents([Folder Path] & [Name])){0}[Data]),
展开数据 = Table.ExpandTableColumn(读取内容, "数据", Table.ColumnNames(读取内容{0}[数据])),
合并 = Table.Combine(展开数据[数据])
in
合并
- • 用Excel.Workbook读每个文件第一个表的数据
- • 最后Table.Combine把所有数据摞起来
原理:Folder.Files扫目录,Excel.Workbook解包文件,Table.ExpandTableColumn保证列结构一致,跨文件合并就像吃自助餐,一盘端走。
列名对不齐?智能对齐再合并
有时表结构差不多,但列顺序或名字差一点,直接合并就错位。
M语言可先统一列名再干活,像给数据穿统一制服。
let
表1= Excel.CurrentWorkbook(){[Name="2026表A"]}[Content],
表2= Excel.CurrentWorkbook(){[Name="2026表B"]}[Content],
改名表2= Table.RenameColumns(表2, {{"销售额", "业绩"}, {"日期 ", "日期"}}),
补列 = Table.AddColumn(改名表2, "备注", each null),
对齐 = Table.SelectColumns(改名表2, Table.ColumnNames(表1)),
合并 = Table.Combine({表1, 对齐})
in
合并
- • Table.SelectColumns按表1的列顺序挑出对应列
原理:改名字、补列、挑列三步,让不同来源表在结构上“说同一种话”,合并不再乱套。
合并后去重?顺手筛掉多余行
合并多表常遇到重复记录,比如同一订单在两个表里都有。
M语言可在合并时直接去重,像安检门只放唯一身份通过。
let
源 = Excel.CurrentWorkbook(),
表集合 = Table.SelectRows(源, each Text.StartsWith([Name], "2026订单_")),
合并 = Table.Combine(Table.TransformColumns(表集合, {"Content", each _})[Content]),
去重 = Table.Distinct(合并, {"订单号"}),
排序 = Table.Sort(去重,{{"日期", Order.Ascending}})
in
排序
- • Table.Distinct按“订单号”去掉重复行
原理:Table.Distinct依据关键列判断唯一性,保证合并结果干净利落,重复数据无处藏身。
动态加新表?自动识别并合并
每月会新增同格式表,手动加路径很烦。
M语言配合参数,让新表自动现身合并名单,像门禁识别老朋友。
let
参数 ="2026_",
源 = Excel.CurrentWorkbook(),
筛选 = Table.SelectRows(源, each Text.StartsWith([Name], 参数)),
合并 = Table.Combine(Table.TransformColumns(筛选, {"Content", each _})[Content])
in
合并
原理:用文本匹配做动态过滤,规则不变,表可无限加,流程始终自动跑。
合并兼清洗?边合边美颜数据
合并过程中顺手把空格、错字、不规范日期清掉,省得二次加工。
let
源 = Excel.CurrentWorkbook(),
表 = Table.SelectRows(源, each Text.StartsWith([Name], "2026客户_")),
合并 = Table.Combine(Table.TransformColumns(表, {"Content", each _})[Content]),
清空格 = Table.TransformColumns(合并, List.Transform(Table.ColumnNames(合并), each {_, each Text.Trim(_)})),
改日期 = Table.TransformColumns(清空格, {{"登记日", each Date.From(Text.PadEnd(Text.Replace(_,"/","-"),10,"0"))}}),
去空行 = Table.SelectRows(改日期, each List.NonNullCount(Record.ToList(_)) > 0)
in
去空行
原理:合并与清洗同步进行,减少来回切换步骤,让数据一来就体面可用。
金句收尾:
- • 方法连成线,线织成面,面盖满场景,就是体系化的力量。
更多干货点我头像进主页,每天更新