Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Создание отчетов


Автор: burakov 10.5.2008, 01:06
добрый день,

стоит задача создания отчетов из БД MySQL 

использую модуль DBI, делаю выборку и дальше результат
 пишу в файл, попутно форматируя данные так, чтобы
форматированные мною данные "красиво легли" и их можно было бы послать на печать

Есть ли какой модуль в перл, который бы форматировал (таблично) текст ?
(ведь многие отчеты - это данные в таблицах)

вот например встроенная функции format, formline(); позволяет вывести текст в таблицу, но 
общение с ней трудоемко.

поэтому и стал вопрос. может есть какой модуль, с помощью которого можно было бы создавать таблицы попроще. например задал ему ширину высоту количество колонок ну и т.д. (особенно это актуально, если таблица сложная - есть объединенные строки или столбцы). 

Ну типа HTML smile , только чтобы в текст сразу - а то експорт из html в IE корявый какой то - текстовик совсем не такой получается (многое при экспорте теряется).

Спасибо.





Автор: amg 10.5.2008, 07:54
Цитата(burakov @  10.5.2008,  01:06 Найти цитируемый пост)
Ну типа HTML  , только чтобы в текст сразу - а то експорт из html в IE корявый какой то - текстовик совсем не такой получается (многое при экспорте теряется).
Есть такой консольный браузер, http://lynx.isc.org/. Из всего, что я встречал, он наиболее вменяемо (в смысле форматирования) переводит html в текст.
Код

$text = `lynx -dump -nolist URL`;


Автор: KSURi 10.5.2008, 11:29
http://search.cpan.org/~davidius/Text-Report-1.004/lib/Text/Report.pm

Автор: burakov 11.5.2008, 00:55
Спасибо за ответы.

а не подскажите есть ли для MySQL какой нибудь генератор отчетов (типа Crystal reports).
Ибо перл, конечно выбирает из БД, но данные в текстовом варианте получаются уж больно некрасивые - таблицу как в word не нарисуешь ну и т.д. 

Попытался рисовать HTML, но столкнулся с тем, несмотря на то, что вроде как Html и задумывался как язык разметки текста, но вот таблицу с тонким border нарисовать - невозможно (есть правда обходной вариант таблица в ячейке, но он меня не устраивает). 

или можно как нибудь связать
MySQL(хранение данных)+perl (обработка данных) + MS WORD (печать данных)?

Спасибо.

Автор: PanamOS 11.5.2008, 13:10
Цитата(burakov @  11.5.2008,  00:55 Найти цитируемый пост)
но вот таблицу с тонким border нарисовать - невозможно

а как же стили?

Автор: ramus 11.5.2008, 18:36
Цитата

MySQL(хранение данных)+perl (обработка данных) + MS WORD (печать данных)?


я бы вместо ворда использовал Excel (для таблиц подходит лучше  smile  )
модулей полно, сам пользую в таких случаях Spreadsheet::WriteExcel

Автор: burakov 11.5.2008, 19:42
Большое спасибо.

с Spreadsheet::WriteExcel  разбираюсь.

а вот с border  и стилями примерчик какой нибудь коротенький!
не получается никак

вот кусочек кода html  с применением стилей

<HTML> 
<style type=\text/css\>

table { border-width:1pt }
</style>

<table border>
<tr> <td>  ПРИВЕТ </td></tr>
</table>
</HTML> 

нужно добиться чтобы border у таблицы был тонкий (как например word по умолчанию создает)
подправьте пожалуйста.

Спасибо.

Автор: ramus 11.5.2008, 20:57
Вот простой пример записи в файл в формате xls данных из БД

Код

use strict;
use warnings;
use Spreadsheet::WriteExcel;
use DBI;

# ... < cut code >

#получаем из БД
my $array=$sth->fetchall_arrayref();

# ... < cut code >

my $workbook  = Spreadsheet::WriteExcel->new($file_name_xls);
my $worksheet = $workbook->add_worksheet();

# Expand the first column so that the date is visible.
$worksheet->set_column("A:A", 10);

my $row = 0;
my $col = 0;
  
foreach my $line  (@$array) {
  $col=0;
  foreach my $token (@$line) {
      $worksheet->write($row, $col, $token);
      $col++;
  }
  $row++;
}

$workbook->close();


Автор: burakov 11.5.2008, 22:28


И все таки - может таки есть модуль, чтобы выборку из БД в WORD вставлять,
Ибо очень важно для меня внешнее оформление отчетов - а красоту лучше всего в Worde наводить...
я поискал на 

http://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/Windows/
чего то ничего похожего на WriteWord smile не нашел. 
может таки плохо искал? smile

Автор: shamber 12.5.2008, 08:27
burakov, OLE вам в помощь.
и формируйте, оформляйте.

Win32::Ole

Автор: burakov 12.5.2008, 11:23
Всем огромное спасибо.

подсмотрел на forum.vingrad.ru как делать таблицы с тонкими краями 
(наверное все таки остановлюсь на варианте - формировать отчеты в HMTL - все таки это как то попроще для меня)

Spreadsheet::WriteExcel - отличный модуль - с ним тоже у меня все получилось
Win32::Ole - пока дело темное -- какая то справка по нему не подробная,
но буду разбираться...

всем спасибо.
(тему закрываю)

Автор: ki22 29.7.2008, 13:57
Если таблица с границами как у WORD  имеется ввиду не 2 линии с разрывом, а одна, то это делается через стиль borded-collapsed: collapse

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)