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

 
Доступ к Word таблице из Builder -?, Получение доступа к таблице Word
Elin
Отправлено: 23.06.2003, 12:16


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







wink.gif Не могу понять как добраться к ячейке тоблици из Buildera — ?
В Helpe по Visual Basic есть пример типа :
[COLOR=red]
ActiveDocument.Tables(1).Cell(1, 1).Range.InsertAfter "First write"
[COLOR=blue]

но в Builder 5.0 не работает код типа

WordAplication1->ActiveDocument->Tables(1)->Cell(2,3)->Range->InsertAfter(TVariant("First write"));

так тоже не работает :

WordAplication1->ActiveDocument->Tables[1]->Cell[2,3]->Range->InsertAfter(TVariant("First write"));

и вообще пишет, что у ActiveDocument нет метода Tables (точнее наверное объекта )
аналогично и у Tables нет свойства Cell

И как спрашивается мне добратся до ячеек таблицы ?
Гость_Evgenyy
Отправлено: 24.06.2003, 11:53


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







Этот кусок кода когдато работал


__fastcall Totchet::Connect(void)
{
if (WordApplication1->Documents->Count == 0)
{
Application->MessageBox("В Word нет открытого документа",
"Команда не выполнена",
MB_OK + MB_ICONEXCLAMATION);
Abort();
}
WordDocument1->ConnectTo(WordApplication1->ActiveDocument);
N3->Enabled = true;
N4->Enabled = true;
N5->Enabled = true;
N9->Enabled = true;
}
//---------------------------------------------------------------------------
//SELECT o.mydate, p.name, pp.name, t.name, t.vesNeTykovan, o.countmoney FROM people p, people pp, oplata o, tovar t WHERE o.id_pokupatel=p.id AND o.id_prodavec=pp.id AND o.id_tovar=t.id AND p.name <> pp.name");

void __fastcall Totchet::N3Click(TObject *Sender)
{
TVariant Direction = wdCollapseEnd; // свернуть выделение "в конец"
// TVariant snew = "\n"; // перевод на новую строку
// TVariant stab = "\t"; // табуляция

Connect();
// изменить шрифт worda-a на 12
WordFont1->ConnectTo(WordApplication1->Selection->Font);
WordFont1->Size = 12;
WordParagraphFormat1->ConnectTo(WordApplication1->Selection->ParagraphFormat);
// Перейти к первой ячейке таблицы word-a, в которую будет вносится информация из программы
for (int j=0; j<7; j++)
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

// ----- start transaktion ---------------------
addSotrudnik->IBTransParus->StartTransaction();
// ----- open dataset --------------------------
// addSotrudnik->parus->DataSets[4]->Open();
IBQueryPeople->Open();
IBQueryPeople->First();
while( !IBQueryPeople->Eof )
{
// WordApplication1->Selection->InsertAfter( snew );

WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorWhite; //wdColorAutomatic
WordApplication1->Selection->InsertAfter( TVariant(IBQueryPeople->FieldByName("mydate")->AsString ) );
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorWhite; //wdColorAutomatic
WordApplication1->Selection->InsertAfter( TVariant(IBQueryPeople->FieldByName("name")->AsString ) );
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorWhite; //wdColorAutomatic
WordApplication1->Selection->InsertAfter( TVariant(IBQueryPeople->FieldByName("name1")->AsString ) );
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorWhite; //wdColorAutomatic
WordApplication1->Selection->InsertAfter( TVariant(IBQueryPeople->FieldByName("name2")->AsString ) );
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorWhite; //wdColorAutomatic
WordApplication1->Selection->InsertAfter( TVariant(IBQueryPeople->FieldByName("vesNeTykovan")->AsString ) );
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorWhite; //wdColorAutomatic
WordApplication1->Selection->InsertAfter( TVariant(IBQueryPeople->FieldByName("countMoney")->AsString ) );
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

// WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы
// WordApplication1->Selection->InsertAfter( TVariant(IBQueryPeople->FieldByName("prole")->AsString) );
// WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы

IBQueryPeople->Next();
}
IBQueryPeople->Close();
addSotrudnik->IBTransParus->Commit();

// изменитьцвет фона одной из заключительных ячеек
WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorGray10;
// Записать сумму денег в таблицу
WordApplication1->Selection->InsertAfter( TVariant( "Общая сумма денег " ) );
for (int i = 0; i < 5; i++) // Перейти к последней ячейке
{
WordApplication1->Selection->MoveRight( &TVariant(wdCell) ); // перейти к следующей ячейке таблицы
WordApplication1->Selection->Cells->Shading->BackgroundPatternColor = wdColorGray10;
}

// Посчитать общую сумму денег за выбранный период времени
addSotrudnik->IBTransParus->StartTransaction();
IBQSumMoney->Open();
IBQSumMoney->First();
WordApplication1->Selection->InsertAfter( TVariant( IBQSumMoney->FieldByName("dengi")->AsString ) );
IBQSumMoney->Close();
addSotrudnik->IBTransParus->Commit();

WordApplication1->Selection->Collapse(&Direction); //снять выделеие текста
}
//---------------------------------------------------------------------------


Гость_elin
Отправлено: 26.06.2003, 09:41


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







Чето совсем я не воткнул в этот код.
Но врочем я уже разобрался методом "тыка"
Нашел такой вот способ :

TablePtr myt;
CellPtr myc;
ZSWap1->Connect();
ZSWap1->Visible=true;

ZSWap1->ActiveDocument->Tables->Add(ZSWap1->Selection->Range,11,2);
myt=ZSWap1->ActiveDocument->Tables->Item(1) ;

myc=myt->Cell(1,1);
myc->Range->Text=TVariant("Строчка будет записана в таблице");
//---------------------------------------------

Здесь ZSWap1 — имя компонента Builder — а WordApplication

Короче — сам спросил, сам ответил — смешно! smile.gif

Вернуться в Вопросы программирования в C++Builder