Power Automate tách HTML thành văn bản

Đây không phải là một định dạng thân thiện để cạo dữ liệu nhưng đây là một nỗ lực nhanh chóng và bẩn thỉu

let
    Source = Web.BrowserContents[
        "//raw.githubusercontent.com/openelections/openelections-sources-pa/master/2018/general/Forest_PA_2018_general.html"],
    #"Extracted Table From Html" = 
        Html.Table[Source, {{"Column1", "BODY"}}],
    #"Split Column by Delimiter" = Table.ExpandListColumn[Table.TransformColumns[#"Extracted Table From Html", {{"Column1", Splitter.SplitTextByDelimiter["", QuoteStyle.Csv], let itemType = [type nullable text] meta [Serialized.Text = true] in type {itemType}}}], "Column1"],
    #"Trimmed Text" = Table.TransformColumns[#"Split Column by Delimiter",{{"Column1", Text.Trim, type text}}],
    #"Replaced Value" = Table.ReplaceValue[#"Trimmed Text","#[lf]","|",Replacer.ReplaceText,{"Column1"}],
    #"Added Index" = Table.AddIndexColumn[#"Replaced Value", "Index", 0, 1, Int64.Type],
    #"Split Column by Delimiter1" = Table.ExpandListColumn[Table.TransformColumns[#"Added Index", {{"Column1", Splitter.SplitTextByDelimiter["|", QuoteStyle.Csv], let itemType = [type nullable text] meta [Serialized.Text = true] in type {itemType}}}], "Column1"],
    #"Filtered Rows" = Table.SelectRows[#"Split Column by Delimiter1", each [[Column1]  "" and [Column1]  "                                                      VOTES  PERCENT" and [Column1]  "          Vote For Not More Than  1" and [Column1]  "" and [Column1]  "
" and [Column1] "
"]],
    #"Split Column by Delimiter2" = Table.SplitColumn[#"Filtered Rows", "Column1", Splitter.SplitTextByEachDelimiter[{"     "}, QuoteStyle.Csv, false], {"Column1.1", "Column1.2"}],
    #"Split Column by Delimiter3" = Table.SplitColumn[#"Split Column by Delimiter2", "Column1.2", Splitter.SplitTextByEachDelimiter[{".  .  ."}, QuoteStyle.Csv, false], {"Column1.2.1", "Column1.2.2"}],
    #"Trimmed Text1" = Table.TransformColumns[#"Split Column by Delimiter3",{{"Column1.2.1", each Text.Trim[_, {" ", "."}], type text}, {"Column1.2.2", each Text.Trim[_, {" ", "."}], type text}}],
    #"Split Column by Delimiter4" = Table.SplitColumn[#"Trimmed Text1", "Column1.2.2", Splitter.SplitTextByEachDelimiter[{" "}, QuoteStyle.Csv, false], {"Column1.2.2.1", "Column1.2.2.2"}],
    #"Changed Type" = Table.TransformColumnTypes[#"Split Column by Delimiter4",{{"Column1.1", type text}, {"Column1.2.2.1", Int64.Type}, {"Column1.2.2.2", type number}}],
    #"Filtered Rows1" = Table.SelectRows[#"Changed Type", each [[Column1.1] = ""]],
    #"Replaced Value1" = Table.ReplaceValue[#"Filtered Rows1","",each if Text.StartsWith[[Column1.2.1], "0"] then [Column1.2.1] else null,Replacer.ReplaceValue,{"Column1.1"}],
    #"Filled Down" = Table.FillDown[#"Replaced Value1",{"Column1.1"}],
    #"Filtered Rows2" = Table.SelectRows[#"Filled Down", each not Text.StartsWith[[Column1.2.1], "0"]],
    #"Added Custom" = Table.AddColumn[#"Filtered Rows2", "Custom", each if Text.Contains[[Column1.2.1], "["] or [Column1.2.1] = "WRITE-IN" then null else [Column1.2.1], type text],
    #"Filled Down1" = Table.FillDown[#"Added Custom",{"Custom"}],
    #"Filtered Rows3" = Table.SelectRows[#"Filled Down1", each Text.Contains[[Custom], "- TOTAL"] or [Custom]  [Column1.2.1]]
in
    #"Filtered Rows3"

Gần đây, tôi đã gặp phải tình huống phải trích xuất nhiều dòng văn bản từ email do hệ thống tạo bằng Power Automate. Chìa khóa của mẫu Luồng này là khả năng dự đoán của thông báo do hệ thống tạo ra, nghĩa là tôi có thể tin rằng dòng 1 luôn là dòng 1 và dòng 2 luôn là dòng 2, v.v. Khó tạo Luồng nhưng đơn giản trong quá trình triển khai cuối cùng bằng cách sử dụng Html để nhắn tin và Soạn hành động.  

Trong hình ảnh bên dưới, chúng ta có thể thấy email do hệ thống của tôi tạo ra. Luồng của chúng tôi sẽ trích xuất các dòng 1-4.  

Tôi đang sử dụng Luồng đám mây tự động với trình kích hoạt Khi có email mới [V3]. Tôi đang sử dụng “Bộ lọc chủ đề” để chỉ định các điều kiện mà Luồng sẽ thực thi. Trong trường hợp này, bất kỳ email nào có chủ đề “Thư email hệ thống” sẽ kích hoạt quy trình. Ngữ cảnh của trình kích hoạt dựa trên tài khoản được xác định trong kết nối, tôi. e. Hộp thư của tôi.  

Tiếp theo, tôi thêm một hành động Html vào văn bản và đặt nội dung thành Nội dung từ trình kích hoạt Khi có email mới [V3].  

Hành động Html to text chuyển nội dung email [A] thành nội dung có thể đọc và sử dụng được [B].  

Sử dụng tác vụ Soạn thư với một biểu thức, chúng tôi trích xuất dòng văn bản đích của mình.  

Mã biểu thức được liệt kê bên dưới và thường được đọc là.  

Màu vàng. Thay thế các ký tự ngắt dòng ẩn bằng ký hiệu ống bằng cách sử dụng decodeUriComponent[‘%0A’]

màu xanh lá. Tách màu vàng dựa trên biểu tượng đường ống.  

Màu đỏ tía. Trích xuất dòng đầu tiên [[0]]

mã biểu thức

split[replace[outputs['Html_to_text']?['body'], decodeUriComponent['%0A'], '|'], '|'][0] 

Các hành động Soạn bổ sung được thêm vào cho mỗi dòng được trích xuất với thay đổi duy nhất là giá trị vị trí mảng i. e. [1], [2], [3].  

_______3____4____5

Luồng hoàn thành của tôi trông giống như hình ảnh bên dưới.  

Tôi chắc chắn rằng có nhiều cách hay hơn để thực hiện thao tác này, nhưng nó phù hợp với nhu cầu của tôi và giá trị mà nó mang lại lớn hơn bất kỳ rủi ro tái cấu trúc nào nếu hệ thống tạo email thay đổi. Trong phiên bản sản xuất của Luồng này, dữ liệu được ghi vào Dataverse để xem xét và hành động như một phần của quy trình kinh doanh lớn hơn và xử lý lỗi để cho tôi biết nếu mọi thứ không thành công.  

Làm cách nào để tách văn bản trong HTML?

Phương thức splitText[] chia nút Văn bản thành hai nút ở chỉ số offset đã chỉ định, giữ cả hai nút trong cây là anh em . Sau khi tách văn bản, nút chính chứa tất cả nội dung cho đến điểm chỉ số bù được chỉ định và một nút mới được tạo cùng loại chứa văn bản còn lại.

Chủ Đề