Николай |
Отправлено: 04.12.2003, 09:58 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Помогите пожалуйста!
Не могу разобраться как передать таблицу в Word и как в эту таблицу вставить данные. Открываю Word и записываю данные следующим образом.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant msWord;
bool isWordRunning = true;
// Проверяю запущен ли Word
try
{
msWord = Variant::GetActiveObject("Word.Basic");
}
catch(EOleSysError&)
{
isWordRunning = false;
}
if(!isWordRunning)
{ //Открываю Word
msWord = CreateOleObject("Word.Basic");
msWord.Exec(Procedure("AppShow"));//Word видимый
msWord.Exec(Procedure("FileNew") << "Normal");
}
msWord.Exec(Procedure("Insert") << "Этот текст вставляю в Word");
}
А как поступить с таблицами, если я не использую такие компоненты как "WordApplication", "WordDocument" и "WordFont" .
Заранее спасибо.
|
|
Valdemar |
Отправлено: 04.12.2003, 16:34 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Попробуйте так
CODE | Variant w, t, c;
w=GetActiveOleObject("Word.Application");
t=w.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables").OleFunction("Item",ind_table);
c=t.OleFunction("Cell",1,1); |
здесь
w — документ;
t — таблица с индексом ind_table
с — ячейка [1,1] в таблице t |
|
Николай |
Отправлено: 04.12.2003, 18:14 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Может быть что-то не так делаю, но при запуске выдает "Ошибка" |
|
Valdemar |
Отправлено: 05.12.2003, 09:12 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Приведенный пример взят из рабочей программы.
Строка
w=GetActiveOleObject("Word.Application");
подключается к уже открытому (к тому же активному) документу Word, в котором должна быть таблица номер ind_table. Если ни один документ не открыт или в активном документе нет таблицы с порядковым номером ind_table, то будет ошибка. |
|
Николай |
Отправлено: 05.12.2003, 11:41 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Спасибо за подсказку. |
|
** laifik |
Отправлено: 09.12.2003, 10:10 |
|
Не зарегистрирован
|
Тут все, что надо для Ворда
Код:
AnsiString NewFileName = ExtractFilePath(Application->ExeName) + ExtractFileName("Svodka.dot");
TVariant Template = NewFileName;
//Пустая строка
TVariant snew = "\n";
TVariant str;
//Направление сворачивания выделения
TVariant Direction = wdCollapseEnd;
//Определение количества записей после фильтрации таблицы
int chislr = 0;
TestModule->ADOQueryZapData->First();
for(TestModule->ADOQueryZapData->First(); !TestModule->ADOQueryZapData->Eof; TestModule->ADOQueryZapData->Next()) { chislr++; }
//Label13->Caption = "Количество записей в таблице: " +IntToStr(chislr);
//Соединение с Вордом
WordApp->Disconnect();
WordApp->Connect();
WordApp->GetDefaultInterface()->Visible = True;
//Запуск шаблона
WordApp->Documents->Add(&Template, EmptyParam);
//Вставить данные
SetFont();
//Включение текста заголовка 1
WordApp->Selection->InsertAfter(snew);
WordApp->Selection->InsertAfter(StringToOleStr("С В О Д К А\n"));
//Установка жирного шрифта
WordFont->ConnectTo(WordApp->Selection->Font);
WordFont->set_Bold(1);
WordParagraphFormat->ConnectTo(
WordApp->Selection->ParagraphFormat);
WordParagraphFormat->set_Alignment(wdAlignParagraphCenter);
//Снятие выделения
WordApp->Selection->Collapse(&Direction);
WordApp->Selection->InsertAfter(snew);
WordApp->Selection->InsertAfter(snew);
//Снятие выделения
WordApp->Selection->Collapse(&Direction);
WideString nr, nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10;
TablePtr tabler;
//Переход на вторую строку таблицы
int chislr1;
chislr1 = chislr+1;
//Формирование таблицы
WordApp->ActiveDocument->Tables->Add(WordApp->Selection->Range,chislr1,11); //создали таблицу 20 строк на 8 колонок
tabler=WordApp->ActiveDocument->Tables->Item(1);
tabler->LeftPadding=0;//отступы в ячейках слева
tabler->RightPadding=0;//и справа
WordApp->ActiveDocument->Range(EmptyParam,EmptyParam)->Font->Size=12;//размер шрифта
//Обрамление всей таблицы
tabler->Borders->set_OutsideLineWidth(wdLineWidth075pt);
tabler->Borders->set_InsideLineStyle(wdLineStyleSingle);
//Обрамление слева
tabler->Borders->Item(wdBorderLeft)->set_LineWidth(wdLineWidth075pt);
tabler->Borders->Item(wdBorderLeft)->set_LineStyle(wdLineStyleSingle);
//Обрамление справа
tabler->Borders->Item(wdBorderRight)->set_LineWidth(wdLineWidth075pt);
tabler->Borders->Item(wdBorderRight)->set_LineStyle(wdLineStyleSingle);
//Обрамление сверху
tabler->Borders->Item(wdBorderTop)->set_LineWidth(wdLineWidth075pt);
tabler->Borders->Item(wdBorderTop)->set_LineStyle(wdLineStyleSingle);
//Обрамление снизу
tabler->Borders->Item(wdBorderBottom)->set_LineWidth(wdLineWidth075pt);
tabler->Borders->Item(wdBorderBottom)->set_LineStyle(wdLineStyleSingle);
//Обрамление каждой ячейки
tabler->Cell(chislr1,11)->Range->Borders ->set_OutsideLineWidth(wdLineWidth075pt);
tabler->Cell(chislr1,11)->Range->Borders ->set_InsideLineStyle(wdLineStyleSingle);
//Формирование заголовка таблицы
nr="Дата";
nr1="От кого";
nr2="Марка машины";
nr3="TRF";
nr4="Время работы с...";
nr5="Время работы по...";
nr6="Время с подачей";
nr7="Направление";
nr8="1 час в руб.";
nr9="Оплата в руб.";
nr10="Фирма";
tabler->Cell(1,1)->Range->InsertAfter(nr); // вставка текста
tabler->Cell(1,1)->set_Width(63);
tabler->Cell(1,1)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,2)->Range->InsertAfter(nr1); // вставка текста
tabler->Cell(1,2)->set_Width(36);
tabler->Cell(1,2)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,3)->Range->InsertAfter(nr2); // вставка текста
tabler->Cell(1,3)->set_Width(87.2);
tabler->Cell(1,3)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,4)->Range->InsertAfter(nr3); // вставка текста
tabler->Cell(1,4)->set_Width(29.8);
tabler->Cell(1,4)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,5)->Range->InsertAfter(nr4); // вставка текста
tabler->Cell(1,5)->set_Width(69);
tabler->Cell(1,5)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,6)->Range->InsertAfter(nr5); // вставка текста
tabler->Cell(1,6)->set_Width(69);
tabler->Cell(1,6)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,7)->Range->InsertAfter(nr6); // вставка текста
tabler->Cell(1,7)->set_Width(69);
tabler->Cell(1,7)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,8)->Range->InsertAfter(nr7); // вставка текста
tabler->Cell(1,8)->set_Width(99);
tabler->Cell(1,8)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,9)->Range->InsertAfter(nr8); // вставка текста
tabler->Cell(1,9)->set_Width(54);
tabler->Cell(1,9)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,10)->Range->InsertAfter(nr9); // вставка текста
tabler->Cell(1,10)->set_Width(63);
tabler->Cell(1,10)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
tabler->Cell(1,11)->Range->InsertAfter(nr10); // вставка текста
tabler->Cell(1,11)->set_Width(99);
tabler->Cell(1,11)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
TestModule->ADOQueryZapData->First();
do
{
for (int row=2;row<=tabler->Rows->Count;row++)
{
WideString xr;
xr="";
//Для первого столбца "Дата"
tabler->Cell(row,1)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[15]->AsString));
tabler->Cell(row,1)->set_Width(63);
tabler->Cell(row,1)->Range->ParagraphFormat->Alignment=wdAlignParagraphLeft; //выравнивание
//Для второго столбца "От кого"
tabler->Cell(row,2)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[17]->AsString));
tabler->Cell(row,2)->set_Width(36);
tabler->Cell(row,2)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
//Для третьего столбца "Марка машины"
tabler->Cell(row,3)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[19]->AsString));
tabler->Cell(row,3)->set_Width(87.2);
tabler->Cell(row,3)->Range->ParagraphFormat->Alignment=wdAlignParagraphLeft; //выравнивание
//Для четвертого столбца "TRF"
tabler->Cell(row,4)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[22]->AsString));
tabler->Cell(row,4)->set_Width(29.8);
tabler->Cell(row,4)->Range->ParagraphFormat->Alignment=wdAlignParagraphCenter; //выравнивание
//Для пятого столбца "Время с..."
tabler->Cell(row,5)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[0]->AsString));
tabler->Cell(row,5)->set_Width(69);
tabler->Cell(row,5)->Range->ParagraphFormat->Alignment=wdAlignParagraphLeft; //выравнивание
//Для шестого столбца "Время по..."
tabler->Cell(row,6)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[1]->AsString));
tabler->Cell(row,6)->set_Width(69);
tabler->Cell(row,6)->Range->ParagraphFormat->Alignment=wdAlignParagraphLeft; //выравнивание
//Для седьмого столбца "Время с подачей"
tabler->Cell(row,7)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[4]->AsString));
tabler->Cell(row,7)->set_Width(69);
tabler->Cell(row,7)->Range->ParagraphFormat->Alignment=wdAlignParagraphLeft; //выравнивание
//Для восьмого столбца "Направление"
tabler->Cell(row,8)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[27]->AsString));
tabler->Cell(row,8)->set_Width(99);
tabler->Cell(row,8)->Range->ParagraphFormat->Alignment=wdAlignParagraphLeft; //выравнивание
//Для девятого столбца "1 час в руб."
tabler->Cell(row,9)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[29]->AsString));
tabler->Cell(row,9)->set_Width(54);
tabler->Cell(row,9)->Range->ParagraphFormat->Alignment=wdAlignParagraphRight; //выравнивание
//Для десятого столбца "Оплата"
tabler->Cell(row,10)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[6]->AsString));
tabler->Cell(row,10)->set_Width(63);
tabler->Cell(row,10)->Range->ParagraphFormat->Alignment=wdAlignParagraphRight; //выравнивание
//Для одиннадцатого столбца "Фирма"
tabler->Cell(row,11)->Range->InsertAfter(StringToOleStr(TestModule->ADOQueryZapData->Fields->Fields[24]->AsString));
tabler->Cell(row,11)->set_Width(99);
tabler->Cell(row,11)->Range->ParagraphFormat->Alignment=wdAlignParagraphLeft; //выравнивание
TestModule->ADOQueryZapData->Next();
}
}
while (TestModule->ADOQueryZapData->Eof!=TRUE);
//Форматирование заголовка таблицы
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке таблицы
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке таблицы
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке таблицы
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке таблицы
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
WordApp->Selection->MoveRight(&TVariant(wdCell)); // перейти к следующей ячейке таблицы
WordApp->Selection->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter; //выравнивание по центру
WordApp->Selection->SelectCell();
WordApp->Selection->Font->Bold = true;
//Код объединения ячеек
/* WordApp->Selection->Tables->Item(1)->Cell(1,2)
->Merge(WordApp->Selection->Tables->Item(1)->Cell(1, 5)); */
//Выделение строк
WordApp->Options->ReplaceSelection = true;
WordApp->Selection->Range->Cells->set_Height(41.85);
//Сделать шапку заголовком таблицы
WordApp->Selection->Rows->HeadingFormat = wdToggle;
//Снятие выделения
WordApp->Selection->Collapse(&Direction);
//TestModule->ADOQueryZapData это или Table или Query. Нет времени менять. Подставьте свой источник.
//Fields[29]- номер индекса поля в коде редактора таблицы или запроса
//Svodka.dot — название вордовского шаблона (можно запустить просто Ворд |
|
|