Pergunta

Estamos manipulando nossa palavra documentos de 2007 do .NET usando o Word Interop. Principalmente fazendo coisas com campos como em:

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

Isso deixa o último campo no documento selecionado.

Então, por uma questão de limpeza, gostaríamos de posicionar o cursor no fim do documento (ou mesmo o começar seria bom).

Pesquisando no Google para a resposta não levanta muito ... o mais próximo que posso obter parece estar sugerindo que precisamos nos envolver com faixas ou favoritos. Há um GoTo Método para o Document objeto, mas nenhum dos WdGoToItem As opções que oferecem são úteis.

Não existe uma maneira simples de enviar o cursor até o fim (ou iniciar) do documento?

Editar

Parte do meu problema era que não gostei de deixar o último campo selecionado. Agora percebi que posso fazer

f.Unlink

Para remover o mergefield E apenas deixe o texto do campo lá como texto simples. Qual é o mais limpo, se também reposicionamos o cursor

Foi útil?

Solução

@Alexander Kojevnikov: Obrigado pela sua ajuda porque você me coloca no caminho certo. No entanto, descobri que tinha que aplicar o .goto ao objeto de seleção de palavras, não ao documento. Como em:

    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)

Outras dicas

É assim que fica em 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);

Eu acho que será ainda mais fácil no vb.net, pois suporta parâmetros opcionais.

Não tenho certeza se estou usando o mesmo ambiente que você, mas para ir para o começar ou fim do documento aqui está o que funciona para mim:

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

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

Eu uso unidade word_tlb em delphi com objeto de aplicação- word.application

como segue:

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

Geralmente o fim do documento do Word é:

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

Quando eu uso

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

Novo conteúdo foi inserido antes da última linha.

A maneira mais fácil de descobrir um esboço para o código real é gravar uma macro no Word para essa ação específica. Em seguida, você pode modificar o código gerado para se adequar a diferentes sintaxes de VB, VB.NET, C# etc.

O snippet de código abaixo demonstra o uso de um aplicativo 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 isto ajude.

Para alterar a posição do cursor no final do documento atual em um add-in c# word-in vsto:

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

Ver Como: definir e selecionar programaticamente intervalos em documentos

Experimente isso:

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

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

Você pode usar o favorito predefinido:

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

Outros favoritos predefinidos:

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

https://msdn.microsoft.com/en-us/vba/word-vba/articles/predefined-bookmarks

Para o escritório da rede:

mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top