Slon |
Отправлено: 06.02.2005, 01:19 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 19
|
Открыть Word не составляет труда (делаю как в уроках).
Не пойму как можно распознать таблицу в документе Word.
Как извлечь данные из таблицы?
Делаю следующим образом:
1) в Word создаю закладку в первой ячейке таблицы (назв. закладки "start")
2) в Builder открываю соответствующий файл Word и перехожу к закладке "start":
CODE |
HRESULT hr = CoInitialize(0);
if(FAILED(hr))
return -1;
Variant App, Doc;
try
{
App=Variant::GetActiveObject("Word.Application");
}
catch(...)
{
// Word íå çàïóùåí — çàïóñòèòü åãî
try
{
App=Variant::CreateObject("Word.Application");
}
catch (...)
{
Application->MessageBox("Íåâîçìîæíî îòêðûòü Microsoft Word!"
"Âîçìîæíî Word íå óñòàíîâëåí íà êîìïüþòåðå.","Îøèáêà",MB_OK+MB_ICONERROR);
return -1;
}
}
App.OlePropertySet("Visible",true);
try
{
App.Exec( PropertyGet("Documents")).Exec( Function("Open") << FileName);
Doc=App.OlePropertyGet("ActiveDocument");
}
catch(...)
{
Application->MessageBox("Îøèáêà îòêðûòèÿ äîêóìåíòà Microsoft Word!",
"Îøèáêà",MB_OK+MB_ICONERROR);
return -1;
}
//Ïåðåéäåì ê çàêëàäêå "start"
Variant range = Doc.OleFunction("GoTo",-1,0,0,"start");
|
3) Дальше записываю в ворде макрос, который позволит достать текст из второй ячейки таблицы:
CODE |
Selection.GoTo What:=wdGoToBookmark, Name:="start"
With ActiveDocument.Bookmarks
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
Selection.MoveRight Unit:=wdCell
MsgBox Selection.Text
|
4) Нужно шаг 3 перенести на билдер.
Я пытаюсь это сделать следующим образом:
Variant sel = Doc.OleFunction("MoveRight", 12, 1, 0); //Т.к. MoveRight(Unit,
//Count, Extend), wdCell == 12, wdMove == 0
sel.OlePropertyGet("Text");
На строке "Variant sel = Doc.OleFunction("Move", 12, 1, 0);" вываливается exception: "Project rised exeption class EOleSysError with message 'Неизвестное имя'".
Толком не пойму почему не вызывается функция MoveRight...
Надеюсь на Вашу помощь!
|
|
Rius |
Отправлено: 06.02.2005, 21:57 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
Вот достоверно рабочий код
CODE | Variant Documents = Word.OlePropertyGet("Documents");
Documents.OleProcedure("Add");
Variant ActiveDocument = Word.OlePropertyGet("ActiveDocument");
Variant Tables = ActiveDocument.OlePropertyGet("Tables");
ActiveDocument.OleProcedure("Select");
Variant Selection = Word.OlePropertyGet("Selection");
Variant Range = Selection.OlePropertyGet("Range");
Tables.OleProcedure("Add", Range, 1, 4);
Variant Font = Selection.OlePropertyGet("Font");
Font.OlePropertySet("Name", "Arial");
Font.OlePropertySet("Size", 14);
Font.OlePropertySet("Bold", "1");
Variant ParagraphFormat = Selection.OlePropertyGet("ParagraphFormat");
ParagraphFormat.OlePropertySet("Alignment", 2);
Selection.OleProcedure("TypeText", "Температура");
Selection.OleProcedure("MoveRight", 1);
Selection.OleProcedure("TypeText", "Код давления");
Selection.OleProcedure("MoveRight", 1);
Selection.OleProcedure("TypeText", "Код температуры");
Selection.OleProcedure("MoveRight", 1);
Selection.OleProcedure("TypeText", "Точка");
Selection.OleProcedure("MoveRight", 1); |
p.s. я на поиск этих переходов по закладкам столько времени угрохал... а уроки вроде смотрел
|
|
|