Чтобы прочитать статью на английском языке, установите флажок Английский. Вы также можете просматривать текст на английском языке во всплывающем окне, наводя указатель мыши на текст.
Перевод
Английский
Рекомендуем использовать Visual Studio 2017

Архитектура смарт-тегов

Средства разработки Office в среде Visual Studio 2010 предоставляют гибкую объектную модель смарт-тегов, которая позволяет быстро добавлять смарт-теги в документы Microsoft Office Word и книги Microsoft Office Excel. В сложных скриптах можно также создать настраиваемый распознаватель смарт-тегов и получить доступ к данным смарт-тегов.

Дополнительные сведения о смарт-тегах см. в разделе Общие сведения о смарт-тегах.

Применение. Сведения этого раздела применяются к проектам уровня документа и уровня приложения для Excel 2007 и Word 2007. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.

Объектная модель для смарт-тегов разделяет смарт-теги и действия, которые они выполняют. В следующих разделах описываются основные объекты, используемые для создания смарт-тегов. Примеры кода, которые демонстрируют способы добавления смарт-тегов в документ, см. в разделах Практическое руководство. Добавление смарт-тегов в документы Word и Практическое руководство. Добавление смарт-тегов в книги Excel.

Смарт-теги

В коде смарт-теги являются объектом Microsoft.Office.Tools.Word.SmartTag или Microsoft.Office.Tools.Excel.SmartTag. Эти объекты обладают следующими свойствами:

  • Terms и Expressions. Эти свойства содержат распознаваемые термины для смарт-тегов. Чтобы задать простую строку, добавьте ее в свойство Terms. Чтобы задать сложную строку, добавьте регулярное выражение, описывающее строку, в свойство Expressions.

  • Actions . Это свойство содержит действия, выполняемые при выборе смарт-тега пользователем.

  • Caption . Это свойство задает метку смарт-тега.

Действия

Когда пользователь выбирает смарт-тег, он может выполнить одно или несколько действий, специфичных для данного смарт-тега. Каждое действие представляется объектом Microsoft.Office.Tools.Word.Action или Microsoft.Office.Tools.Excel.Action. Эти объекты предоставляют события BeforeCaptionShow и Click:

  • Событие BeforeCaptionShow происходит сразу после нажатия пользователем значка смарт-тега и перед отображением меню смарт-тега. Обработайте это событие, если необходимо изменить заголовок действия в меню смарт-тега во время выполнения.

  • Событие Click происходит сразу после нажатия пользователем заголовка действия в меню смарт-тега. Обработайте это событие для выполнения кода, когда пользователь щелкает действие.

Обработчики для этих событий получают объект Microsoft.Office.Tools.Excel.ActionEventArgs или Microsoft.Office.Tools.Word.ActionEventArgs, что обеспечивает доступ к распознанному тексту и месту расположения текста.

Создание смарт-тегов

Способ создания смарт-тега зависит от платформы, для которой предназначен проект: .NET Framework 3.5 или .NET Framework 4.

Если проект предназначен для платформы .NET Framework 3.5, SmartTag и Action являются классами, допускающими непосредственное создание экземпляров. В следующем примере кода показано, как создать простой смарт-тег в проекте Word, предназначенном для платформы .NET Framework 3.5. Для использования этого примера запустите код из класса ThisDocument в проекте уровня документа или из класса ThisAddIn в проекте уровня приложения.


Microsoft.Office.Tools.Word.SmartTag simpleSmartTag =
    new Microsoft.Office.Tools.Word.SmartTag(
    "www.microsoft.com/Demo#DemoSmartTag",
    "Test Smart Tag");
Microsoft.Office.Tools.Word.Action simpleAction = 
    new Microsoft.Office.Tools.Word.Action("Test Action");

simpleSmartTag.Terms.Add("blue");
simpleSmartTag.Actions = new Microsoft.Office.Tools.Word.Action[] { 
    simpleAction };
this.VstoSmartTags.Add(simpleSmartTag);


Если проект предназначен для платформы .NET Framework 4, SmartTag и Action являются интерфейсами и не допускают непосредственное создание экземпляров. Вместо этого для получения экземпляров этих объектов необходимо использовать в проекте методы CreateSmartTag и CreateAction, предоставляемые классом Globals. Дополнительные сведения о классе Globals см. в разделе Глобальный доступ к объектам в проектах Office. В следующем примере кода показано, как создать простой смарт-тег в проекте Word, предназначенном для платформы .NET Framework 4. Для использования этого примера запустите код из класса ThisDocument в проекте уровня документа или из класса ThisAddIn в проекте уровня приложения.


