summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFitz Elliott <felliott@fiskur.org>2014-07-05 11:14:11 -0400
committerFitz Elliott <felliott@fiskur.org>2014-07-05 12:17:48 -0400
commitc4c84e8055f67738d0f9b6ae30d1d844c6fc46a4 (patch)
tree7d850e0208173e665984607ca2a900cad0db8a3d
parent61ed182ace7b7ac06a00b0bb9d572cc464b43493 (diff)
downloadspreadsheet-parsexlsx-c4c84e8055f67738d0f9b6ae30d1d844c6fc46a4.tar.gz
spreadsheet-parsexlsx-c4c84e8055f67738d0f9b6ae30d1d844c6fc46a4.zip
add ColFmtNo support to ParseXLSX
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm8
-rw-r--r--t/column-formats.t25
-rw-r--r--t/data/column-formats.xlsxbin0 -> 25979 bytes
3 files changed, 31 insertions, 2 deletions
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
--- /dev/null
+++ b/t/data/column-formats.xlsx
Binary files differ