| 
| 
 | Вопрос # 3 079/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Как в отчёт RaveReports записать данные из StringGrid ?
 
|  |   Вопрос задал: TihiySap (статус: Посетитель)Вопрос отправлен: 9 августа 2009, 23:24
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 19 августа 2009, 18:48; участников в обсуждении: 3. 
|   | Мережников Андрей (статус: Абитуриент), 11 августа 2009, 20:37 [#1]:наверное проще экспортировать в Excel |  
|   | 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 (статус: Посетитель), 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 (статус: Посетитель), 19 августа 2009, 18:48 [#6]:Кол-во будет такое: самая бальшая таблица - 11 колонок и строк 100-150. В коде ещё ошибка была:
 это if Text = '' then Text := ' ';
 нужно переделать на это if Text = '' then Text := ' ';
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |