ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 458|回复: 10

[求助] 数据清洗

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-11 11:24 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 Office 于 2024-9-11 11:25 编辑

附件中的PDF可以清洗整理成如表格所示吗?
2024-09-11_11-24-27.jpg

Book1.zip

106.18 KB, 下载次数: 21

TA的精华主题

TA的得分主题

发表于 2024-9-11 16:09 | 显示全部楼层
  1. let
  2.       源 = Pdf.Tables(
  3.             File.Contents("C:\Users\飞飞\Desktop\dzfp_20240702132347.pdf"),
  4.             [Implementation = "1.3"]
  5.       ),
  6.       Page001 = 源{[Id = "Page001"]}[Data],
  7.       Num = List.Select(
  8.             Record.ToList(Table.First(Page001)),
  9.             each _
  10.                   <> null
  11.                   and List.AllTrue(
  12.                         List.Transform(Text.ToList(_), (x) => List.Contains({"0" .. "9"}, x))
  13.                   )
  14.       ){0},
  15.       Date = Text.AfterDelimiter(
  16.             List.Select(
  17.                   List.Select(
  18.                         Table.ToRows(Page001),
  19.                         each List.AnyTrue(List.Transform(_, (x) => Text.Contains(x, "开票日期")))
  20.                   ){0},
  21.                   (x) => x <> null
  22.             ){0},
  23.             ":"
  24.       ),
  25.       Tab = Table.Skip(Page001, each [Column2] <> "项目名称"),
  26.       提升的标题 = Table.PromoteHeaders(Tab, [PromoteAllScalars = true]),
  27.       合并的列 = Table.CombineColumns(
  28.             提升的标题,
  29.             {"Column1", "项目名称", "Column3", "Column4", "Column5", "Column6"},
  30.             Combiner.CombineTextByDelimiter("", QuoteStyle.None),
  31.             "项目名称.1"
  32.       ),
  33.       合并的列1 = Table.CombineColumns(
  34.             合并的列,
  35.             {"单", "位"},
  36.             Combiner.CombineTextByDelimiter("", QuoteStyle.None),
  37.             "单位"
  38.       ),
  39.       合并的列2 = Table.CombineColumns(
  40.             Table.TransformColumnTypes(合并的列1, {{"量", type text}}, "zh-CN"),
  41.             {"数", "量"},
  42.             Combiner.CombineTextByDelimiter("", QuoteStyle.None),
  43.             "数量"
  44.       ),
  45.       合并的列3 = Table.CombineColumns(
  46.             Table.TransformColumnTypes(合并的列2, {{"Column14", type text}, {"价", type text}}, "zh-CN"),
  47.             {"Column12", "单_1", "Column14", "价"},
  48.             Combiner.CombineTextByDelimiter("", QuoteStyle.None),
  49.             "单价"
  50.       ),
  51.       合并的列4 = Table.CombineColumns(
  52.             合并的列3,
  53.             {"金", "额"},
  54.             Combiner.CombineTextByDelimiter("", QuoteStyle.None),
  55.             "金额"
  56.       ),
  57.       合并的列5 = Table.CombineColumns(
  58.             Table.TransformColumnTypes(
  59.                   合并的列4,
  60.                   {{"Column18", type text}, {"Column19", type text}, {"税率/征收率", type text}},
  61.                   "zh-CN"
  62.             ),
  63.             {"Column18", "Column19", "税率/征收率"},
  64.             Combiner.CombineTextByDelimiter("", QuoteStyle.None),
  65.             "税率"
  66.       ),
  67.       合并的列6 = Table.CombineColumns(
  68.             Table.TransformColumnTypes(合并的列5, {{"税", type text}}, "zh-CN"),
  69.             {"Column21", "税", "额_2"},
  70.             Combiner.CombineTextByDelimiter("", QuoteStyle.None),
  71.             "税额"
  72.       ),
  73.       自定义2 = Table.FirstN(合并的列6, each [项目名称.1] <> "合计"),
  74.       自定义3 = Table.Group(
  75.             自定义2,
  76.             "项目名称.1",
  77.             {
  78.                   "Data",
  79.                   each [
  80.                         a = Table.ToColumns(_),
  81.                         b = {Num} & {Date} & List.Transform(a, (x) => Text.Combine(x, "")),
  82.                         c = {"发票号码"} & {"开票日期"} & Table.ColumnNames(_),
  83.                         d = Table.FromRows({b}, c)
  84.                   ][d]
  85.             },
  86.             0,
  87.             (x, y) => Number.From(Text.Start(y, 1) = "*")
  88.       ),
  89.       自定义4 = Table.Combine(自定义3[Data])
  90. in
  91.       自定义4
复制代码


