Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 079

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Как в отчёт RaveReports записать данные из StringGrid ?

TihiySap Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: TihiySap (статус: Посетитель)
Вопрос отправлен: 9 августа 2009, 23:24
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 19 августа 2009, 18:48; участников в обсуждении: 3.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 11 августа 2009, 20:37 [#1]:

наверное проще экспортировать в Excel
TihiySap

TihiySap (статус: Посетитель), 12 августа 2009, 09:50 [#2]:

А если не хочется привязывать свою прогу к наличию на ПК MS Excel? А Rave Reports насколько знаю интегрируется в exe'шник программы и не требует своей установки... Как вариант - перевод в html с последующим просмотром в броузере. Но здесь другая проблема - html знаю, а вот как и куда вставить разметку в коде программы никак не соображу(
P.S. Если это поможет, вот данные о системе: Win XP sp3, Delphi 10 Lite v3.0
Вадим К

Вадим К (статус: Академик), 12 августа 2009, 10:28 [#3]:

как вставить разметку? да проще простого.
var sl:TStringList;
begin
//....
sl := TStringList.Create;
try
  sl.Add('<html>');
  sl.Add('<body'>);
finally
  sl.free;
end;
дальше продолжать или идея понятна?
Галочка "подтверждения прочтения" - вселенское зло.
TihiySap

TihiySap (статус: Посетитель), 14 августа 2009, 16:29 [#4]:

to Вадим К:
спасибо за идею, наконец осилил это "проще простого" :)
вот что получилось:

procedure TFRnach.btPrintClick(Sender: TObject);
const
html:string='d:\test.html';
var sl:TStringList;
r,c: integer;
text,styleI,styleO: string;
begin
//StringGrid в html
sl := TStringList.Create;
try
sl.Add('<html>');
sl.Add('<body>');
sl.Add('<table border="' + IntToStr(1) + '"width="' +
IntToStr(tb.Width) + '"height="' + IntToStr(tb.Height) + '">');
for r := 0 to tb.RowCount - 1 do
begin
sl.Add('<tr height="15">');
for c := 0 to tb.ColCount - 1 do
begin
styleI := '';
styleO := '';
if fsbold in tb.Font.Style then
begin
styleI := styleI + '<b>';
styleO := styleO + '</b>';
end;
if fsitalic in tb.Font.Style then
begin
styleI := styleI + '<i>';
styleO := styleO + '</i>';
end;
if fsunderline in tb.Font.Style then
begin
styleI := styleI + '<u>';
styleO := styleO + '</u>';
end;
text := tb.Cells[c,r];
if Text = '' then Text := ' ';
sl.Add('<td width="' + IntToStr(tb.ColWidths[c]) +
'"height="' + IntToStr(tb.DefaultRowHeight) +
'"><font color="#' + IntToHex(tb.Font.Color, 6) +
'"face="' + tb.Font.Name + '">' + styleI +
Text + styleO + '</font></td>');
end;
sl.Add(' </tr>');
end;
sl.Add('</table>');
sl.Add('</body>');
sl.Add('</html>');
sl.SaveToFile('d:\test.html');
// Explore.LoadToFile ('d:\test.html');
ShellExecute(0,'open',pChar(html),NIL,NIL,SW_SHOWNORMAL);
finally
sl.free;
end;
end;

Смущает только ужасная высота строк, как её настроить?
Вадим К

Вадим К (статус: Академик), 14 августа 2009, 16:36 [#5]:

Что такое "ужасная высота строк"? Или имеется ввиду высота ячеек? ну выставляейте сколько надо. В чем проблема?
И второе. если кол-во текста будет большое (то есть счет пойдет на мегабайты и больше), то лучше писать либо сразу в файл, используя TFileStream или используя "строку в памяти" - TStringStream. При больших объемах данных можно получить хорошую производительность.
Плюс нашел одну ошибку в коде. если текст будет и курсив, и полужирный, то получим такую конструкцию
i u text /i /u (я угловые скобки убрал!)
а это нарушает правило, что хтмл теги должны быть вложеные, а пересечение вне закона. правда броузеры более-менее лояльно относяться к такому. Но переделать легко. Просто завершаюшие теги вместо
styleO := styleO + '';
пишите
styleO := '' + styleO;
Галочка "подтверждения прочтения" - вселенское зло.
TihiySap

TihiySap (статус: Посетитель), 19 августа 2009, 18:48 [#6]:

Кол-во будет такое: самая бальшая таблица - 11 колонок и строк 100-150.
В коде ещё ошибка была:
это if Text = '' then Text := ' ';
нужно переделать на это if Text = '' then Text := '&nbsp;';

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.02 сек.