Здравствуйте, Igor_P, Вы писали:
I_P>Здравствуйте, Garri, Вы писали:
G>>Подскажите есть несколько вордовских шаблонов ".dot" необходимо подставить их в вордовский документ и заполнить его из C# т.е. беру первый шаблон заполняю и подставляю в ворд документ беру второй шаблон заполняю и подставляю в тотже вордовский докумет. подскажите где можно посмотреть????
I_P>Я делал так:
I_P>подключал вордовую сборку Microsoft.Office.Interop.Word.dll
I_P>в шаблоне писал макрос, в котором реализована логика работы с вордовскими документами (например сборка нескольких документов в один)
I_P>дальше такой код:
I_P>I_P> //что-то типо клиента для доступа в ворд
I_P> Microsoft.Office.Interop.Word.Application wordApp = null;
I_P> try
I_P> {
I_P> // если есть экземпляр - использовать его
I_P> Microsoft.Office.Interop.Word.Global wordGlob = new Microsoft.Office.Interop.Word.GlobalClass();
I_P> wordApp = wordGlob.Application;
I_P> }
I_P> catch
I_P> {
I_P> // если экземпляра нет - создать
I_P> wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
I_P> //не показываем ворд, чтобы при выполнении макроса не тормозил
I_P> wordApp.Visible = false;
I_P> }
I_P> // создание документа Word на основе заданного шаблона
I_P> object[] _params = new object[4];
I_P> _params[0] = dotfile; _params[1] = 0; _params[3] = 0;
I_P> _params[2] = Microsoft.Office.Interop.Word.WdNewDocumentType.wdNewBlankDocument;
I_P> //открываем новый документ на основе шаблона
I_P> Microsoft.Office.Interop.Word.Document wordDoc = wordApp.Documents.Add(ref _params[0],
I_P> ref _params[1], ref _params[2], ref _params[3]);
I_P> wordDoc.Select();
I_P> // вызов макроса, формирующего отчет
I_P> _params[0] = file; //первый параметр макроса
I_P> object _0 = null;
I_P> try
I_P> {
I_P> //здесь вызов макроса Report30 в ворде с передачей одного параметра
I_P> wordApp.Run("Report30", ref _params[0], ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0,
I_P> ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0,
I_P> ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0, ref _0);
I_P> //показываем ворд
I_P> wordApp.Visible = true;
I_P> }
I_P> catch(Exception ex)
I_P> {
I_P> MessageBox.Show("", "Ошибка",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
I_P> }
I_P> try
I_P> {
I_P> wordDoc.ActiveWindow.Visible = true;
I_P> }
I_P> catch{}
I_P>
I_P>если требовалось передать какие-нибудь данные из программы на С# в ворд, то в программе создавался файл (обычно хмл), а в ворде макрос, разбирающий этот файл и заполняющее документ его содержимым. Вызов макроса осуществляется методом Run, а путь ко временному хмл-файлу передается в первом параметре макроса.
I_P>Еще у нас один чувак пытался соединять книги Excel (копировать листы из одной в другую) через Interop и без макросов, но у него нифига не вышло.
А без макросов никак нельзя работать слишком муторно получиться т.к. шаблоны динамически добовляться должны и данные подставляються по букмаркам так что мне надо другой путь искать.