2009-03-03 10 views
2

J'utilise Word Automation pour manipuler certains documents (yuk!). J'utilise cette commande pour obtenir un signet dans un document.L'automatisation de Word détermine si un signet est dans une table

Object oBookmark = "MyBookmarkName"; 
Range oRngoBookmark = wordDocument.Bookmarks.get_Item(ref oBookmark).Range; 

Ce que je veux savoir est si ce signet est dans une table dans le document ou non. Y a-t-il un moyen facile de faire cela? J'appelle ce code de C# dans une application .NET.

Répondre

1

Je ne sais pas comment cela fonctionnerait avec .net, mais voici une macro qui expose l'idée. Le modèle d'objet a tendance à être le même, donc je ne pense pas qu'il sera difficile de traduire en C# à partir de VBA.

Sub BookmarksInTables() 
    Dim aTable As Table 
    Dim aBookmark As Bookmark 

    For Each aBookmark In ActiveDocument.Bookmarks 
     For Each aTable In ActiveDocument.Tables 
      'If start of book mark is inside the table range or 
      ' the end of a book mark is inside the table range then YES! 
      If (aBookmark.Range.Start >= aTable.Range.Start _ 
       And aBookmark.Range.Start <= aTable.Range.End) _ 
      Or (aBookmark.Range.End >= aTable.Range.Start _ 
       And aBookmark.Range.End <= aTable.Range.End) Then 
       MsgBox aBookmark.Name + " is inside a table" 
      Else 
       MsgBox aBookmark.Name + " is not inside a table" 
      End If 
     Next 
    Next 
End Sub 

Il fonctionne en vérifiant si le début ou la fin est à l'intérieur de la gamme de chaque table du signet (dans le document entier). Cela fonctionnera si une partie du signet est à l'intérieur d'une table.

Alternativement, si vous besoin de savoir si le signet est exclusivement dans une table que vous voulez vérifier le de signet pour le début à être supérieur ou égal au départ et final de la marque de la table être inférieur ou égal à la fin de la table.

--Kris

+0

Nice. Je vais essayer (après le déjeuner). – Craig

Questions connexes