首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从互操作库(Doument.Paragraphs等)中识别对对象的唯一引用

从互操作库(Doument.Paragraphs等)中识别对对象的唯一引用
EN

Stack Overflow用户
提问于 2019-06-21 11:42:15
回答 1查看 386关注 0票数 3

我希望能够识别两个互操作变量对象何时引用相同的“实际”对象。例如,所谓“实际”,是指Microsoft Word文档中给定的段落或脚注。

vb中的示例:(注意,c#答案也可以,问题是与无关的语言)

代码语言:javascript
复制
Imports Microsoft.Office.Interop

Sub Tests()

    Dim WordApp as Word.Application = Globals.ThisAddIn.Application         
    Dim ThisDoc as Word.Document = WordApp.ActiveDocument
    Dim ThisSelection As Word.Selection = ThisDoc .Application.Selection
    If ThisSelection.Range Is Nothing Then Exit Sub

    Dim SelectedPara As Word.Paragraph = ThisSelection.Range.Paragraphs.First


    For Each MyPara As Word.Paragraph In ThisDoc.Paragraphs

        'Reference equality: Never finds a match
        If MyPara.Equals(SelectedPara) Then MsgBox("Paragraph Found by ref") 

        'Property equality: Seems to works ok with .ParaID
        If MyPara.ParaID = SelectedPara.ParaID Then MsgBox("Paragraph Found by Id")

    Next

End Sub

如您所见,通过引用比较对象变量不起作用。虽然这有点令人沮丧,但如果.ParaID没有说得那么少的话,我可以在文档属性上运行比较器:

保留给内部使用。

欢迎在以下方面发表任何评论:(1)如何避免使用.ParaID;(2)使用.ParaID作为唯一标识符的可靠性(有关此属性的任何信息也是受欢迎的,因为微软和谷歌对该主题保持沉默)。

这个问题也可以推广到其他集合,如Word.FootnotesWord.Bookmarks。我想Excel.Worksheets也会发生同样的情况,等等。

EN

回答 1

Stack Overflow用户

发布于 2019-06-21 20:37:08

在Word中可以通过多种方式来实现这一点。一种比较直接的方法是使用Range方法比较InRange属性。例如:

代码语言:javascript
复制
Sub Tests()

    Dim WordApp as Word.Application = Globals.ThisAddIn.Application         
    Dim ThisDoc as Word.Document = WordApp.ActiveDocument
    Dim ThisSelection As Word.Selection = WordApp.Selection
    If ThisSelection.Range Is Nothing Then Exit Sub

    Dim SelectedPara As Word.Range = ThisSelection.Range.Paragraphs.First.Range

    For Each MyPara As Word.Paragraph In ThisDoc.Paragraphs
        Dim rng as Word.Range = myPara.Range
        If rng.InRange(SelectedPara) And SelectedPara.InRange(rng) Then
          'They're the same
        Else
          'They're not the same
        End If
        rng = Nothing
    Next

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56702772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档