Power Automate 內建的 Create HTML Table 動作可以一步將 JSON 陣列轉成 HTML 標記,但反方向並沒有對應的原生功能:沒有 Parse HTML Table 動作、沒有逐列擷取工具,也沒有任何方法可以把表格儲存格直接餵給 Condition、Apply to each 或 Compose,除非先把標記轉成 JSON。當流程從核准郵件、SharePoint 頁面、Microsoft Forms 的富文字回覆或網路請求收到表格標記時,必須先把列轉成 JSON,任何資料操作才能讀取它們。在不上傳標記的前提下,最快的做法是把表格貼到瀏覽器型的 HTML 表格轉 JSON 轉換器,選擇第一列是否為欄位名稱,然後把產生的物件陣列直接複製到 Parse JSON 動作中。這個工具只讀取儲存格的 textContent,會拒絕任何載入指令碼或遠端資源的標記,以確定性的方式修復重複或空白的標頭,並輸出字串而非推測的型別,因此像 00123 這樣的識別碼會保持為 00123。輸出是一個由純 JSON 物件組成的陣列,每個欄位一個鍵,每一筆記錄的鍵都保持穩定,這正是 Power Automate Parse JSON 結構描述所預期的格式。因為每一步都在當前分頁中執行,標記和結果都不會上傳到任何伺服器。

