From 61ed182ace7b7ac06a00b0bb9d572cc464b43493 Mon Sep 17 00:00:00 2001 From: Fitz Elliott Date: Sat, 5 Jul 2014 12:13:01 -0400 Subject: add TabColor support to ParseXLSX --- lib/Spreadsheet/ParseXLSX.pm | 8 ++++++++ t/data/tab-color.xlsx | Bin 0 -> 27087 bytes t/tab-color.t | 15 +++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 t/data/tab-color.xlsx create mode 100644 t/tab-color.t diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index 72c8793..2aecac3 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -226,6 +226,14 @@ sub _parse_sheet { $twig->purge; }, + 'sheetPr/tabColor' => sub { + my ( $twig, $tab_color ) = @_; + + $sheet->{TabColor} = $self->_color($sheet->{_Book}{Color}, $tab_color); + + $twig->purge; + }, + } ); diff --git a/t/data/tab-color.xlsx b/t/data/tab-color.xlsx new file mode 100644 index 0000000..7061e84 Binary files /dev/null and b/t/data/tab-color.xlsx differ diff --git a/t/tab-color.t b/t/tab-color.t new file mode 100644 index 0000000..ef1ab49 --- /dev/null +++ b/t/tab-color.t @@ -0,0 +1,15 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Spreadsheet::ParseXLSX; + +my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/tab-color.xlsx'); +my $ws1 = $wb->worksheet(0); +is($ws1->get_tab_color, '#FF0000'); + +my $ws2 = $wb->worksheet(1); +is($ws2->get_tab_color, undef); + +done_testing; -- cgit v1.2.3-54-g00ecf From c4c84e8055f67738d0f9b6ae30d1d844c6fc46a4 Mon Sep 17 00:00:00 2001 From: Fitz Elliott Date: Sat, 5 Jul 2014 11:14:11 -0400 Subject: add ColFmtNo support to ParseXLSX --- lib/Spreadsheet/ParseXLSX.pm | 8 ++++++-- t/column-formats.t | 25 +++++++++++++++++++++++++ t/data/column-formats.xlsx | Bin 0 -> 25979 bytes 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 t/column-formats.t create mode 100644 t/data/column-formats.xlsx diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index 2aecac3..9fd3f79 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -136,6 +136,7 @@ sub _parse_sheet { my @merged_cells; + my @column_formats; my @column_widths; my @row_heights; @@ -195,8 +196,10 @@ sub _parse_sheet { 'col' => sub { my ( $twig, $col ) = @_; - $column_widths[ $_ - 1 ] = $col->att('width') - for ( $col->att('min') .. $col->att('max') ); + for my $colnum ($col->att('min')..$col->att('max')) { + $column_widths[$colnum - 1] = $col->att('width'); + $column_formats[$colnum - 1] = $col->att('style'); + } $twig->purge; }, @@ -334,6 +337,7 @@ sub _parse_sheet { $sheet->{ColWidth} = [ map { defined $_ ? 0+$_ : 0+$default_column_width } @column_widths ]; + $sheet->{ColFmtNo} = \@column_formats; } diff --git a/t/column-formats.t b/t/column-formats.t new file mode 100644 index 0000000..7ce9650 --- /dev/null +++ b/t/column-formats.t @@ -0,0 +1,25 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Spreadsheet::ParseXLSX; + +my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/column-formats.xlsx'); +my $ws = $wb->worksheet(0); + +ok(my $col_format_nos = $ws->{ColFmtNo}); + +my @col_formats = map { $wb->{Format}[ $_ ] } @$col_format_nos; +is_deeply($col_formats[0]->{Fill}, [1, '#FF0000', '#FFFFFF']); + +is($col_formats[1]->{AlignH}, 3); +is($col_formats[1]->{AlignV}, 0); + +my $font = $col_formats[2]->{Font}; +is_deeply($font->{Name}, 'Arial'); +is_deeply($font->{Height}, 16); +is_deeply($font->{Bold}, 1); + + +done_testing; diff --git a/t/data/column-formats.xlsx b/t/data/column-formats.xlsx new file mode 100644 index 0000000..a1a9344 Binary files /dev/null and b/t/data/column-formats.xlsx differ -- cgit v1.2.3-54-g00ecf