summaryrefslogtreecommitdiffstats
path: root/lib/Spreadsheet/ParseXLSX.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-05-10 22:01:45 -0500
committerJesse Luehrs <doy@tozt.net>2013-05-10 22:01:45 -0500
commitaa2752584ff0bdf1257a310272a2522049e224a6 (patch)
treea3a6230ce48a10b286b6f8593288d02448cc9531 /lib/Spreadsheet/ParseXLSX.pm
parentca46a57f572d9d30710fb89dd30b95549e57b491 (diff)
downloadspreadsheet-parsexlsx-aa2752584ff0bdf1257a310272a2522049e224a6.tar.gz
spreadsheet-parsexlsx-aa2752584ff0bdf1257a310272a2522049e224a6.zip
start parsing out some formatting stuff
Diffstat (limited to 'lib/Spreadsheet/ParseXLSX.pm')
-rw-r--r--lib/Spreadsheet/ParseXLSX.pm68
1 files changed, 65 insertions, 3 deletions
diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm
index 77ee89b..3e1ebae 100644
--- a/lib/Spreadsheet/ParseXLSX.pm
+++ b/lib/Spreadsheet/ParseXLSX.pm
@@ -49,9 +49,11 @@ sub _parse_workbook {
$workbook->{FmtClass} = Spreadsheet::ParseExcel::FmtDefault->new; # XXX
- # $workbook->{Format} = ...;
- # $workbook->{FormatStr} = ...;
- # $workbook->{Font} = ...;
+ my $styles = $self->_parse_styles($files->{styles});
+
+ $workbook->{Format} = $styles->{Format};
+ $workbook->{FormatStr} = $styles->{FormatStr};
+ $workbook->{Font} = $styles->{Font};
$workbook->{PkgStr} = $self->_parse_shared_strings($files->{strings});
@@ -139,6 +141,66 @@ sub _parse_shared_strings {
];
}
+sub _parse_styles {
+ my $self = shift;
+ my ($styles) = @_;
+
+ my %format_str = map {
+ $_->att('numFmtId') => $_->att('formatCode')
+ } $styles->find_nodes('//numFmt');
+ $format_str{0} = 'GENERAL'; # XXX others?
+
+ my @font = map {
+ Spreadsheet::ParseExcel::Font->new(
+ Height => 0+$_->first_child('sz')->att('val'),
+ # Attr => $iAttr,
+ # Color => $iCIdx,
+ # Super => $iSuper,
+ # UnderlineStyle => $iUnderline,
+ Name => $_->first_child('name')->att('val'),
+
+ # Bold => $bBold,
+ # Italic => $bItalic,
+ # Underline => $bUnderline,
+ # Strikeout => $bStrikeout,
+ )
+ } $styles->find_nodes('//font');
+
+ my @format = map {
+ Spreadsheet::ParseExcel::Format->new(
+ FontNo => 0+$_->att('fontId'),
+ Font => $font[$_->att('fontId')],
+ FmtIdx => 0+$_->att('numFmtId'),
+
+ # Lock => $iLock,
+ # Hidden => $iHidden,
+ # Style => $iStyle,
+ # Key123 => $i123,
+ # AlignH => $iAlH,
+ # Wrap => $iWrap,
+ # AlignV => $iAlV,
+ # JustLast => $iJustL,
+ # Rotate => $iRotate,
+
+ # Indent => $iInd,
+ # Shrink => $iShrink,
+ # Merge => $iMerge,
+ # ReadDir => $iReadDir,
+
+ # BdrStyle => [ $iBdrSL, $iBdrSR, $iBdrST, $iBdrSB ],
+ # BdrColor => [ $iBdrCL, $iBdrCR, $iBdrCT, $iBdrCB ],
+ # BdrDiag => [ $iBdrD, $iBdrSD, $iBdrCD ],
+ # Fill => [ $iFillP, $iFillCF, $iFillCB ],
+ )
+ } $styles->find_nodes('//cellXfs/xf');
+
+ return {
+ FormatStr => \%format_str,
+ Font => \@font,
+ Format => \@format,
+ }
+}
+
sub _extract_files {
my $self = shift;
my ($zip) = @_;