Word позднее связывание
От: vehfl  
Дата: 24.10.06 06:12
Оценка:
подскажите пжл где можно прочитать про позднее связывание с Wordom, если можно не на уровне простого открытия документа, а с примером работы с объектами Selection или Range активного документа
пытаюсь сам слдующим образом(поиск текста)

string findstr = "G071";
object selection = wordDocuments.GetType().InvokeMember("Selection", BindingFlags.GetProperty, null, oWord, null);
selection.GetType().InvokeMember("Text", BindingFlags.GetProperty, null, selection, new object[] { findstr});
selection.GetType().InvokeMember("Find", BindingFlags.InvokeMethod, null, selection, null);

но при работе появляется ошибка "Exception has been thrown by the target of an invocation. mscorlib" которая как я думаю связанна с неверным указанием последнего параметра
Re: Word позднее связывание
От: vehfl  
Дата: 24.10.06 06:47
Оценка:
еще один вопрос вдогонку: как в клиенте (C#) получить значение ячейки в таблице, например [1,1]?
Re: Word позднее связывание
От: vehfl  
Дата: 26.10.06 06:57
Оценка:
методом проб и ошибок опредедлил что поиск надо делать таким образом:
object oFind = selection.GetType().InvokeMember("Find",BindingFlags.GetProperty,null,selection,null);
oFind.GetType().InvokeMember("Text", BindingFlags.SetProperty, null, oFind, new object[] { "GU3" });
object resExecute = oFind.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, oFind, null);

но первоначальный вопрос остается открытым.

Неужели никто не работал с Wordom посредством позднего связывания?
Re[2]: Word позднее связывание
От: vehfl  
Дата: 30.10.06 13:02
Оценка:
к сожалению вопрос остается открытым
Re: Word позднее связывание
От: Andrbig  
Дата: 31.10.06 07:32
Оценка:
Здравствуйте, vehfl, Вы писали:

V>подскажите пжл где можно прочитать про позднее связывание с Wordom, если можно не на уровне простого открытия документа, а с примером работы с объектами Selection или Range активного документа

V>пытаюсь сам слдующим образом(поиск текста)

V>string findstr = "G071";

V>object selection = wordDocuments.GetType().InvokeMember("Selection", BindingFlags.GetProperty, null, oWord, null);
V>selection.GetType().InvokeMember("Text", BindingFlags.GetProperty, null, selection, new object[] { findstr});
V>selection.GetType().InvokeMember("Find", BindingFlags.InvokeMethod, null, selection, null);

V>но при работе появляется ошибка "Exception has been thrown by the target of an invocation. mscorlib" которая как я думаю связанна с неверным указанием последнего параметра


object app = Activator.CreateInstance (Type.GetTypeFromProgID ("Word.Application"));
app.GetType().InvokeMember ("Visible", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, null, app, new object[] { true });

object documents = app.GetType().InvokeMember ("Documents", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty, null, app, null);
documents.GetType().InvokeMember ("Add", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, documents, null);

object selection = app.GetType().InvokeMember ("Selection", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty, null, app, null);
selection.GetType().InvokeMember ("TypeText", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, selection, new object[] { "ok" });
selection.GetType().InvokeMember ("TypeParagraph", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, selection, null);
Re: Word позднее связывание
От: Аноним  
Дата: 31.10.06 13:03
Оценка:
[quote]
получить значение ячейки в таблице, например [1,1]
[/quote]
На BCB это выглядит так
Tables=Document.OlePropertyGet("Tables");
Tables.OleFunction("Add",Range,3,5);
Table=Tables.OleFunction("Item",1);
Cell=Table.OleFunction("Cell",1,1);
Cell.OlePropertyGet("Range").OlePropertySet("Text","Text");
Value=Cell.OlePropertyGet("Range").OlePropertyGet("Text");

Ну а перевести на C# — это просто.

BTW, При работе с M$ Office' вскими весчЪами, для уяснения че там твориться-то, пользуйтесь:
П.м. "Сервис" -> "Макрос" -> "Начать запись..."
и тогда вопросы типа: "...как установить перенос строк в ячейке..." и т.п. решаться в процессе набора
_________________
"Helo, word!" — 17 errors 56 warnings


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Word позднее связывание
От: Аноним  
Дата: 31.10.06 13:15
Оценка:
Работа с MS Word -> MS Word вместо QReport: работаем с таблицами в частности... Ну, а на C#...
А по поводу Find — поисчите сдесь
_________________
"Helo, word!" — 17 errors 56 warnings


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Word позднее связывание
От: vehfl  
Дата: 01.11.06 08:25
Оценка:
Здравствуйте, Ex_Soft, Вы писали:

E_S>[quote]

E_S>получить значение ячейки в таблице, например [1,1]
E_S>[/quote]
E_S>На BCB это выглядит так
E_S>
E_S>Tables=Document.OlePropertyGet("Tables");
E_S>Tables.OleFunction("Add",Range,3,5);
E_S>Table=Tables.OleFunction("Item",1);
E_S>Cell=Table.OleFunction("Cell",1,1);
E_S>Cell.OlePropertyGet("Range").OlePropertySet("Text","Text");
E_S>Value=Cell.OlePropertyGet("Range").OlePropertyGet("Text");
E_S>

