Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VB.NET更新单词交叉引用_.net_Vb.net_Ms Word_Office Interop - Fatal编程技术网

使用VB.NET更新单词交叉引用

使用VB.NET更新单词交叉引用,.net,vb.net,ms-word,office-interop,.net,Vb.net,Ms Word,Office Interop,我想使用VB.net应用程序更新现有Word文档上的所有交叉引用 例如,my word document.docmI在/-/之间写注释以便于理解: 我的文档标题:要更新的测试 /-此标题位于名为TITLE1-/ 文档标题为:{REF TITLE1\h} /-{REF TITLE1\h}是引用书签TITLE1的交叉引用的代码-/ /-此文本位于我的文档的标题-/ 我使用VB.net应用程序更改文档标题: 下面是我的代码: Imports Microsoft.Office.Interop Publ

我想使用VB.net应用程序更新现有Word文档上的所有交叉引用

例如,my word document.docmI在/-/之间写注释以便于理解:

我的文档标题:要更新的测试 /-此标题位于名为TITLE1-/

文档标题为:{REF TITLE1\h} /-{REF TITLE1\h}是引用书签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  
启动此sub时,我的文档标题会更新,但交叉引用会保留旧标题值

你知道如何更新VB.net子系统中的交叉引用吗

谢谢


我在Win7上使用MS Word 2010、Visual Studio 2010.NET Framework 3.5。

最终我找到了解决方案

请让我显示代码:

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的帮助。

从这段代码中,我不清楚您想做什么。您正在打开现有文件并打算更新其引用?但它们为什么不起作用呢?正如您在这个链接中看到的,Fields.Update用于其他用途:创建一个给定的引用并允许它开始工作。你能不能详细说明一下,如果你手动打开文件,引用是否有效?我更改了解释。我希望这次修改能帮助你理解我的问题。如果手动打开word文档,选择交叉引用并按F9键,则更新会起作用。如上述链接所示,在这些情况下,在运行时添加给定书签,oDoc.Fields.update应该会起作用。你是说如果你把这行写在oDoc.Bookmarks.itemtTitle1.Range.Text=我的新标题下面;关闭应用程序并手动打开Word文档,它是否未更新?你试过写oDoc.Save吗?好的,我忘了一个我认为很重要的细节。交叉引用在标题中。是的,它非常重要。现在我在做别的事情。我可以在一段时间内做一些测试,如果我发现了什么,我会告诉你。不客气,但我实际上什么都没做,我的目的是进一步研究这个问题。如果有效,我想你应该得到+1。这太好了,谢谢。所有联机Office文档都说明,当您从Document.StoryRanges获取所有字段对象时,页眉和页脚中的字段都会更新,并对每个字段调用update。这在Office 2007中不起作用-我尝试过,只更新文档正文中的字段。但是,使用您的方法强制解决问题是非常有效的。