324 lines
7.0 KiB
Perl
324 lines
7.0 KiB
Perl
package Spreadsheet::ParseExcel::Workbook;
|
|
|
|
###############################################################################
|
|
#
|
|
# Spreadsheet::ParseExcel::Workbook - A class for Workbooks.
|
|
#
|
|
# Used in conjunction with Spreadsheet::ParseExcel.
|
|
#
|
|
# Copyright (c) 2014 Douglas Wilson
|
|
# Copyright (c) 2009-2013 John McNamara
|
|
# Copyright (c) 2006-2008 Gabor Szabo
|
|
# Copyright (c) 2000-2006 Kawai Takanori
|
|
#
|
|
# perltidy with standard settings.
|
|
#
|
|
# Documentation after __END__
|
|
#
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
our $VERSION = '0.65';
|
|
|
|
###############################################################################
|
|
#
|
|
# new()
|
|
#
|
|
# Constructor.
|
|
#
|
|
sub new {
|
|
my ($class) = @_;
|
|
my $self = {};
|
|
bless $self, $class;
|
|
}
|
|
|
|
###############################################################################
|
|
sub color_idx_to_rgb {
|
|
my( $workbook, $iidx ) = @_;
|
|
|
|
my $palette = $workbook->{aColor};
|
|
return ( ( defined $palette->[$iidx] ) ? $palette->[$iidx] : $palette->[0] );
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# worksheet()
|
|
#
|
|
# This method returns a single Worksheet object using either its name or index.
|
|
#
|
|
sub worksheet {
|
|
my ( $oBook, $sName ) = @_;
|
|
my $oWkS;
|
|
foreach $oWkS ( @{ $oBook->{Worksheet} } ) {
|
|
return $oWkS if ( $oWkS->{Name} eq $sName );
|
|
}
|
|
if ( $sName =~ /^\d+$/ ) {
|
|
return $oBook->{Worksheet}->[$sName];
|
|
}
|
|
return undef;
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# worksheets()
|
|
#
|
|
# Returns an array of Worksheet objects.
|
|
#
|
|
sub worksheets {
|
|
my $self = shift;
|
|
|
|
return @{ $self->{Worksheet} };
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# worksheet_count()
|
|
#
|
|
# Returns the number Woksheet objects in the Workbook.
|
|
#
|
|
sub worksheet_count {
|
|
|
|
my $self = shift;
|
|
|
|
return $self->{SheetCount};
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# get_filename()
|
|
#
|
|
# Returns the name of the Excel file of C<undef> if the data was read from a filehandle rather than a file.
|
|
#
|
|
sub get_filename {
|
|
|
|
my $self = shift;
|
|
|
|
return $self->{File};
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# get_print_areas()
|
|
#
|
|
# Returns an array ref of print areas.
|
|
#
|
|
# TODO. This should really be a Worksheet method.
|
|
#
|
|
sub get_print_areas {
|
|
|
|
my $self = shift;
|
|
|
|
return $self->{PrintArea};
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# get_print_titles()
|
|
#
|
|
# Returns an array ref of print title hash refs.
|
|
#
|
|
# TODO. This should really be a Worksheet method.
|
|
#
|
|
sub get_print_titles {
|
|
|
|
my $self = shift;
|
|
|
|
return $self->{PrintTitle};
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# using_1904_date()
|
|
#
|
|
# Returns true if the Excel file is using the 1904 date epoch.
|
|
#
|
|
sub using_1904_date {
|
|
|
|
my $self = shift;
|
|
|
|
return $self->{Flg1904};
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# ParseAbort()
|
|
#
|
|
# Todo
|
|
#
|
|
sub ParseAbort {
|
|
my ( $self, $val ) = @_;
|
|
$self->{_ParseAbort} = $val;
|
|
}
|
|
|
|
=head2 get_active_sheet()
|
|
|
|
Return the number of the active (open) worksheet (at the time the workbook
|
|
was saved. May return undef.
|
|
|
|
=cut
|
|
|
|
sub get_active_sheet {
|
|
my $workbook = shift;
|
|
|
|
return $workbook->{ActiveSheet};
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# Parse(). Deprecated.
|
|
#
|
|
# Syntactic wrapper around Spreadsheet::ParseExcel::Parse().
|
|
# This method is *deprecated* since it doesn't conform to the current
|
|
# error handling in the S::PE Parse() method.
|
|
#
|
|
sub Parse {
|
|
|
|
my ( $class, $source, $formatter ) = @_;
|
|
my $excel = Spreadsheet::ParseExcel->new();
|
|
my $workbook = $excel->Parse( $source, $formatter );
|
|
$workbook->{_Excel} = $excel;
|
|
return $workbook;
|
|
}
|
|
|
|
###############################################################################
|
|
#
|
|
# Mapping between legacy method names and new names.
|
|
#
|
|
{
|
|
no warnings; # Ignore warnings about variables used only once.
|
|
*Worksheet = *worksheet;
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=pod
|
|
|
|
=head1 NAME
|
|
|
|
Spreadsheet::ParseExcel::Workbook - A class for Workbooks.
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
See the documentation for Spreadsheet::ParseExcel.
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This module is used in conjunction with Spreadsheet::ParseExcel. See the documentation for L<Spreadsheet::ParseExcel>.
|
|
|
|
|
|
=head1 Methods
|
|
|
|
The following Workbook methods are available:
|
|
|
|
$workbook->worksheets()
|
|
$workbook->worksheet()
|
|
$workbook->worksheet_count()
|
|
$workbook->get_filename()
|
|
$workbook->get_print_areas()
|
|
$workbook->get_print_titles()
|
|
$workbook->using_1904_date()
|
|
|
|
|
|
=head2 worksheets()
|
|
|
|
The C<worksheets()> method returns an array of Worksheet objects. This was most commonly used to iterate over the worksheets in a workbook:
|
|
|
|
for my $worksheet ( $workbook->worksheets() ) {
|
|
...
|
|
}
|
|
|
|
|
|
=head2 worksheet()
|
|
|
|
The C<worksheet()> method returns a single C<Worksheet> object using either its name or index:
|
|
|
|
$worksheet = $workbook->worksheet('Sheet1');
|
|
$worksheet = $workbook->worksheet(0);
|
|
|
|
Returns C<undef> if the sheet name or index doesn't exist.
|
|
|
|
|
|
=head2 worksheet_count()
|
|
|
|
The C<worksheet_count()> method returns the number of Woksheet objects in the Workbook.
|
|
|
|
my $worksheet_count = $workbook->worksheet_count();
|
|
|
|
|
|
=head2 get_filename()
|
|
|
|
The C<get_filename()> method returns the name of the Excel file of C<undef> if the data was read from a filehandle rather than a file.
|
|
|
|
my $filename = $workbook->get_filename();
|
|
|
|
|
|
=head2 get_print_areas()
|
|
|
|
The C<get_print_areas()> method returns an array ref of print areas.
|
|
|
|
my $print_areas = $workbook->get_print_areas();
|
|
|
|
Each print area is as follows:
|
|
|
|
[ $start_row, $start_col, $end_row, $end_col ]
|
|
|
|
Returns undef if there are no print areas.
|
|
|
|
|
|
=head2 get_print_titles()
|
|
|
|
The C<get_print_titles()> method returns an array ref of print title hash refs.
|
|
|
|
my $print_titles = $workbook->get_print_titles();
|
|
|
|
Each print title array ref is as follows:
|
|
|
|
{
|
|
Row => [ $start_row, $end_row ],
|
|
Column => [ $start_col, $end_col ],
|
|
}
|
|
|
|
|
|
Returns undef if there are no print titles.
|
|
|
|
|
|
=head2 using_1904_date()
|
|
|
|
The C<using_1904_date()> method returns true if the Excel file is using the 1904 date epoch instead of the 1900 epoch.
|
|
|
|
my $using_1904_date = $workbook->using_1904_date();
|
|
|
|
The Windows version of Excel generally uses the 1900 epoch while the Mac version of Excel generally uses the 1904 epoch.
|
|
|
|
Returns 0 if the 1900 epoch is in use.
|
|
|
|
|
|
=head1 AUTHOR
|
|
|
|
Current maintainer 0.60+: Douglas Wilson dougw@cpan.org
|
|
|
|
Maintainer 0.40-0.59: John McNamara jmcnamara@cpan.org
|
|
|
|
Maintainer 0.27-0.33: Gabor Szabo szabgab@cpan.org
|
|
|
|
Original author: Kawai Takanori kwitknr@cpan.org
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
Copyright (c) 2014 Douglas Wilson
|
|
|
|
Copyright (c) 2009-2013 John McNamara
|
|
|
|
Copyright (c) 2006-2008 Gabor Szabo
|
|
|
|
Copyright (c) 2000-2006 Kawai Takanori
|
|
|
|
All rights reserved.
|
|
|
|
You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
|
|
|
|
=cut
|