E_S>Ну а перевести на C# — это просто.

E_S>BTW, При работе с M$ Office' вскими весчЪами, для уяснения че там твориться-то, пользуйтесь:

E_S>П.м. "Сервис" -> "Макрос" -> "Начать запись..."
E_S>и тогда вопросы типа: "...как установить перенос строк в ячейке..." и т.п. решаться в процессе набора

к сожалению не все так просто(((... это в Дельфи(Билдере) можно на этапе написания кода объявить переменную типа OleVariant и на этом же этапе писать вызовы функций и устанавливать(получать) свойства по аналогии с VBA в c# так не получается(((...
Re[2]: Word позднее связывание
От: vehfl  
Дата: 01.11.06 08:28
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>
A>object app = Activator.CreateInstance (Type.GetTypeFromProgID ("Word.Application"));
A>app.GetType().InvokeMember ("Visible", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, null, app, new object[] { true });

A>object documents = app.GetType().InvokeMember ("Documents", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty, null, app, null);
A>documents.GetType().InvokeMember ("Add", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, documents, null);

A>object selection = app.GetType().InvokeMember ("Selection", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty, null, app, null);
A>selection.GetType().InvokeMember ("TypeText", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, selection, new object[] { "ok" });
A>selection.GetType().InvokeMember ("TypeParagraph", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, selection, null);
A>


а как порлучить аналог следующекого корректного кода на VBA:

Selection.SelectRow
Selection.Cells(4).Range.Text = "fg"

SelectRow делаю так: selection.GetType().InvokeMember("SelectRow", BindingFlags.InvokeMethod, null, selection, null);
а вот как сделать Selection.Cells(4).Range.Text = "fg" не понимаю, а еще лучше как получить значение Selection.Cells(4).Range.Text
Re[2]: Word позднее связывание
От: Аноним  
Дата: 01.11.06 08:52
Оценка:
[quote]
к сожалению не все так просто(((
[/quote]
Да ну... Я свою библиотеку для M$ Excel (позднее связывание) из билдера перевел на C# без проблем...
4 example
BCB
Excel.OlePropertySet("Visible",true);
Excel.OlePropertySet("DisplayAlerts",false);


C#
Excel.GetType().InvokeMember("Visible",BindingFlags.SetProperty,null,Excel,new object[]{true});
Excel.GetType().InvokeMember("DisplayAlerts",BindingFlags.SetProperty,null,Excel,new object[]{false});


и т.д и т.п.
_________________
"Helo, word!" — 17 errors 56 warnings


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Word позднее связывание
От: vehfl  
Дата: 01.11.06 09:20
Оценка:
V>а как порлучить аналог следующекого корректного кода на VBA:

V>Selection.SelectRow

V>Selection.Cells(4).Range.Text = "fg"

V>SelectRow делаю так: selection.GetType().InvokeMember("SelectRow", BindingFlags.InvokeMethod, null, selection, null);

V>а вот как сделать Selection.Cells(4).Range.Text = "fg" не понимаю, а еще лучше как получить значение V>Selection.Cells(4).Range.Text

сам же и отвечу)... получение значения Selection.Cells(4).Range.Text

object oCells = selection.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, selection, null);
object oCell = oCells.GetType().InvokeMember("Item", BindingFlags.InvokeMethod, null, oCells, new object[] { 4 });
object oRange = oCell.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, oCell, null);
object otext = oRange.GetType().InvokeMember("Text", BindingFlags.GetProperty, null, oRange, null);
Re[3]: Word позднее связывание
От: Аноним  
Дата: 01.11.06 09:26
Оценка:
рекомендую, правда в 2005 не пашет
http://www.codeproject.com/office/wordml_template.asp
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Word позднее связывание
От: Аноним  
Дата: 01.11.06 09:26
Оценка:
рекомендую, правда в 2005 не пашет
http://www.codeproject.com/office/wordml_template.asp
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Word позднее связывание
От: vehfl  
Дата: 01.11.06 10:27
Оценка:
E_S>Да ну... Я свою библиотеку для M$ Excel (позднее связывание) из билдера перевел на C# без проблем...
есть подозрение что трудности возникали в моей голове)))... я не совсем точно понимал принципы и невнимательно читал хелп VBA в части определениячто является свойством, а что методом(например Item я по аналогии в delphi полагал что это ствойство, соотвественно обращался к нему c помощью GetProperties а не через InvokeMethod)
Re: Word позднее связывание
От: Аноним  
Дата: 26.03.08 14:16
Оценка:
Здравствуйте, Ex_Soft, Вы писали:

E_S>Работа с MS Word -> MS Word вместо QReport: работаем с таблицами в частности... Ну, а на C#...

E_S>А по поводу Find — поисчите сдесь

E_S>
данное сообщение получено с www.gotdotnet.ru

E_S>ссылка на оригинальное сообщение


http://support.microsoft.com/default.aspx?scid=kb;en-us;313104
Re[3]: Word позднее связывание
От: TK Лес кывт.рф
Дата: 26.03.08 15:12
Оценка:
Здравствуйте, vehfl, Вы писали:

V> к сожалению вопрос остается открытым


А что мешает написать код работы с вордом на любом другом языке с поддержкой позднего связывания?
При желании, на финальном этапе можно объединить все "лишнме" сборки в одну
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.