為什麼 Power Automate 流程常常會拿到 HTML 表格
有幾個常見的觸發路徑會產生 HTML 表格標記而非結構化資料。當新郵件帶有 HTML 內文時,來自核准系統、ERP 匯出或廠商報表的格式化表格會以原始標記的形式出現在 Body token 中。SharePoint 的「Send an HTTP request」動作以及 SharePoint REST API 回傳的頁面,當頁面包含格式化清單檢視或頁面內容時,常常夾帶 HTML 片段。Microsoft Forms 中的「When a response is submitted」會擷取富文字回覆,其中可能含有從試算表貼上的表格。從 Rich Text 控制項或 HTML text 控制項回傳 HTML 的 Power Apps,也會將表格標記傳入流程中。
在上述所有情況中,Power Automate 提供的動作涵蓋了容易的方向(Create HTML Table、Create CSV table),卻沒有涵蓋困難的方向。流程最後往往會握著一長串 <tr> 和 <td> 標籤的字串,卻沒有原生方式可以詢問「第二列的第三欄」。Compose 動作只能切出子字串;Parse JSON 動作只接受 JSON。在流程的某個環節,表格必須跨越從標記到資料的界線,而瀏覽器型的轉換器就是完成這件事、同時不把標記暴露給第三方服務的最簡單地方。
為 Power Automate 流程將 HTML 表格轉成 JSON
以下工作流程適合放在產生 HTML 的觸發條件與將取用它的 Parse JSON 動作之間:
- 在 Compose 動作中分離出目標表格標記。將觸發條件的 Body 傳給它,或者若郵件或頁面包含多個表格,可以使用圍繞第一個 <table> 與對應 </table> 的 indexOf 運算式,把字串縮窄到你要的那一段 <table>...</table> 區塊。然後從執行歷程記錄中複製產生的字串。
- 在新分頁中開啟 HTML 表格轉 JSON 轉換器。
- 將標記貼到輸入區域中。
- 若第一個 <tr> 為欄位名稱,請勾選 First row contains headers。若關閉此選項,則每一列都會視為一筆記錄,轉換器會自動產生 column_1、column_2、column_3 等鍵。
- 啟用 Trim cell text,以去除標頭與儲存格的前後空白,同時保留內部空格與換行內容。
- 點擊 Convert。輸入內容中第一個符合的表格會被轉換;同一份文件中的其他表格會被忽略。
- 比對輸出下方的列數與欄數與來源表格是否一致。它們應符合你在原始標記中看到的列數與儲存格數。
- 將 JSON 複製到剪貼簿。
結果是單一 JSON 物件陣列。該陣列可以貼到 Power Automate Parse JSON 動作的「Generate from sample」欄位中,系統會推導出每個欄位各對應一個屬性的結構描述。
轉換器會輸出什麼,以及刻意不會做什麼
由於 Power Automate 的 Parse JSON 結構描述對鍵的形狀與值的型別非常嚴格,提前了解轉換器的行為是值得的。
| 行為 | 結果 |
|---|---|
| 預設標頭來源 | 第一列成為屬性名稱 |
| 空白的標頭儲存格 | 由產生的欄位名稱取代 |
| 重複的標頭名稱 | 依出現順序加上 _2、_3 等後綴 |
| 缺少的尾端儲存格 | 以空字串補上,以確保每筆記錄的鍵相同 |
| 超出標頭數目的額外儲存格 | 產生新欄位來容納該值 |
| 值的型別 | 每個儲存格都保持為字串;不做數字、布林、日期或 null 的強制轉換 |
| 標記、屬性、連結、樣式 | 不會複製到 JSON 輸出中 |
| rowspan 與 colspan | 不會展開為矩形網格 |
| 巢狀表格 | 不會遞迴處理;請於轉換前移除 |
| script、style、image、frame、audio、video、source、link、object、embed、SVG、MathML | 在解析前即拒絕輸入 |
| 輸出預覽 | 不渲染任何預;僅產生 JSON |
對 Power Automate 而言,標頭規則最為關鍵,因為 Parse JSON 要求陣列中每筆記錄共用同一組鍵。透過以空字串補齊缺少的尾端儲存格,並為過長的列產生額外欄位,轉換器能保證陣列中每個物件的鍵完全一致,這正是「Generate from sample」能產生可用結構描述的前提。
僅輸出字串的行為同樣重要。Power Automate 的 Parse JSON 不會把字串強制轉型為數字、布林值或 null,而下游任何用戶端系統也可能誤判值。透過僅輸出字串,轉換器能保護具有前置零的識別碼(發票號碼、郵遞區號、客戶代碼)、大型帳號參考,以及地區專屬的貨幣字串不被意外地數值化處理。若目的端結構描述要求具型別的值,請在 Parse JSON 動作之後加上明確的轉換步驟;由於文字外觀並非可靠的型別宣告,轉換器不會推測型別。
對 Power Automate 使用情境影響重大的限制
轉換器中有三項限制會與實際的 Power Automate 承載資料互動。僅會轉換第一個符合的表格,因此若文件同時包含導覽表格、比較表格,以及你真正想要的資料表格,第二與第三個表格會被默默忽略。請在貼上之前,先使用 Compose 步只取出目標 <table>...</table> 區塊。輸入上限為 500,000 字元,足以涵蓋大多數郵件內文表格,但會拒絕非常長的 SharePoint 頁面匯出;若接近上限,請在上游先截斷輸入。格式錯誤的 HTML 會由瀏覽器解析器修復,因此若來源標記缺少結尾標籤或儲存格重疊,產生的 JSON 可能與你在來源中看到的不一致;在信任輸出之前,請先檢查列數、欄數與一筆具代表性的記錄。
使用 rowspan 與 colspan 的表格同樣不在處理範圍內。覽器的列與儲存格集合會依WHATWG HTML 表格規範以出現順序識別儲存格,但不會展開視覺跨距,因此依賴儲存格橫跨三欄的版面配置,只會在起始儲存格的位置產生單一值,而不是三個對齊的項目。巢狀表格會帶來所有權歸屬的模糊性,因為位於某列中的儲存格可能含有自己的 <table> 與自己的標頭,轉換器無法判斷該列歸屬於哪個表格。請在來源應用程式中先攤平這兩種情況再進行轉換。
安全地將 JSON 帶回 Power Automate
一旦陣列進入剪貼簿,剩下的就是標準的 Power Automate 模式。新增一個 Parse JSON 動作,把複製的 JSON 貼到「Generate from sample」中;Power Automate 會推導出每個欄位各對應一個屬性的結構描述。在 Apply to each 或 Condition 內,以 body('Parse_JSON')?['InvoiceNumber'] 這類運算式參考欄位。在貼入 Parse JSON 之前,先使用 JSON 驗證器在本機驗證 JSON,以便在結構描述推導之前就抓出語法錯誤。
同時驗證需要具型別輸出的值。Parse JSON 會把字串交給數字欄位而不會報錯,但 Dataverse 中的「Create a row」之類的下游動作,或對 JSON 型別 API 的「Send an HTTP request」,可能會拒絕這些字串。對於應為數字的欄位,請在 Compose 步驟中加入 int() 或 float() 轉換,字串欄位則保持原樣。以已知的輸入進行快速測試:具代表性的記錄應能以相同的鍵與值完成往返,若不能,請重新檢視轉換器選項或來源表格標記。如果你需要反向操作、把 JSON 轉回 HTML 以供郵件內文或 Teams 訊息使用,請參考 在 JavaScript 中安全地將 JSON 轉為 HTML 表格,其中涵蓋了能順利對應到 Power Automate Create HTML Table 動作的各種模式。
敏感承載資料的隱私與本機處理
核准郵件與 SharePoint 頁面內容經常包含個人資料、內部帳號以及機密定價。轉換器完全在當前分頁中處理標記。MDN 的 DOMParser 參考文件所記錄的瀏器 DOMParser 會將輸入讀為非活動的文件,不會執行指令碼,也不會載入遠端資源;textContent 直接從每個儲存格讀取,JSON.stringify 格式化結果,剪貼簿寫入則在本機完成。內容不會被上傳,也沒有任何網路請求會夾帶表格內容。這個本機界線止於瀏覽器分頁本身,因此已安裝的擴充功能仍能讀取頁面 DOM,而雲端同步的剪貼簿也可能將 JSON 帶到其他裝置。若你計畫將螢幕擷圖、匯出檔案或轉換器輸出副本分享給其他人,請先移除敏感列再貼上。
延伸閱讀:在無伺服器情況下批次將文字轉為 HTML 段落。