Apache-FastForward

 view release on metacpan or  search on metacpan

lib/Apache/FastForward/Spreadsheet.pm  view on Meta::CPAN

}

sub convert_spreadsheet_address {

#Contract: 
#   [1] ('A12') spreadsheet address or row & column number eg ('12,1') as input
#   [2] Method returns hash with keys {x} and {y} or or everything dies...
    
    my $address = shift;
    
    $address = uc( $address );
    
    if ( $address =~  /^\s*([0-9]+)\s*\,\s*([0-9]+)\s*$/ ){
	    my $row_number = $1;
	    my $column_number = $2;
	    
	    if ( $row_number < 1 ){
	        croak "Row number in cell address '$address' is out of range"
	    }
	    if ( $column_number < 1 ){
	        croak "Column number in cell address '$address' is out of range"
	    }
	    return { x => ( $row_number -1 ), y => ( $column_number -1 ) }	    
    }
    
    if ( $address =~  /^\s*([A-Z]+)\s*([0-9]+)\s*$/ ){
	    my $column_AAA = $1;
	    my $row_number = $2;
        
        if ( $row_number < 1 ){
	        croak "Row number in cell address '$address' is out of range"
	    }
        
        my $column_number = 0;
        while( $column_AAA =~ s/^([A-Z])// ){
	        $column_number = 26 * $column_number + 1 + ord ($1) - ord ("A");
        }
        if ( $column_number < 1 ){
	        croak "Column number in cell address '$address' is out of range"
	    }
        return { x => ( $row_number -1 ), y => ( $column_number -1 ) }
    }
    croak "Cell address '$address' has wrong format"
}
1;
__END__
######################## User Documentation ##################

=pod

=head1 NAME

Apache::FastForward::Spreadsheet 

=head1 SYNOPSIS

 my $t1 = tie my %t1, 'Spreadsheet';
 
 my %csv_atr = (
        'quote_char'  => '"',
        'escape_char' => '"',
        'sep_char'    => ';',
        'binary'      => 1 );
 
 $t1->LoadTemplate( './t1.csv', \%csv_atr);
 
 $t1{'A3'} = 'BZDYL';
 print $t1{'3,1'};
 print $t1->DumpAsCSV( \%csv_atr );
 print $t2->RowCount(), "\n";
 
 my $t2 = tie my %t2, 'Spreadsheet';
 $t1->CopySheetTo( $t2 );

 my @row = ( 1, 2, 3 );
 $t2->SetRow( 1, @row );
 @row = $t2->GetRow( 1 );
 my $new_spreadsheet_size = St2->PushRow( @row );
 @row = $t2->PopRow();
 @row = $t2->RemoveRow( 2 );

=head1 DESCRIPTION


=head2 USAGE

The module should be used for manipulating CSV data structures as if it would be
a spreadsheet. Spreadsheet address in a form eg ('A12') or row and column number eg ('12,1')
can be used for data access.


=head2 METHODS

=over

=item LoadTemplate ( $csv_file_path, \%csv_attributes )

Path to a CSV file and CSV parameters (see L<Text::CSV_XS>) as input.
Method can either suceed or everything dies...

=item DumpAsCSV( \%csv_attributes )

CSV file parameters as input. Method can return CSV string or everything
dies...

=item CopySheetTo( $another_sheet )

Name of the 'SpreadSheet' tied pointer to hash as input. Method succeeds or everything dies ... 

=item ShiftRow( )

No input. Similar to 'shift @ARRAY'. Returns shifted row.


=item PopRow( )

No input. Similar to 'pop @ARRAY'. Returns poped row.

=item PushRow( @new_cell_values )

Array as input. Similar to 'push @ARRAY'. Returns the new number of elements



( run in 0.941 second using v1.01-cache-2.11-cpan-39bf76dae61 )