--- sql2xls.cgi 2008/03/24 14:05:54 1 +++ sql2xls.cgi 2008/03/24 16:35:29 3 @@ -10,6 +10,16 @@ use DBI; use CGI::Carp qw(fatalsToBrowser); use CGI qw(path_translated); +use Encode qw/decode/; +use Data::Dump qw/dump/; + +# Connect to DB +my $connect = "DBI:Pg:dbname=new"; +my $user = "web"; +my $passwd = ""; + +my $db_encoding = 'iso-8859-2'; +my $xls_date_format = 'dd.mm.yyyy'; my $debug = 1; @@ -30,13 +40,14 @@ $workbook = Spreadsheet::WriteExcel->new("sql_result.xls"); } -# Connect to DB -my $connect = "DBI:Pg:dbname=new"; -my $user = "web"; -my $passwd = ""; +my $date_format = $workbook->add_format(num_format => $xls_date_format); my $dbh = DBI->connect($connect,$user,$passwd) || die $DBI::errstr; +sub _c { + return decode( $db_encoding, shift ); +} + foreach my $sql_file (@sql_files) { my $sheet_name = $sql_file; @@ -72,7 +83,7 @@ my $fmt_comment = $workbook->addformat(); # Add a format $fmt_comment->set_bold(); - $worksheet->write($row, 0, $comment, $fmt_comment); + $worksheet->write($row, 0, _c($comment), $fmt_comment); $row+=2; } @@ -87,9 +98,17 @@ } $row++; + my @types = map { scalar $dbh->type_info($_)->{TYPE_NAME} } @{ $sth->{TYPE} }; + while (my @row = $sth->fetchrow_array() ) { for(my $col=0; $col<=$#row; $col++) { - $worksheet->write($row, $col, $row[$col] ); + my $data = $row[$col]; + if ( $types[$col] =~ m/^date/i ) { + $data .= 'T' if $data =~ m/^\d\d\d\d-\d\d-\d\d$/; + $worksheet->write_date_time( $row, $col, $data, $date_format ); + } else { + $worksheet->write($row, $col, _c( $data ) ); + } } $row++; }