2013-11-06 4 views
0

Я хочу обновить все перекрестные ссылки в существующем Word Document с помощью приложения VB.net.Обновление перекрестных ссылок Word с использованием VB.NET

Например, мое слово документ (.docm) (я пишу комментарии между/- -/для понимания):

Моего названия документа: ТЕСТ НА ОБНОВЛЕНИЕ
/- это название в зАКЛАДКИ назвал "TITLE1" -/

заголовок документа: {REF TITLE1 \ ч}
/- {REF TITLE1 \ ч} код для перекрестной ссылки, которая ссылается на закладку "title1" -/
/- Этот текст находится в заголовке моего документа -/

Я использую приложение VB.net изменить название документа:
Ниже мой код:

Imports Microsoft.Office.Interop 

Public Sub UpdateWord() 
    Dim oWord As Word.Application 
    Dim oDoc As Word.Document 

    'Start Word and open the document template. 
    oWord = CreateObject("Word.Application") 
    oWord.Visible = False 
    oDoc = oWord.Documents.Open(Path_Word_Document) 

    oDoc.Bookmarks.Item("TITLE1").Range.Text = "My New Title" 

    oWord.Documents.Save() 
    oWord.Documents.Close() 
    oWord.Quit() 
End Sub 

Когда я запускаю этот подпункт, мой заголовок документа обновляется, но перекрестные ссылки сохранить старое значение заголовка ,

Знаете ли вы, что мне нужно сделать, чтобы обновить перекрестную ссылку в моем подразделении VB.net.

Благодаря

Я использую MS Word 2010, Visual Studio 2010 (.NET Framework 3.5) на Win7.

+0

Из этого кода мне не ясно, что вы хотите сделать. Вы открываете существующий файл и намереваетесь обновлять его ссылки? Но почему они не работают? Как вы можете видеть в этой ссылке (http://stackoverflow.com/questions/14299292/update-word-ref-microsoft-office-interop-word), Fields.Update предназначен для другой цели: создания данной ссылки и " пусть он начнет работать ». Не могли бы вы подробно рассказать о конкретной проблеме (работают ли ссылки, если вы открываете файл вручную, например?). – varocarbas

+0

Я меняю объяснения. Надеюсь, эта модификация поможет вам понять мою проблему. Если, вручную, я открываю документ с моим текстом, и я выбираю перекрестную ссылку, и я нажимаю F9, обновление работает. – Chalumeau

+0

Как показано в вышеупомянутой ссылке, в этих условиях (добавление заданной закладки во время выполнения) 'oDoc.Fields.Update()' должно работать. Вы говорите, что если вы напишете эту строку прямо под 'oDoc.Bookmarks.Item (« TITLE1 »). Range.Text =« My New Title »;' закрыть приложение и открыть документ Word вручную, он не обновляется? Вы пробовали написать 'oDoc.Save'? – varocarbas

ответ

2

Наконец-то я нашел решение.

Пожалуйста, позвольте мне показать код:

Imports Microsoft.Office.Interop 

Public Sub UpdateWord() 
    Dim oWord As Word.Application 
    Dim oDoc As Word.Document 
    Dim oHeader As Word.HeaderFooter 
    Dim oSection As Word.Section 

    'Start Word and open the document template. 
    oWord = CreateObject("Word.Application") 
    oWord.Visible = False 
    oDoc = oWord.Documents.Open(Path_Word_Document) 

    For Each oSection In oDoc.Sections 
     For Each oHeader In oSection.Headers 
      If oHeader.Exists Then 
       For Each oField In oHeader.Range.Fields 
        oField.Update() 
       Next oField 
      End If 
     Next oHeader 
    Next oSection 


    oWord.Documents.Save() 
    oWord.Documents.Close() 
    oWord.Quit() 
End Sub 

Спасибо вам Varocarbas за вашу помощь.

+0

Добро пожаловать, но я ничего не делал (на самом деле, мое намерение теперь рассматривало проблему дальше). Если это сработает, я думаю, что вы заслуживаете +1. – varocarbas

+0

Это замечательно, спасибо. Вся документация в онлайн-офисе гласит, что поля в верхних и нижних колонтитулах обновляются, когда вы получаете все объекты Field из Document.StoryRanges и вызывают обновление для каждого из них. Это не работает в Office 2007 - я попробовал его, и обновлены только поля в документе. Тем не менее, проблема с вашим методом работает отлично. – Winger

Смежные вопросы