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 )