
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.216.39] |
![]() |
|
Сообщ.
#1
,
|
|
|
Скажу сразу, я программист не профессионал, скорее - любитель.
Пишу редко, по необходимости. Есть задача - нахожу решение, насколько оно правильное, не знаю, главное все работает. Это я написал, чтобы сильно не плевались, если кому не понравится - пишу для тех, кому может пригодится. Итак, есть задача вывести в документ Опенофиса результат работы программы, т.е. отчет, в котором может быть как текст, так и таблицы StringGrid или DbGrid. Читал на форумах разные решения. Скажу, что ответы находил, но для меня сложные и трудоемкие. Для себя нашел решение такое. Чем и хочу поделиться. В компоненте Memo формируем html документ со всеми делами. В разделе <body></body> вставляем заголовки с наших label-ов, Edit-ов, формируем таблицу и считываем туда данные с наших таблиц. Когда html текст в Memo готов, сохраняем его в файл с расширением *.odt. И все. Должно получится примерно такое: ![]() ![]() Zag:='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'; Memo1.Lines.Add(Zag); Memo1.Lines.Add('<html>'); Memo1.Lines.Add('<head>'); Memo1.Lines.Add('<title>'+Label1.Caption+'</title>'); Memo1.Lines.Add('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'); Memo1.Lines.Add('</head>'); Memo1.Lines.Add('<body>'); Memo1.Lines.Add('<p><h2><em><div align="center">'+Label1.Caption+'</div></em></h2></p>'); Memo1.Lines.Add('<TABLE width="100%" border="2"><TR>'); for i:=0 to ColC-2 do begin q:=strGrOtchet.Columns.Items[i].Width*100 div strGrOtchet.Width; Memo1.Lines.Add('<TD align="center" width="'+IntToStr(q)+'%">'+strGrOtchet.Columns.Items[i].Title.Caption+'</TD>'); end; Memo1.Lines.Add('</TR>'); for j:=1 to RowC-1 do begin Memo1.Lines.Add('<TR>'); for i:=1 to ColC-1 do begin q:=strGrOtchet.Columns.Items[i-1].Width*100 div strGrOtchet.Width; Memo1.Lines.Add('<TD align="right" width="'+IntToStr(q)+'%">'+strGrOtchet.Cells[i,j]+'</TD>'); end; Memo1.Lines.Add('</TR>'); end; Memo1.Lines.Add('</body>'); Memo1.Lines.Add('</html>'); Это простой отчет и для примера сгодится. Опенофис его открывает и все там красиво. Не знаю кому как, а для меня этот вариант вполне приемлемый. |
Сообщ.
#2
,
|
|
|
вот только *.odt в названии темы излишен, с тем же успехом можно создавать отчет в XML и получить еще большую поддержку сторонних приложений.
Да, конечно можно и не читать "[URL=http://www.delphisources.ru/pages/articles/2007_year/art_14_05_07/art_14_05_07_1.html]Первые шаги в автоматизации OpenOffice.Calc и OpenOffice.Writer под Delphi[/URL]" |
Сообщ.
#3
,
|
|
|
Цитата raxp @ Да, конечно можно и не читать "[URL=http://www.delphisources.ru/pages/articles/2007_year/art_14_05_07/art_14_05_07_1.html]Первые шаги в автоматизации OpenOffice.Calc и OpenOffice.Writer под Delphi[/URL]" Чтож, может быть кому-то удобнее делать так как описано в названной статье, мне проще было сделать так как я сделал. Сейчас ОС у меня Ubuntu и потому использую Лазарус. Цитата "...Сразу оговорюсь, что мы разрабатываем приложение под ОС Windows..." Цитата из названной статьи. Когда стоял Windows, работал в Delphi и формировал отчет сразу в Microsoft Word. |
![]() |
Сообщ.
#4
,
|
|
Цитата alexsa @ В чем был смысл создания поста? Сделал так, как твоей левой пятке захотелось, вместо того, чтобы поискать в Гугле, скажем, LazReport и не изобретать велосипед. Зачем выкладывать-то? Чтоб и другие тоже начали заниматься велосипедостроением, причем некорректным и ненужным?мне проще было сделать так как я сделал Цитата alexsa @ Ложь. С DBGrid все не так просто. У тебя запросто начнутся проблемы с определением количества записей, да и обратиться к Cell на DbGrid-е ты тоже не сможешь. По той простой причине, что нет там этого свойства. Не надо приукрашивать возможности своей поделки. Чтобы заставить ее работать с DbGrid-ом тебе ее придется переписать чуть менее, чем полностью. Итак, есть задача вывести в документ Опенофиса результат работы программы, т.е. отчет, в котором может быть как текст, так и таблицы StringGrid или DbGrid. |
Сообщ.
#5
,
|
|
|
Цитата volvo877 @ ... вместо того, чтобы поискать в Гугле, скажем, LazReport и не изобретать велосипед. В простых отчетах так проще, чем в LazReport, хотя действительно, с DBGrid так не получится. А выложил действительно для того, чтобы у кого есть с этим проблема, мог ее решить. Ведь главная цель - получить документ и возможно малой кровью. Я считаю, что это самый простой вариант. Добавлено Кстати, если Вы, как модератор, считаете этот пост ненужным, можете его удалить. Спасибо. |
Сообщ.
#6
,
|
|
|
намек про XML не сработал
![]() |
Сообщ.
#7
,
|
|
|
Цитата raxp @ намек про XML не сработал ![]() Намек-то я понял, но переделывать смысла нет. Да и просто все, как три копейки. |