//
Variant vWordApp;
Variant vWordDocs;
Variant vWordDoc;
Variant vWordTables;
Variant vWordTable;
Variant vWordCells;
Variant vWordCell;
int TablesCount;
int i, j, l;
bool IsFam, isNam, isPtr;
String sItem("Item");
String sRange("Range");
String sText("Text");
String sCount("Count");
String sCell("Cell");
int ColCount;
int RowCount;
AnsiString sFam;
AnsiString sNam;
AnsiString sPtr;
AnsiString sBrd;
AnsiString sNps;
TListItem *it;
AnsiString sNNps;
AnsiString sNBrd;
vWordApp = Variant::CreateObject("Word.Application");
vWordDocs = vWordApp.OlePropertyGet("Documents");
vWordDoc = vWordDocs.OleFunction("Open", fe1->Text.c_str()); // fe1 — контрол типа Edit, в котором имя файла .doc
vWordTables = vWordDoc.OlePropertyGet("Tables");
TablesCount = vWordTables.OlePropertyGet(sCount);
for(i = 1; i <= TablesCount; i++)
{ // ищем таблицы (коих там несколько) в документе…
vWordTable = vWordTables.OleFunction(sItem, i);
ColCount = vWordTable.OlePropertyGet("Columns").OlePropertyGet(sCount);
RowCount = vWordTable.OlePropertyGet("Rows").OlePropertyGet(sCount);
if(ColCount == 6 && RowCount >= 2) // и из них берём ту, которая нужной геометрии
{
vWordCell = vWordTable.OleFunction(sCell, 1, 1);
sFam = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
vWordCell = vWordTable.OleFunction(sCell, 1, 2);
sNam = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
vWordCell = vWordTable.OleFunction(sCell, 1, 3);
sPtr = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
if( sFam.UpperCase().Pos("ФАМИЛИЯ") &&
sNam.UpperCase().Pos("ИМЯ") &&
sPtr.UpperCase().Pos("ОТЧЕСТВО"))
{
for(j = 2; j <= RowCount; j++)
{
vWordCell = vWordTable.OleFunction(sCell, j, 1);
sFam = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
vWordCell = vWordTable.OleFunction(sCell, j, 2);
sNam = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
vWordCell = vWordTable.OleFunction(sCell, j, 3);
sPtr = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
vWordCell = vWordTable.OleFunction(sCell, j, 4);
sBrd = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
vWordCell = vWordTable.OleFunction(sCell, j, 6);
sNps = vWordCell.OlePropertyGet(sRange).OlePropertyGet(sText);
sNNps = sNps.SubString(1, 3)
+ "-" + sNps.SubString(5, 3)
+ "-" + sNps.SubString(9, 3)
+ " " + sNps.SubString(13, 2);
l = sBrd.UpperCase().Pos("Г.");
if(l)
{
sNBrd = sBrd.SubString(l - 11, 10).Trim();
sNBrd = sBrd.SubString(1, 2)
+ "." + sBrd.SubString(4, 2)
+ "." + sBrd.SubString(7, 4);
}
else
sNBrd.SetLength(0);
it = lv1->Items->Add(); // Найденное пихаем в ListView…
it->Caption = sNNps;
it->SubItems->Add(sFam.Trim());
it->SubItems->Add(sNam.Trim());
it->SubItems->Add(sPtr.Trim());
it->SubItems->Add(sNBrd);
}
}
}
}
vWordApp.OleProcedure("Quit"); // Нефиг Word в памяти оставлять!
Экспорт данных их BC++B в MS Office
Никто не может поделиться руководством, можно на англ. работы из Borland C++ 6/0 Builder с MS Word
через OLE Automation? Ответ можно на email [email]vadiv@mail.ru[/email]
Заранее спасибо
Вадим
Цитата:
Originally posted by ivad
Houston we have a problem!
Никто не может поделиться руководством, можно на англ. работы из Borland C++ 6/0 Builder с MS Word
через OLE Automation? Ответ можно на email [email]vadiv@mail.ru[/email]
Заранее спасибо
Вадим
Houston we have a problem!
Никто не может поделиться руководством, можно на англ. работы из Borland C++ 6/0 Builder с MS Word
через OLE Automation? Ответ можно на email [email]vadiv@mail.ru[/email]
Заранее спасибо
Вадим
Маленький примерчик: выдираем из Word-овского бланка некоего установленного образца фамилии, имена и отчества людей.
Код:
Прошу не пинать за некузявый и некрасивый код — прога была одноразовая, оптимизировать было бессмысленно.
Да, ещё хотел сказать: это на примитивном уровне работа с Word; если надо пример через Disp-межмордия или средствами OLE API, тады это тема долгого разговора, и проще действительно взять книгу...
Вдогонку:
Interfacing C++Builder With The World Using OLE Automation
Создание контроллеров автоматизации с помощью C++Builder
есть у меня набор доков по этому вопросу... погляди.