2010-01-03 3 views
3

У меня есть окно WPF (с использованием C# в качестве кода позади), который имеет некоторые текстовые поля.
Что я хочу, когда пользователь нажимает кнопку печати, я хочу взять информацию об этих полях и использовать шаблон Microsoft Word 2003. В шаблоне есть несколько пустых полей, заполняемых этой информацией, поступающей из вдовы WPF.
Как я могу автоматизировать слово для этого?Как автоматизировать Microsoft Word 2003 из WPF?

ответ

4

Это очень просто:

  1. Добавить ссылку COM к "в Microsoft Word библиотеки 11,0 Object" (или использовать сборку Microsoft.Office.Interop.Word). Возможно, вам придется установить Visual Studio Tools для Office System и/или перейти к первичной сборке Interop, в зависимости от версий VS.NET и Office и того, что еще вы установили.

  2. Создайте объект приложения Word.Application var app = new Word.Application()

  3. Откройте документ с var doc = app.Documents.Open(...). Обратите внимание, что в C# 3.5 или ниже вы должны передать все параметры. Вы можете использовать переменную, инициализированную для System.Reflection.Missing.Value для большинства из них.

  4. Итерация doc.Fields с помощью Еогеаспа: чтение и разбор .Code диапазона данного поля, а затем обновить .Result диапазон поля в расчете на содержании текстового поля.

Например:

foreach(Field f in doc.Fields) 
    if(f.Code.Text.Contains("lastName")) 
    f.Result.Text = this.LastName; 
    ... 

это предполагает, что контекст данных класса есть DependencyProperty "LastName", который связан с XAML, как это:

<TextBox Text="{Binding LastName}" /> 
+2

Отличный ответ.Он появился, когда я все еще сочинял мои, поэтому я принял мои рекомендации по кодированию в знак уважения к вашим и просто сохранил ссылки на примеры. – ProfK

+0

@ Ray Burns: спасибо, у меня есть шаблонный документ с умножением Quick part и content control, но в 'doc.Fields.Count' равен 0. Как получить поля в documnet? –

2

Что вы делаете это из окна WPF не имеет значения. Кодекс должен делать всю автоматизацию. Ниже приведены некоторые ресурсы, которые могут помочь вам с инструкциями или примерами:

Обратите внимание, что это не рекомендуется делать на сервере. Я знаю, что ваше требование для Wpf, но это может привести к вовлечению в проект Silverlight.

КСТАТИ: Использование COM-объектов немного сложнее, чем обычные объекты .NET и Office COM объекты подавно:

Word Automation using C#

Обратите внимание на его первоначальное заявление:

Object oMissing = System.Reflection.Missing.Value() 
Object oTrue = true; 
Object oFalse = false; 

Это потому, что все параметры метода являются параметрами «ref», поэтому вы не можете передавать обычные константы, null, true и false.

Automation Samples Using Managed Code (Visual Basic or Visual C#)

Полный список образцов автоматизации.

+0

@profK Спасибо –

Смежные вопросы