OfficeOpenXML – это тот, формат в каком вы по умолчанию сохраняете документы, работая в Word и Excel: docx и xlsx. Файл представляет собой zip-архив. Его можно переименовать в zip, открыть архиватором и рассмотреть, что внутри:

Для работы с office документами нам понадобятся:
Качаем OpenXMLSDKTool с сайта Microsoft и устанавливаем его:
Запускаем Open XML SDK 2.0 Productivity Tool:
Загружаем в программу наш документ и кликаем «Reflect Code»:
- Создаем проект в Visual Studio. Пусть это будет простое консольное C#-приложение
- Добавим в проект необходимые сборки:
DocumentFormat.OpenXml.dll
- C:\Program Files (x86)\Open XML SDK\V2.0\lib\DocumentFormat.OpenXml.dll
WindowsBase.dll
- C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll
- Добавляем файл «GeneratedClass.cs»
- Копируем туда код из Open XML SDK 2.0 Productivity Tool, из окошка ReflectedCode
- Закрываем файл, сохранив его, переходим в Program.cs
- В метроде Main: new GeneratedCode.GeneratedClass().CreatePackage(@”E:\Zaiavka_na_komandirovky.docx”);
- Запускайте!
На диске вы увидете сгенерированый файл E:\Zaiavka_na_komandirovky.docx
Всё. Код для генерации документа готов. Документ будет выглядеть точно так же, как он выглядел перед тем, как вы сохранили его в Word.
Как же все это работает?
Из метода Main мы запускаем метод CreatePackage() который создает файл, давайте заглянем глубже что он собой являет:
// Creates a WordprocessingDocument.
public
void CreatePackage(string filePath)
{
using (WordprocessingDocument package = WordprocessingDocument.Create(filePath, WordprocessingDocumentType.Document))
{
CreateParts(package);
}
}
Тут у нас опять запускается другой метод CreateParts(package) – ключевой метод который вызывает методы для генерации всех частей документа.
private
void CreateParts(WordprocessingDocument document)
{
ExtendedFilePropertiesPart extendedFilePropertiesPart1 = document.AddNewPart<ExtendedFilePropertiesPart>(“rId3″);
GenerateExtendedFilePropertiesPart1Content(extendedFilePropertiesPart1);
MainDocumentPart mainDocumentPart1 = document.AddMainDocumentPart();
GenerateMainDocumentPart1Content(mainDocumentPart1);
DocumentSettingsPart documentSettingsPart1 = mainDocumentPart1.AddNewPart<DocumentSettingsPart>(“rId3″);
GenerateDocumentSettingsPart1Content(documentSettingsPart1);
StylesWithEffectsPart stylesWithEffectsPart1 = mainDocumentPart1.AddNewPart<StylesWithEffectsPart>(“rId2″);
GenerateStylesWithEffectsPart1Content(stylesWithEffectsPart1);
StyleDefinitionsPart styleDefinitionsPart1 = mainDocumentPart1.AddNewPart<StyleDefinitionsPart>(“rId1″);
GenerateStyleDefinitionsPart1Content(styleDefinitionsPart1);
ThemePart themePart1 = mainDocumentPart1.AddNewPart<ThemePart>(“rId6″);
GenerateThemePart1Content(themePart1);
FontTablePart fontTablePart1 = mainDocumentPart1.AddNewPart<FontTablePart>(“rId5″);
GenerateFontTablePart1Content(fontTablePart1);
WebSettingsPart webSettingsPart1 = mainDocumentPart1.AddNewPart<WebSettingsPart>(“rId4″);
GenerateWebSettingsPart1Content(webSettingsPart1);
SetPackageProperties(document);
}
Сдесь обратите внимание на метод GenerateMainDocumentPart1Content(MainDocumentPart mainDocumentPart1)
Он содержит основной код для генерации документа, там будет много кода, вы можете по поиску найти нужный вам текст(который был в ворд документе) и заменить его и уже при новом запуске программы сгенерируется документ с другим текстом, который вы уже можете подставлять динамически, так же обратите внимание на то каким кодом генерируется основная часть документа и по аналогии допишите свою часть.
Файл проекта