На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
  
> Создание отчета в *.odt
    Скажу сразу, я программист не профессионал, скорее - любитель.
    Пишу редко, по необходимости. Есть задача - нахожу решение, насколько оно правильное, не знаю, главное все работает. Это я написал, чтобы сильно не плевались, если кому не понравится - пишу для тех, кому может пригодится.
    Итак, есть задача вывести в документ Опенофиса результат работы программы, т.е. отчет, в котором может быть как текст, так и таблицы StringGrid или DbGrid.
    Читал на форумах разные решения. Скажу, что ответы находил, но для меня сложные и трудоемкие.
    Для себя нашел решение такое. Чем и хочу поделиться.
    В компоненте Memo формируем html документ со всеми делами. В разделе <body></body> вставляем заголовки с наших label-ов, Edit-ов, формируем таблицу и считываем туда данные с наших таблиц.
    Когда html текст в Memo готов, сохраняем его в файл с расширением *.odt. И все.
    Должно получится примерно такое:
    ExpandedWrap disabled
      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>');

    Это простой отчет и для примера сгодится. Опенофис его открывает и все там красиво.
    Не знаю кому как, а для меня этот вариант вполне приемлемый.
    Сообщение отредактировано: alexsa -
      вот только *.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]"
        Цитата 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.
        Сообщение отредактировано: alexsa -
          Цитата alexsa @
          мне проще было сделать так как я сделал
          В чем был смысл создания поста? Сделал так, как твоей левой пятке захотелось, вместо того, чтобы поискать в Гугле, скажем, LazReport и не изобретать велосипед. Зачем выкладывать-то? Чтоб и другие тоже начали заниматься велосипедостроением, причем некорректным и ненужным?

          Цитата alexsa @
          Итак, есть задача вывести в документ Опенофиса результат работы программы, т.е. отчет, в котором может быть как текст, так и таблицы StringGrid или DbGrid.
          Ложь. С DBGrid все не так просто. У тебя запросто начнутся проблемы с определением количества записей, да и обратиться к Cell на DbGrid-е ты тоже не сможешь. По той простой причине, что нет там этого свойства. Не надо приукрашивать возможности своей поделки. Чтобы заставить ее работать с DbGrid-ом тебе ее придется переписать чуть менее, чем полностью.
            Цитата volvo877 @
            ... вместо того, чтобы поискать в Гугле, скажем, LazReport и не изобретать велосипед.

            В простых отчетах так проще, чем в LazReport, хотя действительно, с DBGrid так не получится. А выложил действительно для того, чтобы у кого есть с этим проблема, мог ее решить. Ведь главная цель - получить документ и возможно малой кровью. Я считаю, что это самый простой вариант.

            Добавлено
            Кстати, если Вы, как модератор, считаете этот пост ненужным, можете его удалить. Спасибо.
              намек про XML не сработал :P
                Цитата raxp @
                намек про XML не сработал :P

                Намек-то я понял, но переделывать смысла нет. Да и просто все, как три копейки.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0301 ]   [ 16 queries used ]   [ Generated: 27.04.24, 17:55 GMT ]