Mehrzeilige Textfelder: HTML zu Text konvertieren mit Power Query

Veröffentlicht am 13.11.2015 | Lesezeit 2 Min.

Die Inhalte mehrzeiliger Textfelder können vom Benutzer formatiert werden und werden als HTML gespeichert. Wenn solche Texte mit Power Query in Excel angezeigt werden, sind die HTML-Tags sichtbar:

HTML zu Text konvertieren

Leider gibt es in Power Query keine eingebaute Funktion zur Konvertierung von HTML zu einfachem Text, und auch reguläre Ausdrücke werden nicht unterstützt, mit ein paar kleinen Tricks klappt es dennoch recht gut, wahlweise der reine Text …

Text mit extra Zeichen

… oder einigermaßen hübsch formatiert:

Text mit extra Zeichen, Aufzählung

Alle Funktionen und Beispiele zur Benutzung sind in dieser Arbeitsmappe für Excel 2013 enthalten.

Um die Funktionen nutzen zu können, muss das Das Power-Query-Plugin installiert sein.

Für Power-Query-Experten ist hier noch der Quellcode der Funktion:let
    HtmlToText = (data as table, HtmlFieldName as text, NewTextFieldName as text) => let    // Create a new column with the given name and type text
    #”Duplicated Column” = Table.DuplicateColumn(data, HtmlFieldName , NewTextFieldName ),
    #”Changed Type” = Table.TransformColumnTypes(#”Duplicated Column”,),    // pretty-print HTML as plain text
    #”Replaced Value1″ = Table.ReplaceValue(#”Changed Type”,”|”,”&pipe;”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value2″ = Table.ReplaceValue(#”Replaced Value1″,”<br>”,”#(cr)#(lf)”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value3″ = Table.ReplaceValue(#”Replaced Value2″,”<br/>”,”#(cr)#(lf)”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value4″ = Table.ReplaceValue(#”Replaced Value3″,”<p”,”#(cr)#(lf)<p”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value5″ = Table.ReplaceValue(#”Replaced Value4″,”</ol>”,”</ol>#(cr)#(lf)”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value6″ = Table.ReplaceValue(#”Replaced Value5″,”</ul>”,”</ul>#(cr)#(lf)”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value7″ = Table.ReplaceValue(#”Replaced Value6″,”<li”,”#(cr)#(lf) – <li”,Replacer.ReplaceText,{NewTextFieldName}),    // remove HTML tags
    #”Replaced Value8″ = Table.ReplaceValue(#”Replaced Value7″,”><“,”|”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Mod Column” = Table.TransformColumns(#”Replaced Value8″,),    // Replace common entity references with their representing characters
    #”Expanded Text” = Table.ExpandListColumn(#”Mod Column”, NewTextFieldName),
    #”Trimmed Text” = Table.TransformColumns(#”Expanded Text”,),
    #”Replaced Value9″ = Table.ReplaceValue(#”Trimmed Text”,”&quot;”,””””,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value10″ = Table.ReplaceValue(#”Replaced Value9″,”&amp;”,”&”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value11″ = Table.ReplaceValue(#”Replaced Value10″,”&lt;”,”<“,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value12″ = Table.ReplaceValue(#”Replaced Value11″,”&gt;”,”>”,Replacer.ReplaceText,{NewTextFieldName}),
    #”Replaced Value13″ = Table.ReplaceValue(#”Replaced Value12″, “&pipe;”,”|”,Replacer.ReplaceText,{NewTextFieldName}),    Result = #”Replaced Value13″
in
    Result
in
    HtmlToText 

Der Code kann auch in dieser Textdatei eingesehen werden.