一、問題說明:
很多人在 word 或 excel 寫好一些文件後想直接的儲存為 html 檔發佈到網站上,但若真的檢查後會發現這轉過來的 HTML 檔中有很多沒必要的CSS 與 HTML 標籤,這讓網頁變的很大,終其原因跟 office 的歷史包袱有關。
以 word 為例,想想在 office 2007 之前我們 word 的附屬檔名只有 .doc,但自從網際網路上文件愈加開放之際,要能做文件轉換就必須使用 XML 格式,所以我們現在看到的 word 附屬檔名皆為 .docx。
而現在的 docx 檔事實上就是一個壓縮檔,你將一個 word 有壓縮程式打開會發現下圖結構:

看標題是個 word 檔,裏面確是一些 xml 檔與其它檔案組合
我也是在投稿時才發現,明明檔案中字數才 7000 字,但用 word 內建 count 確是超過 8000 字,投稿系統一直不讓我上傳,後來是來改這裏面 xml 檔內容才發現真的是顯示超過 8000,但真的一字一字包含特殊符號 count 才 7000,所以改了 xml 檔內容後才正確後上傳。也因為這件事我才了解原來現在的 word 就是個壓縮檔案。
二、原因
我去網路上找了一些原因發現 word 為了確保文件在不同版本的 Office、印表機、排版引擎下看起來完全一模一樣,會把每一個字元、段落、頁首頁尾的視覺細節(字型大小、行距、字距、縮排、語言設定、追蹤修訂等)都用專屬的 XML 標籤(OpenXML 規範)精確記下來。
當 word 將檔案「另存為 HTML」時,它的轉換引擎採用的是「完全忠實複製(1:1 Full Fidelity)」策略。它把 OpenXML 裡記錄的每一個微小屬性,硬生生翻譯成 HTML 的 style="" 內聯樣式(Inline Styles)與 <o:p>、<w:WordDocument> 這類自訂的 XML 命名空間(Namespaces)。
另外, 在 word 中,一個字的最終外觀是由多層結構疊加出來的:預設樣式👉段落樣式👉字元樣式👉手動覆蓋(Direct Formatting),所以轉換成 HTML 時,word 的轉換引擎通常不會做 CSS 的精簡與合併,而是把每一層繼承到的屬性,全部重複印在每一個 <p> 與 <span> 標籤上。這就導致原本只需要一行 CSS 的效果,變成了滿頁的贅餘程式碼。
最後,讓它肥大的最大原因是word 匯出 HTML 的目的,不只是為了讓瀏覽器顯示,還為了讓你「用 Word 重新開啟這個 HTML 時,格式完全不會跑掉」。為了做到這一點,word 會將大量的 word 內部專用設定(例如:頁面邊界、網格對齊、註腳鏈結、WordArt 特效等),透過 class=MsoNormal 或 <!--[if gte mso 9]> 等註解語法大量寫入 <head> 與樣式表內。
來看例子,我們一般寫網頁,Doraemon 藍字,機器貓粗斜體,下面語法足夠,20行內搞定。
但在 word 內寫完轉存 html 檔後變成下面
足足變成 840 行,裏面全是用不到的冗長碼。
三、解決方法
當然如果可以用網頁語言直接寫就直接寫,但若做不到,可試下列方法:
1. word 在轉存 html 檔時,不要選存 html,而是改選另存為「已篩選過的網頁」:
大小會差很多,以同一個例子來說會變成下方,剩不到 80 行,雖然還是很大,但變為1/10。
2. dreamweaver 中也有將 word 這些冗長碼清除的功能
清完後剩 40 行左右,可接受。
3. VS Code 擴充功能:
如果你是用 vscode,那可以安裝 Minify 或使用 Regex 正則表達式批次替換 style="mso-..." 相關內容。
4. 安裝 Pandoc 工具
可至 Pandoc 下載工具安裝使用。
5. 選一些線上 word 轉 HTML 雲端服務





