#c# #templates #ms-word
#c# #шаблоны #ms-word
Вопрос:
Я бы хотел изменить шаблон из множества документов Word, используя простую C #-программу.
Все эти документы основаны на стандартном шаблоне для стилей заголовков, шрифта и т.д… Мы хотели бы изменить этот шаблон (более конкретно: цвета заголовка и другие мелочи) и модифицировать текущие документы, чтобы использовать этот новый шаблон.
В Word это легко достигается нажатием кнопки «Шаблон документа» на вкладке «Конструктор» на ленте. Я использовал это руководство, чтобы сделать это.Это прекрасно работает и делает именно то, что должно: изменяет цвета заголовка и т.д. В соответствии с новым шаблоном.
Итак, вопрос прост: как мне сделать то же самое (прикрепить другой шаблон и изменить стили) из .NET-приложения?
Я думаю, мне следует использовать Microsoft.Офис.Взаимодействие.Пространство имен Word, но я застрял там…
Комментарии:
1. использование сборок взаимодействия — не очень хорошая идея, особенно если это asp.net приложение. Возможно, вы захотите использовать какую-нибудь реализацию ooxml с открытым исходным кодом или, возможно, коммерческие библиотеки, такие как aspose.
Ответ №1:
Мне удалось решить это самостоятельно, по-видимому, это было не так уж сложно. Это код, который я использовал:
object missing = System.Reflection.Missing.Value;
Word.Application wordApp = new Word.ApplicationClass();
Word.Document aDoc = null;
object readOnly = false;
object isVisible = false;
wordApp.Visible = false;
object filename = "d:\Testdocs\testfile.doc";
object saveAs = "d:\Testdocs\output.doc";
object oTemplate = "d:\Testdocs\Template.dotx";
aDoc = wordApp.Documents.Add(ref oTemplate, ref missing,
ref missing, ref missing);
aDoc = wordApp.Documents.Open(ref filename, ref missing,
ref readOnly, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref isVisible, ref missing, ref missing,
ref missing, ref missing);
aDoc.Activate();
aDoc.set_AttachedTemplate(oTemplate);
aDoc.UpdateStyles();
aDoc.SaveAs(ref saveAs, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing);
aDoc.Close(ref missing, ref missing, ref missing);
Комментарии:
1. Возможно ли использовать относительный путь для «filename»? Я пытался, и, похоже, это не сработало.