Word - Приложение - XML ... ( С# )
От: barabashka  
Дата: 10.01.07 20:39
Оценка:
Здравствуйте, програмисты.
Вынужден снова обратится к професионалам.

Вот такая заморочка :
Приложение (повторюсь) должно выдавать Ворд — документ.(что типа отчета)
Есть пример такого документа, но приложение должно "вставлять" в некоторые части этого документа меняющиеся данные.

Тоесть есть вариант в документ с помощью методов определенных в Microsoft.Office.Interop.Word "вставлять-заменять" что необходимо.

Но исходный (1-й) документ (шаблон) в котором будут расставлены "метки" где необходимо будет выполнить вставку-замену должен оставатся нетронутым.

Я ненашол как мне программно на C# копировать Word — документ ?? (классы, методы, или как знаете)

Причом тут XML ??

Мне кажется что хранить шаблон бы ло бы "красивее" (так сказать "более по програмистски" (не придумал более подходящего слова)) в виде XML файла (в меру его некоторых приемуществ перед doc-фалом) и темболее не каждый обычний юзер , если он залезет в директорию с с установленым приложением рискнет клацать мышью на файл такого вида, а Ворд-файл с искушение откроет глянуть еще и напортачить что-то.

Насолько я понимаю (правильно ли это?)
Необходимо сохранить этот документ в XML формате. 2003 Word отлично это делает, но если просмотривать содержимое то там трудно разобраться.

Насколько возможно и КАК мне потом образовать из этого XML-файла DOC(WORD) — файл, опять же копируя его ??? (классы, методы, или как знаете)

Пытался расписать ситуацию для тех кому интересно, может кто то с этим сталкивался и может/хочет поделится своей идеей.

Кому так уж ОБЛОМ ЧИТАТЬ —

1) Я ненашол как мне программно на C# копировать Word — документ ??
2) Насколько возможно и КАК мне образовать из XML-файла DOC(WORD) — файл, опять же копируя его ???
(классы, методы, или как знаете)
Re: Word - Приложение - XML ... ( С# )
От: Дьяченко Александр Россия  
Дата: 11.01.07 03:41
Оценка:
Здравствуйте, barabashka, Вы писали:

B>Здравствуйте, програмисты.

B>Вынужден снова обратится к професионалам.

B>Вот такая заморочка :

B>Приложение (повторюсь) должно выдавать Ворд — документ.(что типа отчета)
B>Есть пример такого документа, но приложение должно "вставлять" в некоторые части этого документа меняющиеся данные.
B>Тоесть есть вариант в документ с помощью методов определенных в Microsoft.Office.Interop.Word "вставлять-заменять" что необходимо.
B>Но исходный (1-й) документ (шаблон) в котором будут расставлены "метки" где необходимо будет выполнить вставку-замену должен оставатся нетронутым.

При создании документа можно указать шаблон на основе которого будет создан документ.
... << RSDN@Home 1.2.0 alpha rev. 668>>
Re: Word - Приложение - XML ... ( С# )
От: Viper84 Россия  
Дата: 11.01.07 10:57
Оценка:
Здравствуйте, barabashka,

я бы посоветовал копать в сторону VSTO
как то баловался с этой штукой, есть вроде рабочий код проекта в котором создан вордовый шаблон и при загрузке он заполняется из базы, в шаблоне простая таблица, котороая программно копируется на каждую запись в бд
если нужен код, могу вечерем выложить с пояснениями, просто на данный момент нет нужного компа под рукой.

удачи
Re[2]: Word - Приложение - XML ... ( С# )
От: barabashka  
Дата: 11.01.07 12:29
Оценка:
Здравствуйте, Viper84, Вы писали:

V>Здравствуйте, barabashka,


V>я бы посоветовал копать в сторону VSTO

V>как то баловался с этой штукой, есть вроде рабочий код проекта в котором создан вордовый шаблон и при загрузке он заполняется из базы, в шаблоне простая таблица, котороая программно копируется на каждую запись в бд
V>если нужен код, могу вечерем выложить с пояснениями, просто на данный момент нет нужного компа под рукой.

V>удачи


Да копаю потихоньку это VSTO, в MSDN-е так неудобно написано ...

По поводу кода ... то буду очень благодарен, если незатруднит.
Re[3]: Word - Приложение - XML ... ( С# )
От: Viper84 Россия  
Дата: 11.01.07 12:59
Оценка:
Здравствуйте, barabashka, Вы писали:

B>Да копаю потихоньку это VSTO, в MSDN-е так неудобно написано ...


B>По поводу кода ... то буду очень благодарен, если незатруднит.


согласен с доками не все так хорошо как хотелось бы, код вышлю часа через 3-5
Re[4]: Word - Приложение - XML ... ( С# )
От: barabashka  
Дата: 11.01.07 13:45
Оценка:
Вот попытался сегодня кое что написать ...


private void button1_Click(object sender, EventArgs e)
        {
            object missing = System.Reflection.Missing.Value;
            object fileName = @"C:\Name.dot";
            object newTemplate = false;
            object docType = 0;
            object isVisible = true;

            WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
            WordDoc = WordApp.Documents.Add(ref fileName, ref newTemplate, ref docType, ref isVisible);
            WordApp.Visible = true;
            //WordDoc.Activate();         
        }

        private void SearchReplace()
        {
            object missing = System.Reflection.Missing.Value;
            object replaceAll = Word.WdReplace.wdReplaceAll;

            WordApp.Selection.Find.ClearFormatting();
            WordApp.Selection.Find.Text = "[find me]";

            WordApp.Selection.Find.Replacement.ClearFormatting();
            WordApp.Selection.Find.Replacement.Text = " Found ";

            WordApp.Selection.Find.Execute(
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref replaceAll, ref missing, ref missing, ref missing, ref missing);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
            WordApp.Selection.Font.Bold = (int)Word.WdConstants.wdToggle;
            WordApp.Selection.TypeText("Name : Andrew");
            WordApp.Selection.TypeParagraph();
            WordApp.Selection.TypeText("SName : Яги");
            WordApp.Selection.TypeParagraph();
            WordApp.Selection.TypeText("YPA NAX !!!");
            WordApp.Selection.TypeParagraph();

            SearchReplace();
            //WordDoc.PrintPreview();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            object missing = System.Reflection.Missing.Value;
            object fileName = "normal.doc";
            object isSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
            WordDoc.SaveAs(ref fileName, 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, ref missing, ref missing);
            WordDoc.Close(ref isSaveChanges, ref missing, ref missing);
        }


После закрытия документа (WordDoc.Close(ref isSaveChanges, ref missing, ref missing);) сам Word то незакрывается,
но возникает вопрос как его закрыть, он остается висеть в процесах ("невидимый") для пользователя.
Re[3]: Word - Приложение - XML ... ( С# )
От: Viper84 Россия  
Дата: 11.01.07 18:42
Оценка: 2 (1)
Здравствуйте, barabashka, Вы писали:

Посмотрел код ниже, это случайно не vsto 2005, на самом деле я писал под 2003, сегодня посмотрел еще 2005 но что-то он сильно отличается, может я что-то установил не то, но я так и не нашел шаблона проекта по созданию вордового шаблона с логикой на c#, по поводу кода создается проект "шаблон вордового дока" и в шаблоне рисуется табличка, далее в обработке дока:

данный кусок запускается при создании документа по вышеописанному шаблону

        protected void ThisDocument_New()
        {
            try
            {
                ConfigReader cr = new ConfigReader();
                dataSourceConfig = cr.GetConfig();
                ThisApplication.ScreenUpdating = false;
                InitializeDB();
                CreateEntry();
            }
            catch(Exception e)
            {
                object location1 = 0;
                Word.Range temprng1 = ThisDocument.Range(ref location1, ref location1);
                temprng1.Text = e.Message;
            }
            finally
            {
                ThisApplication.ScreenUpdating = true;
            }
        }


данный кусок копирует и вставляет данные в табличку

        private void CreateEntry()
        {
            object startLocation = 0;
            SqlDataReader resultReader = null;
            try
            {
                connection.Open();
                cmd.CommandType = CommandType.Text;
                resultReader = cmd.ExecuteReader();

                //выбирается первая таблица в шаблоне и копируется в буфер
                object location = Type.Missing;
                Word.Range rngTable = ThisDocument.Tables[1].Range;
                rngTable.Select();
                rngTable.Cut();
                Word.Range rngStart = ThisDocument.Range(ref location, ref location);

                while(resultReader.Read())
                {
                    //скопированная табличка вставляется в конец дока
                    Word.Range rngTempStart = ThisDocument.Range(ref location, ref location);
                    rngStart.SetRange(rngTempStart.End, rngTempStart.End);
                    rngStart.Text = "\n\r";
                    rngTempStart = ThisDocument.Range(ref location, ref location);
                    rngTable.SetRange(rngTempStart.End, rngTempStart.End);
                    
                    rngTable.Paste();

                    //заполнение добавленной таблички
                    for(int counter = 0; counter < resultReader.FieldCount; counter++)
                    {
                        Word.Table curTable = ThisDocument.Tables[ThisDocument.Tables.Count];
                        if(counter == 0)
                        {
                            curTable.Cell(1, 1).Range.Text = dataSourceConfig.EntriesNames[counter] + " " + resultReader[counter].ToString();
                        }
                        else
                        {
                            curTable.Cell(counter + 1, 1).Range.Text = dataSourceConfig.EntriesNames[counter];
                            curTable.Cell(counter + 1, 2).Range.Text = resultReader[counter].ToString();
                        }
                    }
                }
            }
            finally
            {
                if(resultReader != null)
                    resultReader.Close();
                connection.Close();
            }
        }



по поводу вопроса закрытия, у меня просто запускается шаблон вордовый и тут же заполняется данными и пользователь сам решает сохранить ему все ето дело или просто закрыть ворд
Re[4]: Word - Приложение - XML ... ( С# )
От: barabashka  
Дата: 11.01.07 19:58
Оценка:
Здравствуйте, Viper84, Вы писали:

V>Здравствуйте, barabashka, Вы писали:


V>Посмотрел код ниже, это случайно не vsto 2005, на самом деле я писал под 2003, сегодня посмотрел еще 2005 но что-то он сильно отличается, может я что-то установил не то, но я так и не нашел шаблона проекта по созданию вордового шаблона с логикой на c#, по поводу кода создается проект "шаблон вордового дока" и в шаблоне рисуется табличка, далее в обработке дока:

...

Да это VSTO 2005, документация по подобным вопросам оставляет желать лучшего, в MSDNе и в Google рылся сегодня долго, и немогу похвастатся большими успехами (про MSDN кроме ругательст в голову вообще ниче н еприходит, в отношении этого вопроса).

Хоть ваш код и под 2003, надеюсь он поможет мне хоть как то с логико добавления таблиц.

З.Ы.: Закрыл я этото Ворд .. (с горем пополам)
Re[5]: Word - Приложение - XML ... ( С# )
От: Viper84 Россия  
Дата: 11.01.07 20:07
Оценка:
Здравствуйте, barabashka, Вы писали:

кстати если word не является обязательным условием, то можно посмотреть в сторону infopath тож входит в состав 2003 офиса, по крайней мере под него писать намноко приятнее и возможностей дофига(можно даж на javascripte писать), и с доками соответственно тож много лучше

PS если подойдет то у меня есть примерчики (очень даж ничего по сравнению с вордом)
Re[5]: Word - Приложение - XML ... ( С# )
От: AlexZu Россия  
Дата: 11.01.07 21:35
Оценка:
Здравствуйте, barabashka, Вы писали:

B> но возникает вопрос как его закрыть, он остается висеть в процесах ("невидимый") для пользователя.


WordApp.Selection.Find.Replacement.Text = " Found ";

Нельзя так обращаться с COM-объектами, для каждого COM-объекта, полученного через свойства, методы другого COM-объекта, вы должны после использования этого объекта вызвать метод Release (исп-я Marshal.ReleaseComObject).
Re[6]: Word - Приложение - XML ... ( С# )
От: barabashka  
Дата: 12.01.07 08:38
Оценка:
Здравствуйте, Viper84, Вы писали:

V>Здравствуйте, barabashka, Вы писали:


V>кстати если word не является обязательным условием, то можно посмотреть в сторону infopath тож входит в состав 2003 офиса, по крайней мере под него писать намноко приятнее и возможностей дофига(можно даж на javascripte писать), и с доками соответственно тож много лучше


V>PS если подойдет то у меня есть примерчики (очень даж ничего по сравнению с вордом)


Незнаю даже, времени мало, и я ничего нечитал (непримомню что бы даже слышал) про infopath. Какие его возможности, для чего он ? В моей задаче есть необходимостьв результате получить Word-документ, посколько пользователь (лабарант, технолог ХОЧЕТ получать именно Вордовский документ, ему с ним привычнее, удобнее работать)

Но если можете(/хочете) поделится знаниями(/инфой) буду блягодарен, всетаки для общего развития, лишним небудет.
Re[6]: Word - Приложение - XML ... ( С# )
От: barabashka  
Дата: 12.01.07 08:41
Оценка:
Здравствуйте, AlexZu, Вы писали:

AZ>Здравствуйте, barabashka, Вы писали:


B>> но возникает вопрос как его закрыть, он остается висеть в процесах ("невидимый") для пользователя.


AZ>
AZ>WordApp.Selection.Find.Replacement.Text = " Found ";
AZ>

AZ>Нельзя так обращаться с COM-объектами, для каждого COM-объекта, полученного через свойства, методы другого COM-объекта, вы должны после использования этого объекта вызвать метод Release (исп-я Marshal.ReleaseComObject).

Извините, мне трудно спорить с вами поскольку я в этом деле только новичок, но я основывался на MSDN-е, исходя из выших слов он (MSDN) врет чтоли ?


private void SearchReplace() 
{ 
    object replaceAll = Word.WdReplace.wdReplaceAll; 

    Application.Selection.Find.ClearFormatting(); 
    Application.Selection.Find.Text = "find me"; 

    Application.Selection.Find.Replacement.ClearFormatting(); 
    Application.Selection.Find.Replacement.Text = "Found"; 

    Application.Selection.Find.Execute(
        ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing, ref missing, ref missing, ref missing,
        ref replaceAll, ref missing, ref missing, ref missing, ref missing);
}
Re[7]: Word - Приложение - XML ... ( С# )
От: Viper84 Россия  
Дата: 12.01.07 09:00
Оценка:
Здравствуйте, barabashka, Вы писали:

B>Но если можете(/хочете) поделится знаниями(/инфой) буду блягодарен, всетаки для общего развития, лишним небудет.


по сути это простые формы похожие на вордовый документ которые могут поддерживать логику на с# или javascript, интерфейс работы с ними достаточно понятен как и с вордом, большой уклон в сторону интерактивности, с печатью работает нормально, есть возможность публиковать на iis и sharepoint portal, но пробовал токо с iis, хранится в формате xml, печать работает также как и в ворде, попозже могу примерчик накидать, могет подойдет.

удачи.
Re[7]: Word - Приложение - XML ... ( С# )
От: AlexZu Россия  
Дата: 12.01.07 12:04
Оценка:
Здравствуйте, barabashka, Вы писали:

AZ>>
AZ>>WordApp.Selection.Find.Replacement.Text = " Found ";
AZ>>

AZ>>Нельзя так обращаться с COM-объектами, для каждого COM-объекта, полученного через свойства, методы другого COM-объекта, вы должны после использования этого объекта вызвать метод Release (исп-я Marshal.ReleaseComObject).

B>Извините, мне трудно спорить с вами поскольку я в этом деле только новичок, но я основывался на MSDN-е, исходя из выших слов он (MSDN) врет чтоли ?


Врет наверное слишком сильно сказано, но вводит в заблуждение, это точно. Сознательно это делается (напр. чтобы код не загромождали не относящиеся к теме детали), или есть еще какие причины (тупой копи-паст с VB примеров)
К сожалению, таких некорректных примеров (для .NET) в MSDN полно.
Re[8]: Word - Приложение - XML ... ( С# )
От: barabashka  
Дата: 12.01.07 14:38
Оценка:
Здравствуйте, AlexZu, Вы писали:

AZ>Здравствуйте, barabashka, Вы писали:


AZ>>>
AZ>>>WordApp.Selection.Find.Replacement.Text = " Found ";
AZ>>>

AZ>>>Нельзя так обращаться с COM-объектами, для каждого COM-объекта, полученного через свойства, методы другого COM-объекта, вы должны после использования этого объекта вызвать метод Release (исп-я Marshal.ReleaseComObject).

B>>Извините, мне трудно спорить с вами поскольку я в этом деле только новичок, но я основывался на MSDN-е, исходя из выших слов он (MSDN) врет чтоли ?


AZ>Врет наверное слишком сильно сказано, но вводит в заблуждение, это точно. Сознательно это делается (напр. чтобы код не загромождали не относящиеся к теме детали), или есть еще какие причины (тупой копи-паст с VB примеров)

AZ>К сожалению, таких некорректных примеров (для .NET) в MSDN полно.

Как я уже сказал — нимагу спорить.
В таком случае подскажите где можно посмотреть, или сами напишите как правильно обращаться, что ли
Думаю вы догадываетесь что я этого незнаю, и неособо "дружу" с COM технологией (так немного что то слышал, но серезно азов особо незнаю )
Re[9]: Word - Приложение - XML ... ( С# )
От: AlexZu Россия  
Дата: 12.01.07 15:51
Оценка:
Здравствуйте, barabashka, Вы писали:

B>Как я уже сказал — нимагу спорить.

B>В таком случае подскажите где можно посмотреть, или сами напишите как правильно обращаться, что ли
B>Думаю вы догадываетесь что я этого незнаю, и неособо "дружу" с COM технологией (так немного что то слышал, но серезно азов особо незнаю )

Прочитайте про Runtime Callable Wrapper (RCW).

Пример из MSDN корректно переписать можно след. образом:

        private void SearchReplace() 
        { 
            object replaceAll = Word.WdReplace.wdReplaceAll; 
            Selection selection = null;
            Find find = null;
            Replacement replacement = null;

            try
            {
                selection = Application.Selection;
                find = selection.Find;

                find.ClearFormatting(); 
                find.Text = "find me"; 

                replacement = find.Replacement;
                replacement.ClearFormatting(); 
                replacement.Text = "Found"; 

                find.Execute(
                    ref missing, ref missing, ref missing, ref missing, ref missing, 
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref replaceAll, ref missing, ref missing, ref missing, ref missing);
            }
            finally
            {
                if (replacement != null)
                {
                    Marshal.ReleaseComObject(replacement);
                }
                if (find != null)
                {
                    Marshal.ReleaseComObject(find);
                }
                if (selection != null)
                {
                    Marshal.ReleaseComObject(selection);
                }
            }
        }
Re[7]: Word - Приложение - XML ... ( С# )
От: Viper84 Россия  
Дата: 12.01.07 20:34
Оценка:
Здравствуйте, barabashka, Вы писали:

B>Но если можете(/хочете) поделится знаниями(/инфой) буду блягодарен, всетаки для общего развития, лишним небудет.


для интеграции infopath & vs 2003 нужно InfoPath 2003 Toolkit for Visual Studio .NET
также может помочь InfoPath 2003 Software Development Kit (SDK) в основном для написания скриптов

как я уже говорил есть возможность писать на .net(на клиенте должен быть установлен .net & infopath 2003)
или на javascript(на клиенте соответственно нужен токо infopath 2003)

после установки всего етого должен появиться шаблон проектов infopath в vs2003, создаем шаблон по проекту
и у нас открывается проект в vs2003 и шаблон документа в infopath, накидываем контролов на формочку
каких угодно (полет фантазий) так же можно некоторые контролы привязать к данным из базы или веб службы,
в свойствах контролов можно найти обработчики событий при выборе которых создается обработчик в cs файле

пример обработчика дроп даун листа который модифицирует таблицу

// The following function handler is created by Microsoft Office InfoPath. Do not
// modify the type or number of arguments.
[InfoPathEventHandler(MatchPath="/my:myFields/my:поле3", EventType=InfoPathEventType.OnAfterChange)]
public void _43F__43E__43B__435_3_OnAfterChange(DataDOMEvent e)
{
    // Write code here to restore the global state.

    
    if (e.IsUndoRedo)
    {
        // An undo or redo operation has occurred and the DOM is read-only.
        return;
    }

    // A field change has occurred and the DOM is writable. Write code here to respond
    // to the changes.
    if(!flag)
    {
        IXMLDOMNode node = e.XDocument.DOM.selectSingleNode("/my:myFields/my:поле3");
        DOMNodeList nodeList = e.XDocument.DOM.selectNodes("/my:myFields/my:группа5/my:группа6");
        switch(node.text)
        {
            case "Add row":

                IXMLDOMNode newRootNode = this.thisXDocument.DOM.createNode((object)XMLELEM_TYPE.XMLELEMTYPE_TEXT, "группа6", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-12T18-14-04");

                IXMLDOMNode newNode1 = this.thisXDocument.DOM.createNode((object)XMLELEM_TYPE.XMLELEMTYPE_TEXT, "поле7", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-12T18-14-04");
                newNode1.text = "Default value 1";
                newRootNode.appendChild(newNode1);

                IXMLDOMNode newNode2 = this.thisXDocument.DOM.createNode((object)XMLELEM_TYPE.XMLELEMTYPE_TEXT, "поле8", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-12T18-14-04");
                newNode2.text = "Default value 2";
                newRootNode.appendChild(newNode2);

                IXMLDOMNode newNode3 = this.thisXDocument.DOM.createNode((object)XMLELEM_TYPE.XMLELEMTYPE_TEXT, "поле9", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-12T18-14-04");
                newNode3.text = "Default value 3";
                newRootNode.appendChild(newNode3);

                e.XDocument.DOM.selectNodes("/my:myFields/my:группа5")[0].appendChild(newRootNode);
                break;
            case "Delete row":
                e.XDocument.DOM.selectNodes("/my:myFields/my:группа5")[0].removeChild(nodeList[nodeList.length - 1]);
                break;
            case "Fill table":
                foreach(IXMLDOMNode each in nodeList)
                {
                    IXMLDOMNode col1 = each.selectSingleNode("my:поле7");
                    if(col1 != null && col1.text == string.Empty)
                    {
                        col1.text = "Default value 1";
                    }
                    if(col1 == null)
                    {
                        IXMLDOMNode newNode = this.thisXDocument.DOM.createNode((object)XMLELEM_TYPE.XMLELEMTYPE_TEXT, "поле7", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-12T18-14-04");
                        newNode.text = "Default value 1";
                        each.appendChild(newNode);
                    }

                    IXMLDOMNode col2 = each.selectSingleNode("my:поле8");
                    if(col2 != null && col2.text == string.Empty)
                    {
                        col2.text = "Default value 2";
                    }
                    if(col2 == null)
                    {
                        IXMLDOMNode newNode = this.thisXDocument.DOM.createNode((object)XMLELEM_TYPE.XMLELEMTYPE_TEXT, "поле8", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-12T18-14-04");
                        newNode.text = "Default value 2";
                        each.appendChild(newNode);
                    }

                    IXMLDOMNode col3 = each.selectSingleNode("my:поле9");
                    if(col3 != null && col3.text == string.Empty)
                    {
                        col3.text = "Default value 3";
                    }
                    if(col3 == null)
                    {
                        IXMLDOMNode newNode = this.thisXDocument.DOM.createNode((object)XMLELEM_TYPE.XMLELEMTYPE_TEXT, "поле9", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-12T18-14-04");
                        newNode.text = "Default value 3";
                        each.appendChild(newNode);
                    }
                }
                break;
        }
        flag = true;
    }
    else
    {
        flag = false;
    }
}


вот собственно картинка исполняемого шаблона


а вот архив проекта

затем форму можно разместить в расшаренной папки, iis или sharepoint portal

будут вопрос пищите, так сказать чем смогу

удачи

ЗЫ совсем забыл в пректе есть баг событие выполняется два раза подряд поетому заморочки с флагом, покачто не разобрался пачиму
Re[5]: Word - Приложение - XML ... ( С# )
От: Аноним  
Дата: 12.01.07 11:27
Оценка:
AlexZu:

Здравствуйте, barabashka, Вы писали:

B> но возникает вопрос как его закрыть, он остается висеть в процесах ("невидимый") для пользователя.




WordApp.Selection.Find.Replacement.Text = " Found ";
Нельзя так обращаться с COM-объектами, для каждого COM-объекта, полученного через свойства, методы другого COM-объекта, вы должны после использования этого объекта вызвать метод Release (исп-я Marshal.ReleaseComObject).


Мне казалось COM Wrapper-ы в .NET сами вызывают Release когда это нужно? По крайней мере так в MSDN пишут да и с точки зрения работы .NET это вполне реально выглядит


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.