You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Power Query查找替换值 区分两类地址邮编字段

Power Query 双邮编字段拆分方案

最优方案:分组前提前标记字段,从根源避免邮编合并

不要在分组阶段对所有行无差别使用Text.Combine,先给从PDF提取的原始行数据做字段标记,再按标记分组,完全不会出现邮编混同问题:

  • 遍历原始提取表的每一行,识别「注册地址」「经营地址」两个字段的位置
  • 将「注册地址」行之后、下一个非邮编字段之前的邮编行,标记为注册地址邮编
  • 将「经营地址」行之后、下一个非邮编字段之前的邮编行,标记为经营地址邮编
  • 后续分组时按标记的字段名聚合,两个邮编会自动分到独立列

标记步骤参考M代码:

#"新增行索引" = Table.AddIndexColumn(原始提取表, "行号", 0, 1, Int64.Type),
#"标记地址位置" = Table.AddColumn(#"新增行索引", "字段名", each 
    let
        之前的所有字段 = List.FirstN(#"新增行索引"[字段原始名], [行号]),
        最近的地址字段 = List.Last(List.Select(之前的所有字段, each _ = "注册地址" or _ = "经营地址"))
    in
        if [字段原始名] = "邮编" then 最近的地址字段 & "邮编" else [字段原始名]
)

后续直接按「字段名」列分组透视即可得到独立的两个邮编列。

兜底方案:已合并邮编的快速拆分

如果你已经完成分组操作,拿到了两个邮编拼接后的字符串,可以利用中国邮编固定为6位纯数字的规则直接拆分,容错率远高于按固定分隔符拆分:

  1. 先在Power Query里定义通用的6位数字提取自定义函数
  2. 对合并后的邮编列调用函数,固定提取出2个6位数字
  3. 按地址顺序将第一个提取值赋给「注册地址邮编」,第二个赋给「经营地址邮编」

参考实现代码:

// 自定义函数:提取文本中所有6位连续数字
提取6位邮编 = (源文本 as text) as list =>
    let
        正则匹配 = Regex.Matches(源文本, "\d{6}"),
        结果列表 = List.Transform(正则匹配, each _.Value)
    in
        结果列表,
#"拆分邮编" = Table.AddColumn(已分组表, "邮编列表", each 提取6位邮编([合并后的邮编列])),
#"展开注册邮编" = Table.AddColumn(#"拆分邮编", "注册地址邮编", each [邮编列表]{0}?),
#"展开经营邮编" = Table.AddColumn(#"展开注册邮编", "经营地址邮编", each [邮编列表]{1}?),
#"移除临时列" = Table.RemoveColumns(#"展开经营邮编",{"邮编列表"})

批量处理注意事项

  • 批量跑3000个PDF前,先加校验步骤:筛选出提取到的邮编数量不等于2的行,单独人工核对,避免因个别PDF格式错乱导致脏数据
  • 批量逻辑建议把文件遍历、PDF转文本的步骤放在VBA里实现,文本结构化、字段拆分的逻辑全部放在Power Query模板里,比纯VBA写文本处理的维护成本低很多

内容的提问来源于stack exchange,提问作者Nabillah Jizad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:18:14