2016-02-25 53 views
0

我有一列中的以下数据:的Excel 2016转换重复行列

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中将其与电源查询进行转换(如果可能,不使用M代码)。

我已经看到很多转换表格表格的解决方案,但问题是某些行包含列标题以及数据。基本上,每行之间的所有内容都是标题,而后面的部分是“值”。

我想这个像这样变换来的东西:

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 

汽提塔和更改数据是没有问题的。只需将重复的行转换为列即可。 感谢帮助!

回答

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 
+0

感谢您的回答!将调查并回复。允许一段时间,因为日历已满:) –

+0

作为魅力!只需将一些代码转换为Excel的本地版本(荷兰语而非德语)即可。主要是“Spalte1”>“Kolom1”(英文版本为“Column1”)。还有“Tabelle1”>“Tabel1”。其余代码会自动转换。 –

0

了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