捕获.JPG

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-11 16:13 | 显示全部楼层
let
      源 = Pdf.Tables(
            File.Contents("C:\Users\飞飞\Desktop\dzfp_20240702132347.pdf"),
            [Implementation = "1.3"]
      ),
      Page001 = 源{[Id = "Page001"]}[Data],
      Num = List.Select(
            Record.ToList(Table.First(Page001)),
            each _
                  <> null
                  and List.AllTrue(
                        List.Transform(Text.ToList(_), (x) => List.Contains({"0" .. "9"}, x))
                  )
      ){0},
      Date = Text.AfterDelimiter(
            List.Select(
                  List.Select(
                        Table.ToRows(Page001),
                        each List.AnyTrue(List.Transform(_, (x) => Text.Contains(x, "开票日期")))
                  ){0},
                  (x) => x <> null
            ){0},
            ":"
      ),
      Tab = Table.Skip(Page001, each [Column2] <> "项目名称"),
      提升的标题 = Table.PromoteHeaders(Tab, [PromoteAllScalars = true]),
      合并的列 = Table.CombineColumns(
            提升的标题,
            {"Column1", "项目名称", "Column3", "Column4", "Column5", "Column6"},
            Combiner.CombineTextByDelimiter("", QuoteStyle.None),
            "项目名称.1"
      ),
      合并的列1 = Table.CombineColumns(
            合并的列,
            {"单", "位"},
            Combiner.CombineTextByDelimiter("", QuoteStyle.None),
            "单位"
      ),
      合并的列2 = Table.CombineColumns(
            Table.TransformColumnTypes(合并的列1, {{"量", type text}}, "zh-CN"),
            {"数", "量"},
            Combiner.CombineTextByDelimiter("", QuoteStyle.None),
            "数量"
      ),
      合并的列3 = Table.CombineColumns(
            Table.TransformColumnTypes(合并的列2, {{"Column14", type text}, {"价", type text}}, "zh-CN"),
            {"Column12", "单_1", "Column14", "价"},
            Combiner.CombineTextByDelimiter("", QuoteStyle.None),
            "单价"
      ),
      合并的列4 = Table.CombineColumns(
            合并的列3,
            {"金", "额"},
            Combiner.CombineTextByDelimiter("", QuoteStyle.None),
            "金额"
      ),
      合并的列5 = Table.CombineColumns(
            Table.TransformColumnTypes(
                  合并的列4,
                  {{"Column18", type text}, {"Column19", type text}, {"税率/征收率", type text}},
                  "zh-CN"
            ),
            {"Column18", "Column19", "税率/征收率"},
            Combiner.CombineTextByDelimiter("", QuoteStyle.None),
            "税率"
      ),
      合并的列6 = Table.CombineColumns(
            Table.TransformColumnTypes(合并的列5, {{"税", type text}}, "zh-CN"),
            {"Column21", "税", "额_2"},
            Combiner.CombineTextByDelimiter("", QuoteStyle.None),
            "税额"
      ),
      自定义2 = Table.FirstN(合并的列6, each [项目名称.1] <> "合计"),
      自定义3 = Table.Group(
            自定义2,
            "项目名称.1",
            {
                  "Data",
                  each [
                        a = Table.ToColumns(_),
                        b = {Num} & {Date} & List.Transform(a, (x) => Text.Combine(x, "")),
                        c = {"发票号码"} & {"开票日期"} & Table.ColumnNames(_),
                        d = Table.FromRows({b}, c)
                  ][d]
            },
            0,
            (x, y) => Number.From(Text.Start(y, 1) = "*")
      ),
      自定义4 = Table.Combine(自定义3[Data])
in
      自定义4

捕获.JPG

TA的精华主题

TA的得分主题

发表于 2024-9-11 16:17 | 显示全部楼层
代码要审核。。。。。。。。。。。。。。。



捕获.JPG

TA的精华主题

TA的得分主题

发表于 2024-9-11 23:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个解读出来好多坑,有些规格型号的末尾跨行的,跑到项目名称去了.最后一行的项目名称第三行,却把合计两字也给并进去了.变成和合计数值那些同一行.

TA的精华主题

TA的得分主题

发表于 2024-9-12 00:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-12 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

能否发文件学习一下

TA的精华主题

TA的得分主题

发表于 2024-9-12 10:59 | 显示全部楼层
00JTR00 发表于 2024-9-12 10:37
能否发文件学习一下

觉得这个文件不具备代表性哈,不规范,坑点多,每个坑点就要一段代码洗掉,换个新的PDF文件,又要重写,比手工录还麻烦。

TA的精华主题

TA的得分主题

发表于 2024-9-12 11:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jiffy92010 发表于 2024-9-12 10:59
觉得这个文件不具备代表性哈,不规范,坑点多,每个坑点就要一段代码洗掉,换个新的PDF文件,又要重写, ...

没关系,我对比下调整的代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-12 11:27 | 显示全部楼层
果然有大神现身。@jiffy92010 可否分享一下你的方法?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 15:46 , Processed in 0.054134 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表