Вопрос

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

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

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

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

Это было полезно?

Решение

Я не уверен, как это будет работать с .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

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

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

--Крис

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top