2009-10-19 40 views
9

Estamos manipulando nuestros documentos de Word 2007 desde .Net usando Word Interop. Principalmente haciendo cosas con los campos como en:Colocar el cursor al inicio/fin del documento de Word

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

Esto deja el último campo en el documento seleccionado.

Por lo tanto, en aras de la pulcritud nos gustaría posicionar el cursor al final del documento (o incluso el comenzar estaría bien).

Google para la respuesta no arroja mucho ... lo más cercano que puedo conseguir parece sugerir que tenemos que involucrarnos con rangos o marcadores. Hay un método GoTo para el objeto Document pero ninguna de las opciones de WdGoToItem que ofrece son útiles.

¿No hay una forma sencilla de enviar el cursor hasta el final (o inicio) del documento?

Editar

Parte de mi problema era que no me gusta dejar el último campo seleccionado. ahora se han dado cuenta de que puedo hacer

f.Unlink 

para quitar el campo de combinación y acaba de salir del campo de texto no como texto sin formato. ¿Qué es más limpio, ya sea o no también cambiar la posición del cursor

Respuesta

12

@Alexander Kojevnikov: Gracias por su ayuda porque me pusieron en el camino correcto. Sin embargo, descubrí que tenía que aplicar el .GoTo al objeto de selección de Word, no el documento. Como en:

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

En mi implementación VisualStudio 2013 Esto coloca el cursor al inicio ** ** de la última línea, no es el final del documento. – Fuhrmanator

+0

@Fuhrmanator VS 2013 u Office 2013? Veo un comportamiento diferente al pasar de Office 2010 (v14) a Office 2013 (v15). Ambos usan el IDE de VS 2010, sin embargo, –

+0

También usan VSTO 4.0 –

8

Esto es cómo se ve en 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); 

supongo que será aún más fácil en VB.Net, ya que admite parámetros opcionales.

2

No estoy seguro de que estoy usando el mismo entorno que usted, sino para ir al inicio o final del documento esto es lo que funciona para mí:

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

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

I utilizar unidad Word_TLB en Delphi con Appliction a objetos Word.Application

como siguiente:

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

extremo generalmente de documento de Word es:

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

cuando uso

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

nuevo contenido se inserta antes de la última línea.

1

La forma más fácil de averiguar un esquema para el código real es para grabar una macro en Word para esa acción específica. A continuación, puede modificar el código generado para adaptarse a diferentes sintaxis (s) de VB, VB.NET, C#, etc.

El siguiente fragmento de código muestra el uso de una aplicación 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) 

Esperanza esto ayuda.

0

Prueba esto:

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

WordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage,WordApp.WdGoToDirection.wdGoToLast, lNumberOfPages); 
Cuestiones relacionadas