Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > 32-битные компиляторы > Создание отчета в *.odt |
Автор: alexsa 13.07.11, 18:31 |
Скажу сразу, я программист не профессионал, скорее - любитель. Пишу редко, по необходимости. Есть задача - нахожу решение, насколько оно правильное, не знаю, главное все работает. Это я написал, чтобы сильно не плевались, если кому не понравится - пишу для тех, кому может пригодится. Итак, есть задача вывести в документ Опенофиса результат работы программы, т.е. отчет, в котором может быть как текст, так и таблицы StringGrid или DbGrid. Читал на форумах разные решения. Скажу, что ответы находил, но для меня сложные и трудоемкие. Для себя нашел решение такое. Чем и хочу поделиться. В компоненте Memo формируем html документ со всеми делами. В разделе <body></body> вставляем заголовки с наших label-ов, Edit-ов, формируем таблицу и считываем туда данные с наших таблиц. Когда html текст в Memo готов, сохраняем его в файл с расширением *.odt. И все. Должно получится примерно такое: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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>'); Это простой отчет и для примера сгодится. Опенофис его открывает и все там красиво. Не знаю кому как, а для меня этот вариант вполне приемлемый. |
Автор: raxp 13.07.11, 18:54 |
вот только *.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]" |
Автор: alexsa 13.07.11, 19:06 |
Цитата 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. |
Автор: volvo877 14.07.11, 08:33 |
В чем был смысл создания поста? Сделал так, как твоей левой пятке захотелось, вместо того, чтобы поискать в Гугле, скажем, LazReport и не изобретать велосипед. Зачем выкладывать-то? Чтоб и другие тоже начали заниматься велосипедостроением, причем некорректным и ненужным? Цитата alexsa @ Ложь. С DBGrid все не так просто. У тебя запросто начнутся проблемы с определением количества записей, да и обратиться к Cell на DbGrid-е ты тоже не сможешь. По той простой причине, что нет там этого свойства. Не надо приукрашивать возможности своей поделки. Чтобы заставить ее работать с DbGrid-ом тебе ее придется переписать чуть менее, чем полностью. Итак, есть задача вывести в документ Опенофиса результат работы программы, т.е. отчет, в котором может быть как текст, так и таблицы StringGrid или DbGrid. |
Автор: alexsa 14.07.11, 08:46 |
Цитата volvo877 @ ... вместо того, чтобы поискать в Гугле, скажем, LazReport и не изобретать велосипед. В простых отчетах так проще, чем в LazReport, хотя действительно, с DBGrid так не получится. А выложил действительно для того, чтобы у кого есть с этим проблема, мог ее решить. Ведь главная цель - получить документ и возможно малой кровью. Я считаю, что это самый простой вариант. Добавлено Кстати, если Вы, как модератор, считаете этот пост ненужным, можете его удалить. Спасибо. |
Автор: raxp 14.07.11, 14:00 |
намек про XML не сработал |
Автор: alexsa 14.07.11, 17:24 |
Намек-то я понял, но переделывать смысла нет. Да и просто все, как три копейки. |