X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FExcel.pm;h=0c1c0c3e3a23ab83e2cc5a07456693ab7bfd43d0;hb=6f28e7ac29dd1f3fd9b51bca6abaf32f6c7d1537;hp=b041d38631354b10567e646601612ad40558e54e;hpb=5eb4a350fba7f4d16e8a726bd530cfadbce8e547;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Parser/Excel.pm b/lib/SQL/Translator/Parser/Excel.pm index b041d38..0c1c0c3 100644 --- a/lib/SQL/Translator/Parser/Excel.pm +++ b/lib/SQL/Translator/Parser/Excel.pm @@ -1,12 +1,9 @@ package SQL::Translator::Parser::Excel; # ------------------------------------------------------------------- -# $Id: Excel.pm,v 1.8 2003-10-09 16:38:25 kycl4rk Exp $ +# $Id: Excel.pm,v 1.14 2004-02-09 22:23:40 kycl4rk Exp $ # ------------------------------------------------------------------- -# Copyright (C) 2003 Ken Y. Clark , -# darren chamberlain , -# Chris Mungall , -# Mike Mellilo +# Copyright (C) 2002-4 SQLFairy Authors # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -30,15 +27,13 @@ SQL::Translator::Parser::Excel - parser for Excel =head1 SYNOPSIS use SQL::Translator; - use SQL::Translator::Parser::Excel; my $translator = SQL::Translator->new; - $translator->parser("SQL::Translator::Parser::Excel"); + $translator->parser('Excel'); =head1 DESCRIPTION -Parses an Excel spreadsheet file for SQL::Translator. You can then -turn the data into a database tables or graphs. +Parses an Excel spreadsheet file using Spreadsheet::ParseExcel. =head1 OPTIONS @@ -56,7 +51,7 @@ and field sizes. True by default. use strict; use vars qw($DEBUG $VERSION @EXPORT_OK); $DEBUG = 0 unless defined $DEBUG; -$VERSION = sprintf "%d.%02d", q$Revision: 1.8 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.14 $ =~ /(\d+)\.(\d+)/; use Spreadsheet::ParseExcel; use Exporter; @@ -140,7 +135,7 @@ sub parse { ) { my $field = $field_names[ $iC ]; my $data = $ws->{'Cells'}[ $iR ][ $iC ]->{'_Value'}; - $data = '' unless defined $data; + next if !defined $data || $data eq ''; my $size = [ length $data ]; my $type; @@ -155,8 +150,11 @@ sub parse { $data =~ /^-?\.\d+$/ ) { $type = 'float'; - my ( $w, $d ) = map { s/,//g; $_ } split( /\./, $data ); - $size = [ length $w, length $d ]; + my ( $w, $d ) = + map { s/,//g; length $_ || 1 } + split( /\./, $data ) + ; + $size = [ $w + $d, $d ]; } else { $type = 'char'; @@ -175,13 +173,18 @@ sub parse { } for my $field ( keys %field_info ) { - my $size = $field_info{ $field }{'size'}; + my $size = $field_info{ $field }{'size'} || [ 1 ]; my $data_type = - $field_info{ $field }{'char'} ? 'char' : - $field_info{ $field }{'float'} ? 'float' : 'integer'; + $field_info{ $field }{'char'} ? 'char' : + $field_info{ $field }{'float'} ? 'float' : + $field_info{ $field }{'integer'} ? 'integer' : 'char'; + + if ( $data_type eq 'char' && scalar @$size == 2 ) { + $size = [ $size->[0] + $size->[1] ]; + } my $field = $table->get_field( $field ); - $field->size( $size ); + $field->size( $size ) if $size; $field->data_type( $data_type ); } }