summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2015-12-04 00:22:39 -0500
committerJesse Luehrs <doy@tozt.net>2015-12-04 00:22:39 -0500
commit54ace637bf4ddfc1469ffcc7cdaf429ca2b88814 (patch)
tree5d242381daf9d8502603f0f8ceda68b45d1d677e
parent87df644e3dfe5c34bfb0b03e020a119e64628c0a (diff)
parent48c05714c254df089e170c014661db9a4bc7d21d (diff)
downloadspreadsheet-parsexlsx-54ace637bf4ddfc1469ffcc7cdaf429ca2b88814.tar.gz
spreadsheet-parsexlsx-54ace637bf4ddfc1469ffcc7cdaf429ca2b88814.zip
Merge pull request #47 from ssims/master
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm7
-rw-r--r--t/data/hidden-row-and-column.xlsxbin0 -> 7467 bytes
-rw-r--r--t/data/hidden-sheet.xlsxbin0 -> 7397 bytes
-rw-r--r--t/hidden-row-and-column.t17
-rw-r--r--t/hidden-sheet.t15
5 files changed, 39 insertions, 0 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm
index 52f2858..4f33395 100644
--- a/lib/Spreadsheet/ParseXLSX.pm
+++ b/lib/Spreadsheet/ParseXLSX.pm
@@ -116,6 +116,7 @@ sub _parse_workbook {
_Book => $workbook,
_SheetNo => $idx,
);
+ $sheet->{SheetHidden} = 1 if defined $_->att('state') and $_->att('state') eq 'hidden';
$self->_parse_sheet($sheet, $files->{sheets}{$idx});
($sheet)
} else {
@@ -147,7 +148,9 @@ sub _parse_sheet {
my @column_formats;
my @column_widths;
+ my @columns_hidden;
my @row_heights;
+ my @rows_hidden;
my $default_row_height = 15;
my $default_column_width = 10;
@@ -252,6 +255,7 @@ sub _parse_sheet {
for my $colnum ($col->att('min')..$col->att('max')) {
$column_widths[$colnum - 1] = $col->att('width');
$column_formats[$colnum - 1] = $col->att('style');
+ $columns_hidden[$colnum - 1] = $col->att('hidden');
}
$twig->purge;
@@ -261,6 +265,7 @@ sub _parse_sheet {
my ( $twig, $row ) = @_;
$row_heights[ $row->att('r') - 1 ] = $row->att('ht');
+ $rows_hidden[ $row->att('r') - 1 ] = $row->att('hidden');
$twig->purge;
},
@@ -395,10 +400,12 @@ sub _parse_sheet {
$sheet->{RowHeight} = [
map { defined $_ ? 0+$_ : 0+$default_row_height } @row_heights
];
+ $sheet->{RowHidden} = \@rows_hidden;
$sheet->{ColWidth} = [
map { defined $_ ? 0+$_ : 0+$default_column_width } @column_widths
];
$sheet->{ColFmtNo} = \@column_formats;
+ $sheet->{ColHidden} = \@columns_hidden;
}
diff --git a/t/data/hidden-row-and-column.xlsx b/t/data/hidden-row-and-column.xlsx
new file mode 100644
index 0000000..4d4bac4
--- /dev/null
+++ b/t/data/hidden-row-and-column.xlsx
Binary files differ
diff --git a/t/data/hidden-sheet.xlsx b/t/data/hidden-sheet.xlsx
new file mode 100644
index 0000000..d29cafb
--- /dev/null
+++ b/t/data/hidden-sheet.xlsx
Binary files differ
diff --git a/t/hidden-row-and-column.t b/t/hidden-row-and-column.t
new file mode 100644
index 0000000..cd18c70
--- /dev/null
+++ b/t/hidden-row-and-column.t
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+
+use Spreadsheet::ParseXLSX;
+
+my $wb = Spreadsheet::ParseXLSX->new->parse('t/data/hidden-row-and-column.xlsx');
+my $ws = $wb->worksheet(0);
+
+ok(!$ws->is_row_hidden(0), 'Regular row is not hidden');
+ok( $ws->is_row_hidden(1), 'Hidden row is hidden');
+
+ok(!$ws->is_col_hidden(0), 'Regular column is not hidden');
+ok( $ws->is_col_hidden(1), 'Hidden column is hidden');
+
+done_testing;
diff --git a/t/hidden-sheet.t b/t/hidden-sheet.t
new file mode 100644
index 0000000..09d4402
--- /dev/null
+++ b/t/hidden-sheet.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/hidden-sheet.xlsx');
+my $ws1 = $wb->worksheet(0);
+ok(!$ws1->is_sheet_hidden(), 'Regular worksheet is not hidden');
+
+my $ws2 = $wb->worksheet(1);
+ok($ws2->is_sheet_hidden(), 'Hidden worksheet is hidden');
+
+done_testing;