Microsoft.Office.Tools.Word.SmartTag simpleSmartTag =
    Globals.Factory.CreateSmartTag(
    "www.microsoft.com/Demo#DemoSmartTag",
    "Test Smart Tag");
Microsoft.Office.Tools.Word.Action simpleAction =
    Globals.Factory.CreateAction("Test Action");

simpleSmartTag.Terms.Add("blue");
simpleSmartTag.Actions = new Microsoft.Office.Tools.Word.Action[] { 
    simpleAction };
this.VstoSmartTags.Add(simpleSmartTag);


Дальнейшие инструкции и примеры кода, которые демонстрируют более сложные смарт-теги, см. в разделах Практическое руководство. Добавление смарт-тегов в документы Word и Практическое руководство. Добавление смарт-тегов в книги Excel.

Если требуется настроить используемое по умолчанию поведение распознавания смарт-тегов, можно создать свой собственный распознаватель смарт-тегов. Способ, которым это делается, зависит от платформы, для которой предназначен проект: .NET Framework 3.5 или .NET Framework 4.

Поведение по умолчанию при распознавании текста

Когда пользователь вводит текст в документе или рабочей книге, Word и Excel создают из текста список маркеров. Распознаватель смарт-тегов по умолчанию получает список токенов и полный введенный пользователем текст. Распознаватель по умолчанию определяет смарт-теги, если соблюдено одно из следующих условий:

  • Одна из строк в свойстве Terms точно совпадает с одним из маркеров в документе или рабочей книге.

  • Одно из регулярных выражений в свойстве Expressions совпадает с полным введенным пользователем текстом.

Во время набора текста пользователем приложения Word и Excel анализируют строки, содержащие внедренные пробелы, или строки, содержащие буквы, числа и символы, и разделяют их на отдельные маркеры. Например, если пользователь ввел "отчет по продажам", Word и Excel создадут маркеры "продажам" и "отчет". Аналогично, если пользователь ввел "продажи2005", Word и Excel создадут маркеры "продажи" и "2005".

Если требуется, чтобы смарт-тег распознавал строку, содержащую встроенные пробелы или строку с сочетанием букв, чисел и символов, не добавляйте строку в свойство Terms. Вместо этого добавьте регулярное выражение, которое описывает строку, в свойство Expressions или создайте собственный распознаватель, который будет выполнять поиск строки.

Создание распознавателей смарт-тегов в проектах, предназначенных для платформы .NET Framework версии 4

Чтобы создать свой собственный распознаватель смарт-тегов, определите класс, реализующий интерфейс Microsoft.Office.Tools.Word.ISmartTagExtension или Microsoft.Office.Tools.Excel.ISmartTagExtension. В реализации метода ISmartTagExtension.Recognize необходимо выполнить поиск терминов смарт-тега в тексте и зарегистрировать смарт-тег в Word или Excel, если термин смарт-тега будет найден. Чтобы зарегистрировать смарт-тег, вызовите метод PersistTag параметра context метода Recognize.

В следующем примере кода показано, как создать простой класс смарт-тега с пользовательским распознавателем в проекте Word, предназначенном для платформы .NET Framework 4.


public class SmartTagWithCustomRecognizer : Microsoft.Office.Tools.Word.ISmartTagExtension
{
    private Microsoft.Office.Tools.Word.SmartTag theSmartTag;

    public SmartTagWithCustomRecognizer()
    {
        theSmartTag = Globals.Factory.CreateSmartTag("www.microsoft.com/Demo#DemoSmartTag", 
            "Test Smart Tag", this);
        Microsoft.Office.Tools.Word.Action simpleAction = Globals.Factory.CreateAction("Test Action");
        theSmartTag.Actions = new Microsoft.Office.Tools.Word.Action[] { simpleAction };
    }

    public void Recognize(string text, Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite site, 
        Microsoft.Office.Interop.SmartTag.ISmartTagTokenList tokenList,
        Microsoft.Office.Tools.Word.SmartTagRecognizeContext context)
    {
        int index = text.IndexOf("blue");
        if (index >= 0)
        {
            context.PersistTag(index, 4, null);
        }
    }

