ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 从txt导入的数据库文档如何通过PQ拆分到不同列

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-16 17:53 | 显示全部楼层 |阅读模式
在网站上拉下来的数据是txt格式的,都集中在一列里面。数据格式如下, 每一个的信息都是由8行来显示的:

2QUEENS
STALL 15 4F WELLCOME PLAZA 2410-2432 TAFT LIBERTAD PASAY CITY
Tel No/s :  8347191/ 09778831222   
Email Address :  crewing@2Qmaritime.com
Website :  N/A
Official Representative : JAIME MARTIN U PABALAN JR
Status : Valid License
License Validity : 7/21/2016 to 7/21/2020


现在我需要将这个字段拆分成如下的8列数,该如何用PQ来拆分到1行里?
Name
Address
Tel No/s
Email Address
Website
Official Representative
Status
License Validity


Agency lists.rar

7.41 KB, 下载次数: 13

源数据和目标excel文件

TA的精华主题

TA的得分主题

发表于 2019-4-16 22:59 | 显示全部楼层
你好
我提供一个思路
假设你已经导入了文件,那么这个文件就是一个一列八行的数据,那么怎么拆分呢?首先你的第一行name和add是没有标题的,而其他石有冒号分割的,那么就先插入一列并且是一个这个数据永远不可能用到的符号,比如{之类的,然后合并到原来那列中。然后再拆分列,第一先根据{这个符号拆分,然后再拆分一次使用冒号拆分,现在你有了三列了,再把第一第二列合并内容,并且把{符号替换成null。那么你就完成了标题和内容的拆分,然后可以利用转置方法把行变成列,这样数据就变成两行了,一行是标题,一行是内容。最后把第一行变成header就可以了。这些操作都是不用编程的。
那么后面,假设你有很多行这种数据都读取了,那么你就要用到小技巧,先把所有数据插入列,都编号采用index,得到了1.....n的数字,然后除以8(因为没8行是一个数据),然后去小数位变成整数,这样就把你的数据分类了。属于一个数据的都是一个整数。之后,利用这列再采用透视的功能(不聚合)就可以了(得到了第一行是整数的table),最后去掉第一行,再转置即可。
你可以先做一下,我帮你看看文件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-17 00:51 | 显示全部楼层
linxiaoyang1987 发表于 2019-4-16 22:59
你好
我提供一个思路
假设你已经导入了文件,那么这个文件就是一个一列八行的数据,那么怎么拆分呢?首先 ...

哥,有点烧脑。原谅我看了一半就已经晕了。

TA的精华主题

TA的得分主题

发表于 2019-4-17 08:58 | 显示全部楼层
wangjianwx 发表于 2019-4-17 00:51
哥,有点烧脑。原谅我看了一半就已经晕了。

e,你现在看得懂M语言吗?

TA的精华主题

TA的得分主题

发表于 2019-4-17 09:26 | 显示全部楼层
  1. let
  2.     Source = Csv.Document(File.Contents("txt文件存放路径"),[Delimiter="|"]),
  3.     Custom1 = Table.TransformColumns(Table.Combine(List.Transform(Table.Split(Source,9),Table.Transpose)),{},each List.Last(Text.Split(_,":"))),
  4.     Custom2 = Table.FromColumns(Table.ToColumns(Custom1),{"Name","Address","Tel No/s","Email Address","Website","Official Representative","Status","License Validty","x"}),
  5.     Custom3 = Table.RemoveColumns(Custom2,"x")
  6. in
  7.     Custom3
复制代码

TA的精华主题

TA的得分主题

发表于 2019-4-17 09:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
方法很多,不唯一。    除最后2步需简单修改公式,其他点点菜单就行了。

let
    源 = Csv.Document(File.Contents("C:\Users\Administrator\Downloads\agency lists.txt"),[Delimiter=":", Columns=2, Encoding=936, QuoteStyle=QuoteStyle.None]),
    更改类型 = Table.TransformColumnTypes(源,{{"Column1", type text}, {"Column2", type text}}),
    筛选的行 = Table.SelectRows(更改类型, each ([Column1] <> "")),
    已添加索引 = Table.AddIndexColumn(筛选的行, "索引", 0, 1),
    插入的整除 = Table.AddColumn(已添加索引, "整除", each Number.IntegerDivide([索引], 8), Int64.Type),
    插入的取模 = Table.AddColumn(插入的整除, "取模", each Number.Mod([索引], 8), type number),
    已添加条件列 = Table.AddColumn(插入的取模, "field", each if [取模] = 0 then "Name" else if [取模] = 1 then "Address" else [Column1]),
    已添加条件列1 = Table.AddColumn(已添加条件列, "value", each if [取模] = 0 then [Column1] else if [取模] = 1 then [Column1] else [Column2]),
    删除的其他列 = Table.SelectColumns(已添加条件列1,{"整除", "field", "value"}),
    分组的行 = Table.Group(删除的其他列, {"整除"}, {{"table", each #table(_[field],{_[value]})}}),
    自定义1 = Table.Combine(分组的行[table])
in
    自定义1

TA的精华主题

TA的得分主题

发表于 2019-4-17 10:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 libo5563 于 2019-4-17 10:09 编辑

贴上GIF 不知为何不放动画,所以放压缩文件了,如果第一步删除的那些数据也要的话,就把第2列到最后列合并成一列 其他都一样做法

222222222.rar

1.05 MB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2019-4-17 13:45 | 显示全部楼层
详情见附件!

111111.zip

16.97 KB, 下载次数: 5

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-17 16:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
libo5563 发表于 2019-4-17 10:08
贴上GIF 不知为何不放动画,所以放压缩文件了,如果第一步删除的那些数据也要的话,就把第2列到最后列合并 ...

非常感谢这个GIF文档!在这个操作步骤的指引下,拓展了我对Power Query整理数据的思路。原来Power Query的功能这么强大!

又跟您学了一招!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-17 16:46 | 显示全部楼层

感谢感谢!用这个文件我把原来的那个txt文件替换进行了操作。很神奇的是速度比较慢,Excel竟然提醒当时的运算文件达到了2G的大小!最终出来的结果是3000多行的数据。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-13 14:39 , Processed in 0.039450 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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