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

 
Отчет в Word
Alisa
Отправлено: 23.09.2005, 16:42


Дежурный стрелочник

Группа: Участник
Сообщений: 33



Доброе время суток!
Возникла такая проблема:
Необходимо вывести отчет из базы данных в заранее созданный шаблон Word.
Где можно почитать об этом? Может быть имеются готовые примеры?

Заранее спасибо!
avc*
Отправлено: 23.09.2005, 17:31


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







Я эту проблему решил путем замены определенной последовательности символов на значения полей. Если нужно подробнее — в понедельник.
Alisa
Отправлено: 26.09.2005, 08:23


Дежурный стрелочник

Группа: Участник
Сообщений: 33



QUOTE (avc* @ 23/09/2005, 17:31)
Я эту проблему решил путем замены определенной последовательности символов на значения полей. Если нужно подробнее — в понедельник.

Если не сложно, то очень бы хотелось услышать поподробнее.
olegenty
Отправлено: 26.09.2005, 09:28


Ветеран

Группа: Модератор
Сообщений: 2412



а не проще воспользоваться FastReport и сделать экспорт в Word?
Alisa
Отправлено: 26.09.2005, 09:35


Дежурный стрелочник

Группа: Участник
Сообщений: 33



QUOTE (olegenty @ 26/09/2005, 09:28)
а не проще воспользоваться FastReport и сделать экспорт в Word?

Я все равно плохо представляю эту систему... Мне нужно, чтобы данные из моей базы перемещались в определенном порядке в заранее сделанный шаблон в Word. Такое можно сделать с помощью FastReport? никогда с ним не работала...
olegenty
Отправлено: 26.09.2005, 09:43


Ветеран

Группа: Модератор
Сообщений: 2412



посредством FastReport будет совсем не так. "шаблон" отчёта делается средствами Report Builder и ничего общего с Word НЕ ИМЕЕТ. затем, когда отчёт построен, это можно экспортировать в Word. Одна проблема — сложные отчёты не переносятся. SubReport со свойством DrawOnParent = true не ототбразится в отчёте Word. Других проблем вроде нет... (по крайней мере я ещё не столкнулся).
Alisa
Отправлено: 26.09.2005, 09:47


Дежурный стрелочник

Группа: Участник
Сообщений: 33



QUOTE (olegenty @ 26/09/2005, 09:43)
Одна проблема — сложные отчёты не переносятся.

А что Вы вкалдываете в понятие "сложный отчет"?
мне надо выводить информацию о человеке+договор заключенный с ним+сроки договора+некая таблица успеваемости(как в ВУЗе)+информация о документах...
Это сложный отчет?
AVC
Отправлено: 26.09.2005, 10:33


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (Alisa @ 26/09/2005, 07:23)

Если не сложно, то очень бы хотелось услышать поподробнее.

В шаблоне отчета (документ Word) в местах куда надо вписать информацию пишу <#fldИмя_поля_для_подстановки#>
Например
CODE

Наименование подключаемого объекта <#fldObjName#>
По  адресу: <#fldObjAddress#>
Установленная  мощность <#fldPower#> кВт

Прохожу по полям и даю Word'у команду "найти и заменить"
CODE

void __fastcall MSWordSubstitute
(Variant find
,const AnsiString &oldtext
,const AnsiString &newtext
)
{
Variant repl = find.OlePropertyGet("Replacement");
find.OleProcedure ("ClearFormatting");
repl.OleProcedure ("ClearFormatting");

find.OleProcedure ("Execute",
/* FindText          */ oldtext,
/* MatchCase         */ false,
/* MatchWholeWord    */ false,
/* MatchWildcards    */ false,
/* MatchSoundsLike   */ false,
/* MatchAllWordForms */ false,
/* Forward           */ true,
/* Wrap              */ 1,
/* Format            */ false,
/* ReplaceWith       */ newtext,
/* Replace           */ 2
);
}


