1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
package Data::TableReader::Decoder::XLSX;
use Moo 2;
use Carp;
use Try::Tiny;
extends 'Data::TableReader::Decoder::Spreadsheet';
our @xlsx_probe_modules= ( [ 'Spreadsheet::ParseXLSX', '0.30' ], 'Spreadsheet::XLSX' );
our $default_xlsx_module;
sub default_xlsx_module {
$default_xlsx_module ||=
Data::TableReader::Decoder::_first_sufficient_module('XLSX parser', \@xlsx_probe_modules);
}
# ABSTRACT: Access sheets/rows of a modern Microsoft Excel workbook
our $VERSION = '0.021'; # VERSION
sub _build_workbook {
my $self= shift;
my $wbook;
my $f= $self->file_handle;
if (ref $f and ref($f)->can('worksheets')) {
$wbook= $f;
} else {
my $class= $self->default_xlsx_module;
# Spreadsheet::XLSX has an incompatible constructor
if ($class->isa('Spreadsheet::XLSX')) {
$wbook= $class->new($f);
} else {
$wbook= $class->new->parse($f, $self->xls_formatter);
}
}
defined $wbook or croak "Can't parse file '".$self->file_name."'";
return $wbook;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Data::TableReader::Decoder::XLSX - Access sheets/rows of a modern Microsoft Excel workbook
=head1 VERSION
version 0.021
=head1 DESCRIPTION
See L<Data::TableReader::Decoder::Spreadsheet>.
This subclass simply parses the input using an instance of L<Spreadsheet::ParseXLSX>.
=head1 CLASS METHODS
=head2 default_xlsx_module
Initializes C<@Data::TableReader::Decoder::XLSX::default_xlsx_module> to the first
available module in the list of C<@Data::TableReader::Decoder::XLSX::xlsx_probe_modules>
and returns the cached value every time afterward.
Those variables can be modified as needed, if you have other XLSX modules available.
=head1 AUTHOR
Michael Conrad <mike@nrdvana.net>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2024 by Michael Conrad.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|