2009-10-19 45 views
9

Chúng tôi đang thao tác các tài liệu Word 2007 của chúng tôi từ .Net bằng cách sử dụng Word Interop. Chủ yếu làm công cụ với các trường như sau:Vị trí con trỏ ở đầu/cuối của tài liệu Word

 For Each f In d.Fields 
      f.Select() 
      //do stuff with fields here    
     Next 

Lá này là trường cuối cùng trong tài liệu được chọn.

Vì vậy, vì lợi ích của sự lanh tay chúng tôi muốn đặt con trỏ tại cuối của tài liệu (hoặc thậm chí các bắt đầu sẽ là OK).

Googling cho câu trả lời không ném lên nhiều ... gần nhất tôi có thể nhận được dường như được cho thấy chúng ta cần phải liên quan đến chính mình với phạm vi hoặc đánh dấu. Có một phương thức GoTo cho đối tượng Document nhưng không có tùy chọn WdGoToItem nào mà nó cung cấp có ích.

Không có cách nào đơn giản để gửi con trỏ đến cuối (hoặc bắt đầu) của tài liệu?

Sửa

Một phần của vấn đề của tôi là tôi không thích rời khỏi trường cuối cùng được chọn. Bây giờ, tôi đã nhận ra rằng tôi có thể làm

f.Unlink 

để loại bỏ trường hợp nhất và chỉ để văn bản trường ở đó dưới dạng văn bản thuần túy. Đó là gọn gàng, có hay không chúng tôi cũng đặt lại vị trí con trỏ

Trả lời

12

@Alexander Kojevnikov: Cảm ơn sự giúp đỡ của bạn vì bạn đã cho tôi đi đúng hướng. Tuy nhiên tôi thấy tôi đã phải áp dụng .GoTo đối tượng Word Selection, không phải là Document. Như trong:

Dim what As Object = Word.WdGoToItem.wdGoToLine 
    Dim which As Object = Word.WdGoToDirection.wdGoToLast 

    //below line had no effect 
    //d.GoTo(what, which, Nothing, Nothing) 

    w.Selection.GoTo(what, which, Nothing, Nothing) 
+0

Về việc thi hành VisualStudio 2013 của tôi này đặt con trỏ tại ** bắt đầu ** của dòng cuối cùng, không hoàn toàn kết thúc của tài liệu. – Fuhrmanator

+0

@Fuhrmanator VS 2013 hoặc Office 2013? Tôi thấy một số hành vi khác nhau di chuyển từ Office 2010 (v14) sang Office 2013 (v15). Cả hai đều sử dụng IDE VS 2010, tuy nhiên –

+0

Cũng sử dụng VSTO 4.0 –

8

Đây là cách nó trông giống trong C#:

object missing = Missing.Value; 
object what = Word.WdGoToItem.wdGoToLine; 
object which = Word.WdGoToDirection.wdGoToLast; 
doc.GoTo(ref what, ref which, ref missing, ref missing); 

Tôi đoán nó sẽ được dễ dàng hơn trong VB.Net vì nó hỗ trợ các thông số tùy chọn.

2

Tôi không chắc chắn Tôi đang sử dụng môi trường tương tự như bạn, nhưng để đi đến bắt đầu hoặc cuối của tài liệu đây là những gì làm việc cho tôi:

Private Sub moveCursorToStartOfDocument() 
    w.Selection.HomeKey(WdUnits.wdStory, Nothing) 
End Sub 

Private Sub moveCursorToEndOfDocument() 
    w.Selection.EndKey(WdUnits.wdStory, Nothing) 
End Sub 
1

tôi sử dụng đơn vị Word_TLB trong Delphi với appliction object- Word.Application

như sau:

aWordDoc.Application.Selection.EndKey(wdStory,wdMove); 

thường kết thúc của tài liệu chữ là:

Selection.EndKey(WdUnits.wdStory, WdMovementType.wdMove) 

Khi tôi sử dụng

Selection.GoTo(Word.WdGoToItem.wdGoToLine, Word.WdGoToDirection.wdGoToLast, Nothing, Nothing); 
Selection.InsertFile('documnet.docx'); 

nội dung mới được chèn trước dòng cuối cùng.

1

Cách dễ nhất để tìm ra một phác thảo cho mã thực tế là để ghi lại một macro trong Word cho hành động cụ thể đó. Sau đó, bạn có thể sửa đổi các mã được tạo cho phù hợp với cú pháp khác nhau (s) của VB, VB.NET, C#, vv

Đoạn mã dưới đây trình bày cách sử dụng cho một ứng dụng VB.NET:

Imports wordNmSpace = Microsoft.Office.Interop.Word 
' Create an object for the application instance 
objWord = CreateObject("Word.Application") 

' Create a reference of the selection object within Word 
objSelection = objWord.Selection 

' Now comes the part where you move selection position to the end of document 
objSelection.endof(wordNmSpace.WdUnits.wdStory, wordNmSpace.WdMovementType.wdMove) 

Hope điều này có ích.

0

Hãy thử điều này:

int lNumberOfPages = 
    _WordDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false); 

WordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage,WordApp.WdGoToDirection.wdGoToLast, lNumberOfPages); 
Các vấn đề liên quan