summaryrefslogtreecommitdiffstats
path: root/lib/Spreadsheet/ParseXLSX.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-05-10 11:14:39 -0500
committerJesse Luehrs <doy@tozt.net>2013-05-10 11:14:39 -0500
commit4e4d2ae08c38dd425145b2401509b9232837185e (patch)
tree7685ce4687177600025940397bbf5fb3ab96b166 /lib/Spreadsheet/ParseXLSX.pm
parent8b080e99280758a0be467650d867548ab2265908 (diff)
downloadspreadsheet-parsexlsx-4e4d2ae08c38dd425145b2401509b9232837185e.tar.gz
spreadsheet-parsexlsx-4e4d2ae08c38dd425145b2401509b9232837185e.zip
this shouldn't be object state
Diffstat (limited to 'lib/Spreadsheet/ParseXLSX.pm')
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm24
1 files changed, 15 insertions, 9 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm
index 89e0ab9..3231be8 100644
--- a/lib/Spreadsheet/ParseXLSX.pm
+++ b/lib/Spreadsheet/ParseXLSX.pm
@@ -14,55 +14,61 @@ sub parse {
my $self = shift;
my ($filename) = @_;
- $self->{Zip} = Archive::Zip->new;
+ my $zip = Archive::Zip->new;
die "Can't open $filename as zip file"
- unless $self->{Zip}->read($filename) == Archive::Zip::AZ_OK;
+ unless $zip->read($filename) == Archive::Zip::AZ_OK;
- $self->{Workbook} = $self->_parse_workbook;
+ return $self->_parse_workbook($zip);
}
sub _parse_workbook {
my $self = shift;
+ my ($zip) = @_;
- my $files = $self->_extract_files;
+ my $files = $self->_extract_files($zip);
# ...
}
sub _extract_files {
my $self = shift;
+ my ($zip) = @_;
my $type_base =
'http://schemas.openxmlformats.org/officeDocument/2006/relationships';
my $rels = $self->_parse_xml(
+ $zip,
$self->_rels_for('')
);
my $wb_name = ($rels->find_nodes(
qq<//Relationship[\@Type="$type_base/officeDocument"]>
))[0]->att('Target');
- my $wb_xml = $self->_parse_xml($wb_name);
+ my $wb_xml = $self->_parse_xml($zip, $wb_name);
my $path_base = $self->_base_path_for($wb_name);
my $wb_rels = $self->_parse_xml(
+ $zip,
$self->_rels_for($wb_name)
);
my $strings_xml = $self->_parse_xml(
+ $zip,
$path_base . ($wb_rels->find_nodes(
qq<//Relationship[\@Type="$type_base/sharedStrings"]>
))[0]->att('Target')
);
my $styles_xml = $self->_parse_xml(
+ $zip,
$path_base . ($wb_rels->find_nodes(
qq<//Relationship[\@Type="$type_base/styles"]>
))[0]->att('Target')
);
my @worksheet_xml = map {
- $self->_parse_xml($path_base . $_->att('Target'))
+ $self->_parse_xml($zip, $path_base . $_->att('Target'))
} $wb_rels->find_nodes(qq<//Relationship[\@Type="$type_base/worksheet"]>);
my @themes_xml = map {
- $self->_parse_xml($path_base . $_->att('Target'))
+ $self->_parse_xml($zip, $path_base . $_->att('Target'))
} $wb_rels->find_nodes(qq<//Relationship[\@Type="$type_base/theme"]>);
return {
@@ -76,9 +82,9 @@ sub _extract_files {
sub _parse_xml {
my $self = shift;
- my ($subfile) = @_;
+ my ($zip, $subfile) = @_;
- my $member = $self->{Zip}->memberNamed($subfile);
+ my $member = $zip->memberNamed($subfile);
die "no subfile named $subfile" unless $member;
my $xml = XML::Twig->new;