Копирование шаблона документа в активный документ - PullRequest
0 голосов
/ 26 сентября 2019

Я делаю Office плагин для Word.Использование Microsoft.Office.Interop.У меня есть несколько файлов .dotm (шаблоны).При нажатии кнопки мне нужно скопировать весь текст из одного .dotm в мой активный документ.Я не могу понять, как я могу положить в переменную активный документ.Так что я могу вставить информацию.

Я пробовал несколько способов.Теперь я пытаюсь открыть .dotm скопировать текст оттуда, а затем вставить его в свой активный.Но это не работает.Word будет запускаться без ошибок (при запуске в Visual Studio), а затем, когда я нажимаю кнопку, он сообщает, что в этом документе нет открытого документа: var MyDoc = app.ActiveDocument;

1)

private void Button1_Click(object sender, RibbonControlEventArgs e)
        {
            var app = new Microsoft.Office.Interop.Word.Application();
            var MyDoc = app.ActiveDocument;
            var sourceDoc = app.Documents.Open(@"C:\install\CSharp\test.docx");
            sourceDoc.ActiveWindow.Selection.WholeStory();
            sourceDoc.ActiveWindow.Selection.Copy();
            MyDoc.ActiveWindow.Selection.Paste();

2)

var newDocument = new Microsoft.Office.Interop.Word.Document();
            newDocument.ActiveWindow.Selection.Paste();
            newDocument.SaveAs(@"C:\install\CSharp\test1.docx");

Но если я так поступлю (2): Это сработает.Но мне нужно вставить в свой активный документ.Также я думаю, что метод копирования и вставки не очень хорош.Мэйби, есть другой способ импортировать один документ в другой.

1 Ответ

0 голосов
/ 26 сентября 2019

Никогда, никогда, никогда не делай (2).Использование new Microsoft.Office.Interop.Word.Document(); наверняка вызовет непредвиденные проблемы утечки памяти.Word позволяет вам это делать, но это не поддерживается.new следует использовать только для нового экземпляра приложения Word.

Вместо этого используйте Documents.Add, ссылаясь на файл шаблона.Это создаст копию шаблона в виде нового документа - очень просто:

private void Button1_Click(object sender, RibbonControlEventArgs e)
{
    var app = new Microsoft.Office.Interop.Word.Application();
    var MyDoc = app.Documents.Add(@"C:\install\CSharp\test.docx");
}
...