Skip to content
This repository has been archived by the owner on Oct 9, 2023. It is now read-only.

Commit

Permalink
S::S api exists, and I remembered to add required files.
Browse files Browse the repository at this point in the history
  • Loading branch information
dylanwh committed Mar 26, 2009
1 parent ad8ed76 commit 7ad9bb6
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 1 deletion.
30 changes: 29 additions & 1 deletion lib/Spreadsheet/Simple.pm
Expand Up @@ -6,6 +6,12 @@ our $AUTHORITY = 'cpan:DHARDISON';

use namespace::clean -except => 'meta';

has 'format' => (
is => 'ro',
isa => 'Str',
default => 'Excel',
);

has 'reader' => (
is => 'ro',
does => 'Spreadsheet::Simple::Role::Reader',
Expand All @@ -20,11 +26,33 @@ has 'writer' => (
handles => ['write_file'],
);

sub _build_reader {
my ($self) = @_;
my $fmt = $self->format;

Class::MOP::load_class("Spreadsheet::Simple::Reader::$fmt");

return "Spreadsheet::Simple::Reader::$fmt"->new;
}

sub _build_writer {
my ($self) = @_;
my $fmt = $self->format;

Class::MOP::load_class("Spreadsheet::Simple::Writer::$fmt");

return "Spreadsheet::Simple::Writer::$fmt"->new;
}



1;

__END__
=head1 NAME
Spreadsheet::Simple- Simple spreadsheet API.
Spreadsheet::Simple - Simple spreadsheet API.
=head1 VERSION
Expand Down
65 changes: 65 additions & 0 deletions lib/Spreadsheet/Simple/Reader/Excel.pm
@@ -0,0 +1,65 @@
package Spreadsheet::Simple::Reader::Excel;
use Moose;

our $VERSION = '0.01';
our $AUTHORITY = 'cpan:DHARDISON';

use Spreadsheet::ParseExcel;

use Spreadsheet::Simple::Document;
use Spreadsheet::Simple::Sheet;
use Spreadsheet::Simple::Row;
use Spreadsheet::Simple::Cell;

use namespace::clean -except => 'meta';

with 'Spreadsheet::Simple::Role::Reader';

sub read_file {
my ($self, $file) = @_;
my $wb = Spreadsheet::ParseExcel::Workbook->Parse($file);

return $self->_map_document($wb);
}

sub _map_document {
my ($self, $wb) = @_;

return Spreadsheet::Simple::Document->new(
sheets => [
map { $self->_map_sheet($_) } @{ $wb->{Worksheet} }
],
);
}

sub _map_sheet {
my ($self, $ws) = @_;

return Spreadsheet::Simple::Sheet->new(
name => $ws->{Name},
rows => [
map { $self->_map_row($_) } @{ $ws->{Cells} }
],
);

}

sub _map_row {
my ($self, $row) = @_;

return Spreadsheet::Simple::Row->new(
cells => [
map { $self->_map_cell($_) } @{ $row }
],
);
}

sub _map_cell {
my ($self, $cell) = @_;

return Spreadsheet::Simple::Cell->new(
value => $cell->value
);
}

1;
11 changes: 11 additions & 0 deletions lib/Spreadsheet/Simple/Role/Reader.pm
@@ -0,0 +1,11 @@
package Spreadsheet::Simple::Role::Reader;
use Moose::Role;

our $VERSION = '0.01';
our $AUTHORITY = 'cpan:DHARDISON';

use namespace::clean -except => 'meta';

requires 'read_file';

1;
2 changes: 2 additions & 0 deletions t/100-excel.t
Expand Up @@ -29,3 +29,5 @@ foreach my $file (@files) {
is($sheet->get_cell(0, 1)->value, 'bar', 'B1');
is($sheet->get_cell(0, 2)->value, 'baz', 'C1');
}


34 changes: 34 additions & 0 deletions t/101-excel.t
@@ -0,0 +1,34 @@
#!/usr/bin/perl
use strict;
use warnings;

use Test::More tests => 1 + 7*2;
use Test::Exception;

BEGIN { use_ok "Spreadsheet::Simple" }

my $ss = Spreadsheet::Simple->new( format => 'Excel' );

my @files = (
't/data/100-excel.xls',
't/data/100-excel2.xls',
);

foreach my $file (@files) {
my $doc = $ss->read_file($file);

ok($doc, "doc is defined");

isa_ok($doc, 'Spreadsheet::Simple::Document');

my $sheet = $doc->get_sheet_by_name('sheet1');

ok($sheet, "sheet is defined");
isa_ok($sheet, 'Spreadsheet::Simple::Sheet');

is($sheet->get_cell(0, 0)->value, 'foo', 'A1');
is($sheet->get_cell(0, 1)->value, 'bar', 'B1');
is($sheet->get_cell(0, 2)->value, 'baz', 'C1');
}


0 comments on commit 7ad9bb6

Please sign in to comment.