Минусы
- Текст просматривается столько раз, сколько есть полей
- Поля с ошибочными именами остаются в тексте
- Не решена проблема вложенных таблиц
Все проблемы устраняются переходом на получение и просмотр текста документа.
olegenty
Отправлено: 26.09.2005, 10:48


Ветеран

Группа: Модератор
Сообщений: 2412



я же пояснил, что есть сложный — наличие SubReport с опцией DrawOnParent = true. на месте такого SubReport при экспоре будет пустое место.
Alisa
Отправлено: 26.09.2005, 13:51


Дежурный стрелочник

Группа: Участник
Сообщений: 33



А где можно взять FastReport, но так, чтобы вместе с Crack?
olegenty
Отправлено: 27.09.2005, 07:04


Ветеран

Группа: Модератор
Сообщений: 2412



для начала можно и Free попробовать. на fast-report.com.
Alisa
Отправлено: 28.09.2005, 07:50


Дежурный стрелочник

Группа: Участник
Сообщений: 33



QUOTE (olegenty @ 27/09/2005, 07:04)
для начала можно и Free попробовать. на fast-report.com.

Free версия у меня есть. Нужна именно версия с Crack.
Dimon.Ru
Отправлено: 28.09.2005, 13:33


Станционный диспетчер

Группа: Участник
Сообщений: 92



Я, конечно, не знаю какого рода отчет, но сам всегда вывожу отчеты в Excel. по крайней мере за внешний вид я спокоен — ничего никуда не уедет smile.gif))
Alisa
Отправлено: 03.10.2005, 14:51


Дежурный стрелочник

Группа: Участник
Сообщений: 33



QUOTE (Dimon.Ru @ 28/09/2005, 13:33)
Я, конечно, не знаю какого рода отчет, но сам всегда вывожу отчеты в Excel. по крайней мере за внешний вид я спокоен — ничего никуда не уедет smile.gif))

Спасибо, но этот вариант не подходит...
Admin
Отправлено: 06.10.2005, 19:55


Владимир

Группа: Администратор
Сообщений: 1190



А не проще ли почитать уроки по Excel на этом сайте (часть 3) ???

Там есть как раз этот пример, как вывести данные в шаблон Excel.
(я так понимаю что и в Word аналогично)

Отредактировано Admin — 06/10/2005, 19:56
gvg
Отправлено: 10.10.2005, 15:07


Машинист паровоза

Группа: Участник
Сообщений: 222



WD1 — TWordDocument
Вставка в таблицу
CODE

   WD1->Tables->Item( int( номер таблицы ))->Rows->Item( row )->Cells->Item( col )->Range->Text = StringToOleStr( text );

Заполнение текстового поля
CODE

 /*Word_2k::*/FormFieldsPtr ptrff = WD1->Get_FormFields();
 for( int i = 1; i <= ptrff->Count; i++ )
 {
   AnsiString Metka;
   Metka = ptrff->Item( &TVariant(i) )->Name;
   if( !Metka.IsEmpty())
   {
     AnsiString Str = func( Metka ).Trim();
     if ( Str != notfound )
     {
       ptrff->Item( &TVariant(i) )->Result = StringToOleStr(Str);
     }
   }
 }

- здесь func — функция, определяющая содержимое поля по имени поля=Metka, notfound=скажем "not_found" (если такая программой не обрабатывается)
Обработка колонтитулов сложней, но тоже можно...
Guest
Отправлено: 11.10.2005, 14:21


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







можно воспользоваться ReportF
http://www.vsi.ru/~apl/utils/reportf.zip
Rius
Отправлено: 13.10.2005, 08:05


Мастер участка

Группа: Участник
Сообщений: 321



Переход на закладку в MS Word (удобно для создания отчетов по шаблонам):
CODE
bool __fastcall TFormMain::GotoBookmark(Variant &Selection, AnsiString Name)
{
Selection.OleFunction("GoTo", wdGoToBookmark, 0, 0, Name.c_str());
}


Отредактировано Rius — 13/10/2005, 11:15

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