2009-03-03 3 views
2

Я использую Word Automation для управления некоторыми документами (yuk!). Я использую эту команду, чтобы получить закладку в документе.Автоматизация Word обнаруживает, что закладка находится в таблице

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

Что я хочу узнать, если эта закладка находится в таблице в документе или нет. Есть ли простой способ сделать это?

Я вызываю этот код из C# в приложении .NET.

ответ

1

Я не уверен, как это сработает с .net, но вот макрос, который демонстрирует эту идею. Объектная модель имеет тенденцию быть одинаковой, поэтому я не думаю, что будет трудно перевести на C# из 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 

Он работает путем проверки, если начало или конец закладки находится внутри диапазона каждой таблицы (во всем документе). Он будет работать, если какая-либо часть закладки находится внутри таблицы.

В качестве альтернативы, если вы нуждаясь, чтобы узнать, если закладка исключительно внутри таблицы вы хотели бы проверить на старт закладки, чтобы быть больше или равно начала стола и конце концов закладок чтобы быть меньше или равно концу таблицы.

--Kris

+0

Nice one. Я отдам его (после обеда). – Craig