    public object ExtensionBase
    {
        get { return theSmartTag; }
    }
}


Дальнейшие инструкции и примеры кода, которые демонстрируют более сложные классы смарт-тегов с пользовательскими распознавателями, см. в разделах Практическое руководство. Создание смарт-тегов с настраиваемыми распознавателями в Word и .NET Framework 4 и Практическое руководство. Создание смарт-тегов с настраиваемыми распознавателями в Excel и .NET Framework 4.

Создание распознавателей смарт-тегов в проектах, предназначенных для платформы .NET Framework версии 3.5

Чтобы создать свой собственный распознаватель смарт-тегов, создайте класс, производный от класса Microsoft.Office.Tools.Word.SmartTag или Microsoft.Office.Tools.Excel.SmartTag, затем переопределите метод SmartTag.Recognize этого класса. В своем методе выполните поиск терминов смарт-тега в тексте и зарегистрируйте смарт-тег в Word или Excel, если термин смарт-тега будет найден. Чтобы зарегистрировать смарт-тег, вызовите метод PersistTag, унаследованный вашим классом от класса Microsoft.Office.Tools.Word.SmartTag или Microsoft.Office.Tools.Excel.SmartTag.

В следующем примере кода показано, как создать простой класс смарт-тега с пользовательским распознавателем в проекте Word, предназначенном для платформы .NET Framework 3.5.


public class SmartTagWithCustomRecognizer : Microsoft.Office.Tools.Word.SmartTag
{
    public SmartTagWithCustomRecognizer() : base(
        "http://www.contoso.com/Demo#DemoSmartTag", 
        "Test Smart Tag")
    {
        Microsoft.Office.Tools.Word.Action simpleAction = 
            new Microsoft.Office.Tools.Word.Action("TestAction");
        this.Actions = new Microsoft.Office.Tools.Word.Action[] { simpleAction };
    }

    protected override void Recognize(string text, 
        Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite site, 
        Microsoft.Office.Interop.SmartTag.ISmartTagTokenList tokenList)
    {
        int index = text.IndexOf("blue");
        if (index >= 0)
        {
            this.PersistTag(index, 4, null);
        }
    }
}


Дальнейшие инструкции и примеры кода, которые демонстрируют более сложные классы смарт-тегов с пользовательскими распознавателями, см. в разделах Практическое руководство. Создание смарт-тегов с настраиваемыми распознавателями в Word и .NET Framework 3.5 и Практическое руководство. Создание смарт-тегов с настраиваемыми распознавателями в Excel и .NET Framework 3.5.

Смарт-теги могут хранить данные в коллекции пар "ключ-значение", которые известны под названием "контейнер свойств". Каждое значение и ключ в контейнере свойств является строкой.

Существует два способа доступа к контейнеру свойств.

  • Можно обрабатывать события Click или BeforeCaptionShow объекта Microsoft.Office.Tools.Word.Action или Microsoft.Office.Tools.Excel.Action и использовать свойство Properties параметра аргумента события для записи или чтения из контейнера свойств смарт-тега. Свойство Properties возвращает объект ISmartTagProperties. Интерфейс ISmartTagProperties доступен после добавления ссылки на библиотеку типов Microsoft Smart Tags 2.0 в проект.

  • Пользовательский распознаватель смарт-тегов можно создать в соответствии с приведенными выше инструкциями. В своей реализации или переопределении метода Recognize используйте метод GetNewPropertyBag параметра site для получения объекта ISmartTagProperties, который можно использовать для записи в контейнер свойств смарт-тега или чтения из него.

Примеры записи в контейнер свойств и считывания из него см. в указанных ниже разделах.

Регулярные выражения и контейнер свойств

После назначения регулярного выражения смарт-тегу, распознаватель по умолчанию добавляет пару "код-значение" для каждой захваченной группы регулярного выражения в контейнер свойств смарт-тега.

Пример, демонстрирующий это, см. в разделе Пошаговое руководство. Создание смарт-тега с помощью настройки уровня документа. Дополнительные сведения о захваченных группах в регулярных выражениях, см. в разделах Конструкции группирования и Объектная модель регулярных выражений.

Показ: