Excel表格合并手软?M语言自动化办公
- 2026-09-13 03:11:46
Excel表格合并手软?M语言自动化办公




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
合并• 先抓取当前工作簿所有表 • 挑出名字前缀是“2026销售_”的表 • 把它们的内容抽出来摞一起 • Table.Combine就是纵向合并的神器 • 不管10张还是50张,一次搞定 • 运行完直接生成总表,不用再手动拼
原理: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
合并• 指定文件夹路径,把里面文件清单抓出来 • 只留扩展名是.xlsx的文件 • 用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
合并• 取两张表的内容 • 把表2的列名改成和表1一致 • 缺的列用Table.AddColumn补空值 • 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
排序• 找出所有“2026订单_”开头的表 • 摞成一张大表 • Table.Distinct按“订单号”去掉重复行 • 再加个按日期升序排,方便查看
原理:Table.Distinct依据关键列判断唯一性,保证合并结果干净利落,重复数据无处藏身。
动态加新表?自动识别并合并
每月会新增同格式表,手动加路径很烦。
M语言配合参数,让新表自动现身合并名单,像门禁识别老朋友。
let
参数 ="2026_",
源 = Excel.CurrentWorkbook(),
筛选 = Table.SelectRows(源, each Text.StartsWith([Name], 参数)),
合并 = Table.Combine(Table.TransformColumns(筛选, {"Content", each _})[Content])
in
合并• 设一个参数前缀,比如“2026_” • 每次只挑名字以此开头的表 • 新表只要命名符合规则,自动进入合并流 • 不用改代码,就能适配未来数据增长
原理:用文本匹配做动态过滤,规则不变,表可无限加,流程始终自动跑。
合并兼清洗?边合边美颜数据
合并过程中顺手把空格、错字、不规范日期清掉,省得二次加工。
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
去空行• 合并所有“2026客户_”表 • Text.Trim去掉首尾空格 • 把“登记日”里的斜杠换横杠并补位转标准日期 • 剔除全空的行,保证数据有料
原理:合并与清洗同步进行,减少来回切换步骤,让数据一来就体面可用。
金句收尾:
• 合并表不是体力活,是让机器替你跑腿的艺术。 • 写一次M,换来每月准点下班的底气。 • 把重复当敌人,把自动化当战友,工作自然轻盈。 • 数据能自己排队进来,你就该笑着喝咖啡。 • 方法连成线,线织成面,面盖满场景,就是体系化的力量。
更多干货点我头像进主页,每天更新
体系化视频课程往下看↓



↓↓↓点击“阅读原文”体系化提升
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。