2015-10-13 57 views
1

我需要在電力查詢的列的所有值裝入由逗號分隔的1單元串,如下面的例子:轉換列電池串電源查詢

enter image description here

要做到這一點,我有以下的代碼:

let 
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], 
    #"Transposed Table" = Table.Transpose(Source), 
    #"Merged Columns" = Table.CombineColumns(#"Transposed Table",{"Column1", "Column2", "Column3"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"), 
    #"KeepString" = #"Merged Columns"[Merged]{0} 
in 
    #"KeepString" 

與此代碼的問題是,它假定總是會有3列,這並不總是這種情況。我怎樣才能將所有列(不管有多少)合併成一個列?

回答

4

你可以用List.Accumulate做到這一點:

let 
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], 
    KeepString = List.Accumulate(Source[User], "", (state, current) => if state = "" then current else state & "," & current) 
in 
    KeepString 

您還可以使用Table.ColumnNames把所有的列名的列表。你可以通過這個進Table.CombineColumns,所以修改後的解決辦法是:

let 
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], 
    #"Transposed Table" = Table.Transpose(Source), 
    #"Merged Columns" = Table.CombineColumns(#"Transposed Table", Table.ColumnNames(#"Transposed Table"),Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"), 
    #"KeepString" = #"Merged Columns"[Merged]{0} 
in 
    #"KeepString" 
+0

感謝這個,這正是我一直在尋找! :) – Victor

2

您還可以使用更短的代碼:

let 
    Source=Excel.CurrentWorkbook({]Name="Table1"]}[Content], 
    Result = Text.Combine(Source[User], ",") 
in 
    Result