C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Связь C++Builder5 и Word через OLE, Прочитать элемент таблицы из Word'а
kva
  Отправлено: 13.07.2004, 14:07


Не зарегистрирован







Помогите начинающему!
Как забраться в реальную таблицу документа fileName
фрагмент текста:

Variant Word=CreateOleObject("Word.Basic");
Word.Exec(Procedure("AppShow"));
Variant Document = Word.Exec(Procedure("FileOpen") << fileName);
Variant Table = Document.OlePropertyGet("Tables").OleFunction("Item", 1);

вызает ошибку на стадии выполнения последней строки
"Invalid variant type conversion"
** MDM
Отправлено: 16.07.2004, 10:09


Не зарегистрирован







QUOTE (kva @ 13/07/2004, 15:09)
Помогите начинающему!
Как забраться в реальную таблицу документа fileName
фрагмент текста:

Variant Word=CreateOleObject("Word.Basic");
Word.Exec(Procedure("AppShow"));
Variant Document = Word.Exec(Procedure("FileOpen") << fileName);
Variant Table = Document.OlePropertyGet("Tables").OleFunction("Item", 1);

вызает ошибку на стадии выполнения последней строки
"Invalid variant type conversion"

//Вот разбирайся, будут вопросы пиши:
#include <utilcls.h>
#include <sysvari.h>
#include <ComObj.hpp>
//Обрати внимание на подключаемые заголовки и их порядок подключения.
//У меня билдер 5 не пропатченный и подругому у меня не работает.
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant Word, Document, Table, Cell;
int RowCount, ColCount;

Word = CreateOleObject("Word.Application.8");
Word.OlePropertySet("Visible", true);
Word.OlePropertyGet("Documents").OleProcedure("Add");
Document = Word.OlePropertyGet("Documents").OleFunction("Item", 1);
Table = Document.OlePropertyGet("Tables").OleFunction("Add",
Document.OleFunction("Range", 0, 0), 5, 5);
RowCount = Table.OlePropertyGet("Rows").OlePropertyGet("Count");
ColCount = Table.OlePropertyGet("Columns").OlePropertyGet("Count");
for (int i=1; i <=RowCount; i++)
for(int j=1; j <=ColCount; j++) {
Cell = Table.OleFunction("Cell", i, j);
Cell.OlePropertyGet("Range").OleProcedure("InsertAfter",
WideString(IntToStr(i)) + WideString("-") + WideString(IntToStr(j)));
}
Document.OleProcedure("SaveAs", ChangeFileExt(Application-
>ExeName, ".doc"));
Word.OleProcedure("Quit");
}

Вернуться в Технологии COM/DCOM, ActiveX