convert SQL date into excel dates (with format dd.mm.yyyy)
authorDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 24 Mar 2008 16:35:29 +0000 (16:35 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 24 Mar 2008 16:35:29 +0000 (16:35 +0000)
git-svn-id: svn://svn.rot13.org/SQL2XLS@3 2e857b76-582b-47e5-ad5c-b3ba0f0ee29b

sql2xls.cgi

index 908e9cd..d732214 100755 (executable)
@@ -11,12 +11,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;
 
 my $sql_dir = path_translated || '.';
@@ -36,10 +40,12 @@ if ($0 =~ m/\.cgi$/i) {
        $workbook = Spreadsheet::WriteExcel->new("sql_result.xls");
 }
 
+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('iso-8859-2', shift);
+       return decode( $db_encoding, shift );
 }
 
 foreach my $sql_file (@sql_files) {
@@ -92,9 +98,17 @@ foreach my $sql_file (@sql_files) {
        }
        $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, _c( $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++;
        }