diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-05-10 22:01:45 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-05-10 22:01:45 -0500 |
commit | aa2752584ff0bdf1257a310272a2522049e224a6 (patch) | |
tree | a3a6230ce48a10b286b6f8593288d02448cc9531 /lib | |
parent | ca46a57f572d9d30710fb89dd30b95549e57b491 (diff) | |
download | spreadsheet-parsexlsx-aa2752584ff0bdf1257a310272a2522049e224a6.tar.gz spreadsheet-parsexlsx-aa2752584ff0bdf1257a310272a2522049e224a6.zip |
start parsing out some formatting stuff
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Spreadsheet/ParseXLSX.pm | 68 |
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) = @_; |