Markdown 표로 변환 | Power Query
6393 단어 PowerBIExcelPowerQuery
완성품은 qiita에서만 동작 확인하고 있습니다.
2019/10/12 추기: 함수화한 코드도 올렸습니다.
제목 표
빈 쿼리에 붙이면 테이블이 됩니다. 개행도 반각 세로봉(|)도 들어가 있습니다.
※치환 작업을 하는 사정상, 어느 열도 텍스트형으로 변환해 둘 필요가 있다.
샘플
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jZDRSgJBFIbfZa69UXub1VfowquCLjpzxF0lykpbwRAUiWjZRQihZOth+psdvfIVPO3EChVrMAfO/PzwfRzPUyYIq6qiTmROZYz/YPsd834BSuyyn03uVbPiqaq5frTjRArQS/AzOARH4A50DP0KDqR/9vkSr1eRlLIpm/nThi9l36ZB8f3wb8ADcAoml9i3JLsaO15255s4FKFt2s2ptYL6zZfSH4IiRT3QCNQGDaFvHTXfu6AI5/Sj8OVBPRusGq3GcalCvVCo/UNhAdKlCvuCU3DJQYujwqJebiGX/k2WMD/8TF45qrkD", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, 列1 = _t, 列2 = _t, 列3 = _t]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"列1", type text}, {"x", type text}, {"y", type text}, {"処理後の結果", type text}})
in
#"Changed Type"
↓붙이면 이렇게 된다.
코드
최소한, 셀내 개행과 세로봉의 치환은 했습니다. 그 밖에 필요한 치환이 있으면, 「치환 문자 리스트」의 곳에 써 넣으면 OK. (
{{置換文字列、置換後},・・・}
라는 구조)표 안의 횡방향 위치는, 완성 후의 캐릭터 라인에 스스로 콜론을 더합시다.
※복수 문자열의 치환에 대해서는, 하기의 기사의 패턴 2 코드(신)로 해설하고 있습니다.
여러 단어를 함께 대체 - Qiita
q_Markdown에 대한 테이블 생성
let
Source = サンプル,
置換文字リスト = {{"#(cr,lf)","<br>"},{"#(lf)","<br>"},{"|","|"}},
置換用関数 =(文字列のリスト as list)=>
List.Transform(文字列のリスト,each
List.Accumulate(
置換文字リスト,_,(x,y)=>Text.Replace(x,y{0},y{1})
)
),
タイトル = "|" & Text.Combine( 置換用関数(Table.ColumnNames(Source)),"|" ) &"|",
タイトル下 = "|---"& Text.Repeat( "|---",Table.ColumnCount(Source)-1 ) &"|",
中身 = Text.Combine( List.Transform(
Table.ToRows(Source),
each "|" & Text.Combine(置換用関数(_),"|") & "|"
),"#(lf)"
),
合成 = Text.Combine({タイトル,タイトル下,中身},"#(lf)")
in
合成
완성된 문자열
이것을 qiita에 붙이면 아래와 같이.
열 1
x
y
처리 후 결과
첫번째
샘플 텍스트 | 내용
모모타로
(모모타로⇒피치타로 치환 후의 문자열)
두번째
첫 번째 처리 후 결과
할아버지
(게다가 할아버지 ⇒ 할아버지 교체 후의 문자열)
3번째
2번째 처리 후의 결과
할머니
(또한 할머니 ⇒ 할머니 교체 후 문자열)
4주차
3번째 처리 후의 결과
복숭아
(게다가 복숭아⇒모모 치환 후의 문자열)
테스트 환경
Windows7, Office365 Excel (32 비트. 버전 1908)
Power Query 버전: 2.72.5556.441
보충:개행에 대해서
입력 방법에 따라 다음과 같은 차이가있었습니다.
1. Power BI의 테이블 입력 메뉴에 Excel 테이블을 그대로 붙여 넣습니다.
⇒셀내 개행은
#(cr,lf)
가 된다.2.동 메뉴에 손 입력으로, shift+enter로 개행.
⇒개행은
#(lf)
가 된다.3. Excel 테이블에서 Power Query로로드
⇒셀내 개행은
#(lf)
가 된다.따라서 위 코드의 "대체 문자 목록"에서는 둘 다 대체합니다.
대체 순서도 중요합니다. 왜냐하면,
#(cr,lf)
로 들어가 있는 개행에 대해서, #(lf)
만 치환된다고 하는 것이 일어나기 때문입니다.즉,
//trueになる
= Text.Replace("a#(cr,lf)bc","#(lf)","") ="a#(cr)bc"
된다.
그럼, 좌변이 실시한 내용은 어떻게 되는가 하면,
라고 보기, 개행이 잡힌 바람으로 보인다. 그러나 이것을 메모장에 붙이면,
라는 상태로
#(cr)
가 남아 있는 것을 알 수 있다.여기까지 눈치채는데, 고민해 버렸습니다.
공식 정보에서는 Power Query M language specification 의 2.6.1 Character Escape Sequences를 읽는 것이 좋습니다. (영어)
함수화된 코드
스스로 사용해 보고, 데이터형 변환이 없는 것은 불편하게 생각했으므로, 그것도 넣어 함수화해 두었습니다.
(tbl as table)=>
let
データ型をテキストに変換 = Table.TransformColumnTypes(tbl,
List.Transform( Table.ColumnNames(tbl),each {_,type text} )
),
置換文字リスト = {{"#(cr,lf)","<br>"},{"#(lf)","<br>"},{"|","|"}},
置換用関数 =(文字列のリスト as list)=>
List.Transform(文字列のリスト,each
List.Accumulate(
置換文字リスト,_,(x,y)=>Text.Replace(x,y{0},y{1})
)
),
タイトル = "|" & Text.Combine( 置換用関数(Table.ColumnNames(データ型をテキストに変換)),"|" ) &"|",
タイトル下 = "|---"& Text.Repeat( "|---",Table.ColumnCount(データ型をテキストに変換)-1 ) &"|",
中身 = Text.Combine( List.Transform(
Table.ToRows(データ型をテキストに変換),
each "|" & Text.Combine(置換用関数(_),"|") & "|"
),"#(lf)"
),
合成 = Text.Combine({タイトル,タイトル下,中身},"#(lf)")
in
合成
Reference
이 문제에 관하여(Markdown 표로 변환 | Power Query), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanuki_phoenix/items/be7a2cfa4f7cf40d2967텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)