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. по крайней мере за внешний вид я спокоен — ничего никуда не уедет )) |
|
Alisa |
Отправлено: 03.10.2005, 14:51 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
QUOTE (Dimon.Ru @ 28/09/2005, 13:33) | Я, конечно, не знаю какого рода отчет, но сам всегда вывожу отчеты в Excel. по крайней мере за внешний вид я спокоен — ничего никуда не уедет )) |
Спасибо, но этот вариант не подходит...
|
|
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
|
|