Как я могу скопировать стили из шаблона в другой документ - PullRequest
1 голос
/ 04 февраля 2020

Я хочу скопировать стили шаблона из папки шаблонов Word или любой другой папки, которую я предпочитаю, с помощью команды в надстройке Word VSTO и передать скопированные стили в документ.

Пожалуйста, как мне это сделать. Я искал и видел, что это возможно, но не смог получить ни малейшего намека на коды c#, которые можно использовать для этого.

1 Ответ

0 голосов
/ 08 февраля 2020

Существует два основных способа копирования стилей из шаблона в документ, открытый в Word. Один из них - использование Организатора (первоначально использовавшегося в Word Basi c, поэтому он немного примитивен), а второй - присоединение шаблона со стилями к документу с последующим принудительным обновлением стилей.

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

Вторая заставляет документ адаптировать все стили в исходном шаблоне. Он также имеет «побочный эффект», заключающийся в том, что любые строительные блоки, сочетания клавиш и макросы становятся доступными для документа посредством ссылки на шаблон. И любые из этих вещей, которые были сделаны доступными через оригинальный шаблон, больше не будут доступны. Последнее можно исправить, повторно прикрепив исходный шаблон без обновления стилей после этого (см. Второй пример кода).

Органайзер

    private void btnCopyStyles_Organizer_Click(object sender, EventArgs e)
    {
        string tmplPath  = @"C:\Test\StylesTemplate.dotm";
        string[] aStyles = {"Heading 1", "Heading 2" };

        for (int i = 0; i == aStyles.Length- 1; i++)
        {
            wdApp.OrganizerCopy(tmplPath, wdApp.ActiveDocument.FullName, aStyles[i],
                Word.WdOrganizerObject.wdOrganizerObjectStyles);
        }
    }

Прикрепить шаблон

    private void btnCopyStyles_AttachTemplate_Click(object sender, EventArgs e)
    {
        string tmplPath  = @"C:\Test\StylesTemplate.dotm";
        Word.Document doc = wdApp.ActiveDocument;
        doc.set_AttachedTemplate(tmplPath);
        doc.UpdateStyles();
    }
...