From aa2752584ff0bdf1257a310272a2522049e224a6 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 10 May 2013 22:01:45 -0500 Subject: start parsing out some formatting stuff --- lib/Spreadsheet/ParseXLSX.pm | 68 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) (limited to 'lib/Spreadsheet/ParseXLSX.pm') 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) = @_; -- cgit v1.2.3-54-g00ecf