Pregunta

Estamos manipulando nuestros documentos de Word 2007 desde .Net utilizando Palabra de interoperabilidad. Sobre todo haciendo cosas con los campos como en:

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

Esto deja el último campo en el documento seleccionado.

Así que, por el bien de la pulcritud nos gustaría posicionar el cursor en el final del documento (o incluso el Inicio estaría bien).

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

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

Editar

Parte de mi problema era que no lo hice como dejar el último campo seleccionado. Ahora se han dado cuenta de que puedo hacer

f.Unlink

para eliminar el mergefield y simplemente dejar el texto del campo no como texto sin formato. ¿Qué es más limpio, ya sea o no también cambiar la posición del cursor

¿Fue útil?

Solución

@Alexander Kojevnikov: Gracias por su ayuda, ya que me puso en el camino correcto. Sin embargo, me encontré con que tenía que aplicar el .GoTo al objeto Palabra de selección, 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)

Otros consejos

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.

No estoy seguro de que estoy usando el mismo entorno que usted, pero para ir a la 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

utilizo unidad Word_TLB en Delphi con Appliction a objetos Word.Application

como sigue:

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

generalmente Fin del documento palabra 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 era de inserción antes de la última línea.

La forma más fácil de averiguar un esquema para el código real es grabar una macro en Word para que la 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 fragmento de código siguiente muestra el uso para 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)

Espero que esto ayude.

Para cambiar la posición del cursor al final del documento actual en un C # Word De VSTO:

this.Application.ActiveDocument.Range(
this.Application.ActiveDocument.Content.End-1,
this.Application.ActiveDocument.Content.End-1).Select();

Cómo: mediante programación definir y seleccionar los rangos en los documentos

Prueba esto:

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

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

Puede utilizar el marcador predefinido:

EndOfDoc oDoc.Bookmarks.Item("\endofdoc").Range

Otros marcadores predefinidos:

ActiveDocument.Bookmarks("\Para").Copy "currpara"

https://msdn.microsoft.com / es-es / VBA / Palabra-VBA / artículos / predefinidas-marcadores

para un cargo neto:

mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top