若要從 Microsoft Word 檔案中取得精確的行數,請將文字從 Word 中複製出來,貼到瀏覽器型的行數計算工具中,並並排讀取總行數、非空白行、空白行與最長行的數字。這個瀏覽器工具將行的邊界定義為每一個換行字元 (LF)、每一個歸位字元加換行字元的組合 (CRLF),以及每一個單獨的歸位字元 (CR),其中 CRLF 算作一個邊界而非兩個,並會計算最長行中的每一個 Unicode 碼位。這套明確的規則正是該計數能在不同機器上重現的原因;而 Word 內建的行號則會受到目前檢視模式、載入的字型、頁面寬度,以及是否顯示軟換行等因素影響。一個在瀏覽器中本機執行、可接受混合行尾符號,並會印出自身邊界規則的行數計算工具,能提供一個單一的數字,讓你可以在會議中提出、貼進程式碼審查中,或列印在稿件頁面旁邊。本文接下來將逐步說明精確的操作流程、解釋每項統計數字是如何計算的,並指出在處理同一段文字時,Word 的回報與瀏覽器工具可能出現一到兩行落差的位置。

為什麼 Word 的行數會因檢視方式而異
Microsoft Word 至少提供四個會顯示行數的位置:狀態列、「版面設定」中的「行號」選項、搜尋 ^p 或 ^l 時的「尋找及取代」計數器,以及「字數統計」對話方塊中的「字數:X / 行數:Y」讀數。這些數字彼此之間可能不一致,因為每個數字都是依據不同規則計算出來的。
狀態列會顯示游標所在的行,或目前選取範圍所涵蓋的行。這個數字反映的是當下啟用的檢視模式。從「整頁模式」切換到「草稿」模式時,頁面寬度會改變、軟換行會重新排列,同一段文字的可見行數也會跟著改變。「字數統計」對話方塊則計算的是邏輯行,也就是以段落標記分隔的片段,並完全忽略軟換行。這兩種讀數量測的是不同的東西,在長段落中幾乎一定會產生不同的結果。
「版面設定」中的「顯示行號」選項會在頁面邊界繪製行號,而該計數取決於所選的編號模式。「連續」會對頁面上每一個顯示的列進行編號,「每頁重新開始」或「每節重新開始」會重新設定計數的起點,而「取消此段落的行號」會隱藏單一行。相同的文字,不同的模式,就會得到不同的總數。再加入行距、孤行/寡行控制,以及「與下段同頁」等格式設定後,你就會得到一個行號受排版規則影響,而非由檔案實際內容決定的工具。如果你的目標是取得一段穩定、可重現的文字行尾數量統計,Word 內建的數字無法滿足需求,而 行數計算工具 提供了一個精確的替代方案。
行數計算工具所使用的行邊界規則
在瀏覽器中執行的行數計算工具可以比 Word 更加可預測,前提是它必須明確定義其邊界規則。行數計算工具將行邊界定義為以下三種字元之一:LF (換行字元,寫作 \n)、CRLF 組合 (歸位字元加換行字元,寫作 \r\n),或單獨的 CR (歸位字元,寫作 \r)。CRLF 算作一個邊界而非兩個,因此儲存為 Windows 格式的文字檔不會被重複計算。同一段貼上的內容中可以混用不同的行尾符號,這點很重要,因為從 Word、Outlook、網頁、終端機輸出以及舊版 Mac 檔案複製出來的文字,經常會混雜在一起。
| 行尾符號 | 常見來源 | 計算方式 |
|---|---|---|
| LF (\n) | Unix、現代 macOS、網頁 | 一個邊界 |
| CRLF (\r\n) | Windows、Word 預設存檔格式 | 一個邊界 |
| CR (\r) | 舊版 Mac、部分終端機記錄檔 | 一個邊界 |
| 空白輸入 | 貼上空白字串 | 零行 |
輸入內容結尾的換行字元一律會額外產生一個空白片段。沒有結尾換行的文字 "alpha" 算是一個非空白行。文字 "alpha\n" 則是兩個總行數:一個包含 "alpha",另一個是結尾的空白行。一個只包含單一 CRLF 的檔案算是兩個空白行,因為分隔符的兩側各有一個空白片段。這是文字本身的可見分割結構,而非依據最後一行是否剛好包含字元所做的猜測,而這正是該工具所公開的規則,讓任何讀取結果的人都能重新計算。
在瀏覽器中計算 Word 文件的行數
以下流程能產生一個你可以記錄下來、分享給他人,並在另一台機器上重現的數字。
- 開啟你想要測量的 Word 文件。在 Windows 上按 Ctrl+A,或在 macOS 上按 Cmd+A 選取全部內容,然後按 Ctrl+C 或 Cmd+C 複製。
- 在新分頁中開啟行數計算工具。用 Ctrl+V 或 Cmd+V 貼到編輯器中。過程中不需按下「送出」按鈕;統計數字會在貼上的同時更新。
- 讀取編輯器下方出現的四項統計數字:總行數、非空白行、空白或僅含空白字元的行,以及最長行 (碼位)。
- 交叉檢查總數。總行數必須等於非空白行加上空白行。如果不相等,你就發現了一個值得在分享數字前先行標出的邊界規則問題。
- 如果你需要比較兩份 Word 文件,請先貼上第一份,記下四個數字,按下「清除」將所有統計數字歸零,然後貼上第二份並記錄其數字。
- 如果文件超過一百萬個 UTF-16 程式碼單位,工具會隱藏所有統計數字並回報錯誤,而不是截斷內容。請將文件分成兩半,分別計算後再加總。
由於分析過程在瀏覽器中執行,不會有任何文件離開你的機器。關閉分頁或按下「清除」會將所有統計數字歸零,且不會在伺服器端儲存任何內容,這對於 NDA 下的草稿或未出版的稿件來說特別有用。
四項統計數字的意義
總行數是依上述規則分割輸入內容後所產生的所有片段數量,包括由結尾換行字元所產生的空白片段。對於完全空白的輸入,總行數為零。一旦出現任何字元,總行數至少為一,因為文字本身佔據了第一個片段。
非空白行是指在套用 JavaScript 的 Unicode 感知 trim 處理其頭尾後,仍至少包含一個字元的片段。僅包含空格或定位點的行算作空白行。任何包含可見或非空白字元的行,即便只是一個表情符號或一個夾在空格中的拉丁字母,都算作非空白行。原始字元並不會從輸入中刪除;行內的空格仍會計入最長行的長度,因此一個「非空白」行仍可能被回報為包含許多碼位。
空白或僅含空白字元的行,是指移除所有非空白行後剩下的片段。根據定義,總行數 = 非空白行 + 空白行。這個等式是用來驗證你所查看的結果最簡單的方法,而且無論輸入內容多麼特殊都同樣適用。
最長行 (碼位) 是以 Unicode 碼位來測量,而非 UTF-16 程式碼單位、位元組或視覺欄位。一個輔助平面的表情符號 (例如 😀) 算是一個碼位,但佔兩個 UTF-16 單位。一個以 "e" 後接 U+0301 (組合用尖音符) 形式儲存的可分解 "é" 是兩個碼位,但可能顯示為一個可見字元。一個用零寬連接符串接的家庭表情符號會算作多個碼位,但在視覺上看起來像一個字形。定位點算作一個碼位,即使編輯器可能將其展開為多個欄位。這個區別正是不同工具間數字出現「差一」驚奇的主要來源。如果你發現最長行的數字比預期還小,原因幾乎一定是某個表情符號只被算成一次而非兩次,而不是字元遺漏。
Word 與行數計算工具何時會產生差異
Word 與瀏覽器型行數計算工具可能對同一段文字產生不同的總數。這不是任何一個工具的錯誤,而是「行」這個定義在兩種定義下所產生的可見差異。了解定義在哪裡分歧,才能讓你為工作選擇合適的工具。
| 問題 | Word 的回答 | 行數計算工具的回答 |
|---|---|---|
| 軟換行產生的列是否計算在內? | 在「整頁模式」中算;在「草稿」模式中不算 | 不算,軟換行不是分隔符 |
| 結尾的段落標記是否計算在內? | 視編號模式而定,有時算 | 算,每個結尾邊界都會產生一個額外的空白行 |
| 可辨識哪些行尾符號? | 段落標記與手動分行符號 | LF、CRLF,以及單獨的 CR,其中 CRLF 算作一個邊界 |
| 「最長行」是如何測量的? | 「字數統計」中未提供 | Unicode 碼位 |
| 計算在哪裡進行? | 在 Word 應用程式內部 | 在你的瀏覽器中本機執行,無需上傳 |
如果你需要一個其他工具能重現的數字,請先決定你想要採用哪一種定義,然後選擇與之相符的工具。對於散文、稿件頁面或合約文字等段落標記重要的內容,Word 的段落計數與瀏覽器工具的空白行計數通常會相當接近。對於原始碼、記錄檔、CSV 匯出檔,或任何段落標記已被轉換為換行字元的文字,瀏覽器工具通常更接近下一支腳本實際讀取到的內容。
在信任任何總數之前,有一個快速的健全性檢查:單獨貼上 Word 文件的第一段,記下四個數字,然後再貼上整份文件。整份文件的總數應至少大於該段的總數。如果不是,你就找到了一個位置,其中一個工具將某個特殊字元 (例如不斷行空格、軟連字號或零寬連接符) 視為另一個工具不視為的東西。在這種情況下,最小且最明確的數字通常是最適合發布的,因為它是讀者能手動重新推導出來的那個數字。
如果你正在權衡各種選項,如何在英文中將數字轉換為英文單字 對此有詳細說明。
如果你正在權衡各種選項,在 Notepad++ 中移除換行字元而不犯正則表達式錯誤 對此有詳細說明。