有趣的問題。 [查看更新內容]
單詞的對象模型並沒有真正的「頁面」對象,因爲在添加和刪除內容時文檔的分頁不斷變化(或更改字體大小,紙張大小等)。所以,沒有「ActiveDocument.Pages(1)」的東西。
更重要的是,沒有簡單的方法可以確定當前顯示的頁面。部分原因是,這是因爲用戶不一定一次只能看到一個頁面。他可能正在查看一頁的結尾,並且可能會顯示下一頁的開頭或幾頁,這取決於他的查看設置。
如果我可以讓問題稍微容易些,那麼也許我可以用一種可以幫助你的方式來回答問題。讓我將「當前活動(對用戶可見)頁面」重新定義爲選擇所在的頁面。 (實際上,由於選擇可以跨越多頁,因此我們將其定義爲「所選活動端的頁面」)。
我還會回答使用VBA,因爲在VBA立即窗口中使用VBA更容易,並且在需要時轉換爲C#(它畢竟是同一個對象模型)是微不足道的。
單詞的Selection
對象的屬性爲Range
,如果您只是想要所有選定的單詞,那麼這將是微不足道的(Selection.Words
!)。但是,如果我們想要所有的單詞,那麼我們需要努力一點。
首先,讓我們來看看哪個頁面(開始)是選中的。對於這一點,我們可以使用信息的方法:
pageNumber = Selection.Information(wdActiveEndPageNumber)
所以,現在我們知道了什麼頁面我們感興趣的是我們現在需要獲得一個Range
對象,包括網頁上的所有文本。我們需要分兩步進行 - 首先找到該範圍的開始和結束。
要查找範圍的開始,我們可以使用Goto
函數,該函數返回一個表示一個指定項的開始Range對象:
startOfRange = ActiveDocument.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, pageNumber).Start
範圍的端部是的任一個開始下頁(減去一個字符,但我們不要狡辯),或文檔的末尾(如果我們在最後一頁):
If pageNumber = ActiveDocument.Content.Information(wdNumberOfPagesInDocument) Then
endOfRange = ActiveDocument.Content.End
Else
endOfRange = ActiveDocument.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, pageNumber + 1).Start
End If
現在,我們可以構造一個Range
對象涵蓋的所有文字頁面:
Set pageRange = ActiveDocument.Range(startOfRange, endOfRange)
...並從那裏我們可以得到的話:
Set words = pageRange.Words
下面是一個使用上述技術報告活動頁面上的單詞數短的VBA宏:
Sub Test()
Dim pageNumber As Integer
Dim startOfRange As Integer
Dim endOfRange As Integer
Dim pageRange As Range
pageNumber = Selection.Information(wdActiveEndPageNumber)
startOfRange = ActiveDocument.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, pageNumber).Start
If pageNumber = ActiveDocument.Content.Information(wdNumberOfPagesInDocument) Then
endOfRange = ActiveDocument.Content.End
Else
endOfRange = ActiveDocument.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, pageNumber + 1).Start
End If
Set pageRange = ActiveDocument.Range(startOfRange, endOfRange)
MsgBox pageRange.Words.Count
End Sub
UPDATE 好的,事實證明有一個更簡單的方法來做到這一點。 Word有一個「特殊書籤」,指向當前頁面上的文本,所以這將與上述所有代碼一樣:
words = ActiveDocument.Bookmarks("\page").Range.Words
謝謝!你真的幫助了我。只有一個備註 - 在C#中訪問「page」書籤的單詞看起來像 'Application.ActiveDocument.Bookmarks.get_Item(「\\ Page」)。Range.Words'。 – Baurzhan
如果您使用的是最新版本的C#/ .NET,並且只是說'書籤[@「\ page」]',那麼您應該能夠避免'get_Item'方法。 –