Excel 2016 将重复行转换为列
Excel 2016 Convert repeating rows to columns
我在一列中有以下数据:
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:19901/1
:60F:C110717EUR1333,58
:61:1107160718D12,75N426NONREF
:86:BEA NR:5FLM01 16.07.11/15.09 OLENBERG EXPL. BURG,PAS018
:62F:C110718EUR1320,83
-
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:20001/1
:60F:C110718EUR1320,83
:61:1107190719D57,87N446NONREF
:86:GEA 19.07.11/07.58 HILTON - HEATHROW HOUNSL,PAS018
GBP 50,00 1EUR=0,8640055 GBP KOSTEN EUR2,25 ACHTERAF BEREKEND
:62F:C110719EUR1262,96
-
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:20101/1
:60F:C110719EUR1262,96
:61:1107200720C82,N196NONREF
:86:GIRO 45588 taxservice TEVEELBET. NR.2
MOTORRYTUIGENB.11 *B *
:62F:C110720EUR1287,31
-
** 请注意,文本行 (#86) 可以在 1 行或多行上,在几个字符后换行。*
原始文件较长,我想在 Excel 2016 年使用 power 查询对其进行转换(如果可能,不使用 M-code)。
我见过很多转换表格的解决方案,但问题是某些行包含列标题和数据。基本上之间的所有内容:每行是 header 之后的部分是 "value".
我想将其转换为类似这样的内容:
enter code here
20 | 25 | 28
ABN AMRO BANK NV | 233835613 | 19901/1
ABN AMRO BANK NV | 233835613 | 20001/1
ABN AMRO BANK NV | 233835613 | 20101/1
剥离列和更改数据没有问题。只需将重复的行转换为列。
感谢您的帮助!
您所请求的转换部分可以通过旋转列名来实现。请在下面找到有关如何识别和提取它们的建议。
最好解决导入时的换行问题:http://blog.crossjoin.co.uk/2016/02/16/working-with-csv-files-that-contain-rogue-line-breaks-in-power-query-and-power-bi/
否则你需要更多的M-杂技来解决它。
let
Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Changed Type1" = Table.TransformColumnTypes(Source,{{"Spalte1", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 1, 1),
HeaderSplitPosition = Table.AddColumn(#"Added Index", "SplitHeader", each if Text.Start([Spalte1],1)=":" then List.Last(List.FirstN(Text.PositionOf([Spalte1], ":", Occurrence.All),2)) else ""),
SeparateHeader = Table.AddColumn(HeaderSplitPosition, "Header", each try Text.Trim(Text.Range([Spalte1],0,[SplitHeader]), ":") otherwise ""),
SeparateBody = Table.AddColumn(
SeparateHeader,
"Value",
each
try Text.Range(
[Spalte1],
[SplitHeader]+1,
Text.Length([Spalte1])-[SplitHeader]-1
)
otherwise [Spalte1]
//
)
in
SeparateBody
Excel 2016 年查询代码的荷兰语版本(刚刚翻译,与@ImkeF 相同):
let
Source = Excel.CurrentWorkbook(){[Name="Tabel1"]}[Content],
#"Changed Type1" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 1, 1),
HeaderSplitPosition = Table.AddColumn(#"Added Index", "SplitHeader", each if Text.Start([Column1],1)=":" then List.Last(List.FirstN(Text.PositionOf([Column1], ":", Occurrence.All),2)) else ""),
SeparateHeader = Table.AddColumn(HeaderSplitPosition, "Header", each try Text.Trim(Text.Range([Column1],0,[SplitHeader]), ":") otherwise ""),
SeparateBody = Table.AddColumn(SeparateHeader, "Value", each try Text.Range([Column1],[SplitHeader]+1,Text.Length([Column1])-[SplitHeader]-1) otherwise [Column1])
in
SeparateBody
我在一列中有以下数据:
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:19901/1
:60F:C110717EUR1333,58
:61:1107160718D12,75N426NONREF
:86:BEA NR:5FLM01 16.07.11/15.09 OLENBERG EXPL. BURG,PAS018
:62F:C110718EUR1320,83
-
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:20001/1
:60F:C110718EUR1320,83
:61:1107190719D57,87N446NONREF
:86:GEA 19.07.11/07.58 HILTON - HEATHROW HOUNSL,PAS018
GBP 50,00 1EUR=0,8640055 GBP KOSTEN EUR2,25 ACHTERAF BEREKEND
:62F:C110719EUR1262,96
-
ABNANL2A
940
ABNANL2A
:20:ABN AMRO BANK NV
:25:233835613
:28:20101/1
:60F:C110719EUR1262,96
:61:1107200720C82,N196NONREF
:86:GIRO 45588 taxservice TEVEELBET. NR.2
MOTORRYTUIGENB.11 *B *
:62F:C110720EUR1287,31
-
** 请注意,文本行 (#86) 可以在 1 行或多行上,在几个字符后换行。*
原始文件较长,我想在 Excel 2016 年使用 power 查询对其进行转换(如果可能,不使用 M-code)。
我见过很多转换表格的解决方案,但问题是某些行包含列标题和数据。基本上之间的所有内容:每行是 header 之后的部分是 "value".
我想将其转换为类似这样的内容:
enter code here
20 | 25 | 28
ABN AMRO BANK NV | 233835613 | 19901/1
ABN AMRO BANK NV | 233835613 | 20001/1
ABN AMRO BANK NV | 233835613 | 20101/1
剥离列和更改数据没有问题。只需将重复的行转换为列。 感谢您的帮助!
您所请求的转换部分可以通过旋转列名来实现。请在下面找到有关如何识别和提取它们的建议。
最好解决导入时的换行问题:http://blog.crossjoin.co.uk/2016/02/16/working-with-csv-files-that-contain-rogue-line-breaks-in-power-query-and-power-bi/ 否则你需要更多的M-杂技来解决它。
let
Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Changed Type1" = Table.TransformColumnTypes(Source,{{"Spalte1", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 1, 1),
HeaderSplitPosition = Table.AddColumn(#"Added Index", "SplitHeader", each if Text.Start([Spalte1],1)=":" then List.Last(List.FirstN(Text.PositionOf([Spalte1], ":", Occurrence.All),2)) else ""),
SeparateHeader = Table.AddColumn(HeaderSplitPosition, "Header", each try Text.Trim(Text.Range([Spalte1],0,[SplitHeader]), ":") otherwise ""),
SeparateBody = Table.AddColumn(
SeparateHeader,
"Value",
each
try Text.Range(
[Spalte1],
[SplitHeader]+1,
Text.Length([Spalte1])-[SplitHeader]-1
)
otherwise [Spalte1]
//
)
in
SeparateBody
Excel 2016 年查询代码的荷兰语版本(刚刚翻译,与@ImkeF 相同):
let
Source = Excel.CurrentWorkbook(){[Name="Tabel1"]}[Content],
#"Changed Type1" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type1", "Index", 1, 1),
HeaderSplitPosition = Table.AddColumn(#"Added Index", "SplitHeader", each if Text.Start([Column1],1)=":" then List.Last(List.FirstN(Text.PositionOf([Column1], ":", Occurrence.All),2)) else ""),
SeparateHeader = Table.AddColumn(HeaderSplitPosition, "Header", each try Text.Trim(Text.Range([Column1],0,[SplitHeader]), ":") otherwise ""),
SeparateBody = Table.AddColumn(SeparateHeader, "Value", each try Text.Range([Column1],[SplitHeader]+1,Text.Length([Column1])-[SplitHeader]-1) otherwise [Column1])
in
SeparateBody