Примеры изменения документов Word из C#
В последнее время, довольно часто приходится работать с документами Word из C#. Должен сказать что это неплохой механизм для формирования несложных отчётов. Получается довольно удобно — поскольку Word часто стоит на большинстве пользовательских компьютеров и отпадает необходимость установки на клиентский компьютер дополнительных компонент, вроде Crystal Report (они хоть и хороши, но когда надо что-то совсем простенькое то возможно лучше и без них).
Дополнительно хочется сказать о том, что если по какой либо причине на клиентской машине отсутствуют необходимые компоненты программы Word, то это остаётся практически незаметным, поскольку при первом же обращении они сами устанавливаются (что меня очень приятно удивило, но это касаемо того способа обращения к документам Word — который описан ниже).
Ниже приведены два примера работы с документом Word. Первый иллюстрирует замену текста в документе — удобно использовать при автозаполнении договоров и подстановки нужных значений. Второй иллюстрирует заполнение таблиц — удобно использовать при создании несложных отчётов.
Пример№1 (Замена)
//Создаём новый Word.Application
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
//Загружаем документ
Microsoft.Office.Interop.Word.Document doc = null;
object fileName = "Здесь путь до файла Word формата *.doc";
object falseValue = false;
object trueValue = true;
object missing = Type.Missing;
doc = app.Documents.Open(ref fileName, ref missing, ref trueValue,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
//Теперь у нас есть документ который мы будем менять.
//Очищаем параметры поиска
app.Selection.Find.ClearFormatting();
app.Selection.Find.Replacement.ClearFormatting();
//Задаём параметры замены и выполняем замену.
object findText = "<Что меняем>";
object replaceWith = "<На что меняем>";
object replace = 2;
app.Selection.Find.Execute(ref findText, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref replaceWith,
ref replace, ref missing, ref missing, ref missing, ref missing);
//Открываем документ для просмотра.
app.Visible = true;
Пример №2 (Заполнение таблицы)
//Создаём новый Word.Application
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
//Загружаем документ
Microsoft.Office.Interop.Word.Document doc = null;
object fileName = "Здесь путь до файла Word формата *.doc";
object falseValue = false;
object trueValue = true;
object missing = Type.Missing;
doc = app.Documents.Open(ref fileName, ref missing, ref trueValue,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
//Указываем таблицу в которую будем помещать данные (таблица должна существовать в шаблоне документа!)
Microsoft.Office.Interop.Word.Table tbl = app.ActiveDocument.Tables[1];
//Заполняем в таблицу - 10 записей.
for (int i=1; i<11; i++)
{
tbl.Rows.Add(ref missing);//Добавляем в таблицу строку.
//Обычно саздаю только строку с заголовками и одну пустую для данных.
tbl.Rows[i + 1].Cells[1].Range.Text = "Запись №"+i.ToString();
tbl.Rows[i + 1].Cells[2].Range.Text = "Запись №"+i.ToString();
tbl.Rows[i + 1].Cells[3].Range.Text = "Запись №"+i.ToString();
}
//Открываем документ для просмотра.
app.Visible = true;
Вот и всё. Надеюсь кому нибудь данная информация будет полезной.
P.S. чуть не забыл.
Для того, чтобы это дело всё заработало.
Необходимо добавить в проект Reference: Microsoft.Office.Interop.Word.