line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Spreadsheet::ParseExcel::FmtDefault; |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
############################################################################### |
4
|
|
|
|
|
|
|
# |
5
|
|
|
|
|
|
|
# Spreadsheet::ParseExcel::FmtDefault - A class for Cell formats. |
6
|
|
|
|
|
|
|
# |
7
|
|
|
|
|
|
|
# Used in conjunction with Spreadsheet::ParseExcel. |
8
|
|
|
|
|
|
|
# |
9
|
|
|
|
|
|
|
# Copyright (c) 2014 Douglas Wilson |
10
|
|
|
|
|
|
|
# Copyright (c) 2009-2013 John McNamara |
11
|
|
|
|
|
|
|
# Copyright (c) 2006-2008 Gabor Szabo |
12
|
|
|
|
|
|
|
# Copyright (c) 2000-2006 Kawai Takanori |
13
|
|
|
|
|
|
|
# |
14
|
|
|
|
|
|
|
# perltidy with standard settings. |
15
|
|
|
|
|
|
|
# |
16
|
|
|
|
|
|
|
# Documentation after __END__ |
17
|
|
|
|
|
|
|
# |
18
|
|
|
|
|
|
|
|
19
|
21
|
|
|
21
|
|
106
|
use strict; |
|
21
|
|
|
|
|
39
|
|
|
21
|
|
|
|
|
650
|
|
20
|
21
|
|
|
21
|
|
101
|
use warnings; |
|
21
|
|
|
|
|
38
|
|
|
21
|
|
|
|
|
581
|
|
21
|
|
|
|
|
|
|
|
22
|
21
|
|
|
21
|
|
19577
|
use Spreadsheet::ParseExcel::Utility qw(ExcelFmt); |
|
21
|
|
|
|
|
83
|
|
|
21
|
|
|
|
|
21849
|
|
23
|
|
|
|
|
|
|
our $VERSION = '0.65'; |
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
my %hFmtDefault = ( |
26
|
|
|
|
|
|
|
0x00 => 'General', |
27
|
|
|
|
|
|
|
0x01 => '0', |
28
|
|
|
|
|
|
|
0x02 => '0.00', |
29
|
|
|
|
|
|
|
0x03 => '#,##0', |
30
|
|
|
|
|
|
|
0x04 => '#,##0.00', |
31
|
|
|
|
|
|
|
0x05 => '($#,##0_);($#,##0)', |
32
|
|
|
|
|
|
|
0x06 => '($#,##0_);[Red]($#,##0)', |
33
|
|
|
|
|
|
|
0x07 => '($#,##0.00_);($#,##0.00_)', |
34
|
|
|
|
|
|
|
0x08 => '($#,##0.00_);[Red]($#,##0.00_)', |
35
|
|
|
|
|
|
|
0x09 => '0%', |
36
|
|
|
|
|
|
|
0x0A => '0.00%', |
37
|
|
|
|
|
|
|
0x0B => '0.00E+00', |
38
|
|
|
|
|
|
|
0x0C => '# ?/?', |
39
|
|
|
|
|
|
|
0x0D => '# ??/??', |
40
|
|
|
|
|
|
|
0x0E => 'yyyy-mm-dd', # Was 'm-d-yy', which is bad as system default |
41
|
|
|
|
|
|
|
0x0F => 'd-mmm-yy', |
42
|
|
|
|
|
|
|
0x10 => 'd-mmm', |
43
|
|
|
|
|
|
|
0x11 => 'mmm-yy', |
44
|
|
|
|
|
|
|
0x12 => 'h:mm AM/PM', |
45
|
|
|
|
|
|
|
0x13 => 'h:mm:ss AM/PM', |
46
|
|
|
|
|
|
|
0x14 => 'h:mm', |
47
|
|
|
|
|
|
|
0x15 => 'h:mm:ss', |
48
|
|
|
|
|
|
|
0x16 => 'm-d-yy h:mm', |
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
#0x17-0x24 -- Differs in Natinal |
51
|
|
|
|
|
|
|
0x25 => '(#,##0_);(#,##0)', |
52
|
|
|
|
|
|
|
0x26 => '(#,##0_);[Red](#,##0)', |
53
|
|
|
|
|
|
|
0x27 => '(#,##0.00);(#,##0.00)', |
54
|
|
|
|
|
|
|
0x28 => '(#,##0.00);[Red](#,##0.00)', |
55
|
|
|
|
|
|
|
0x29 => '_(*#,##0_);_(*(#,##0);_(*"-"_);_(@_)', |
56
|
|
|
|
|
|
|
0x2A => '_($*#,##0_);_($*(#,##0);_(*"-"_);_(@_)', |
57
|
|
|
|
|
|
|
0x2B => '_(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_)', |
58
|
|
|
|
|
|
|
0x2C => '_($*#,##0.00_);_($*(#,##0.00);_(*"-"??_);_(@_)', |
59
|
|
|
|
|
|
|
0x2D => 'mm:ss', |
60
|
|
|
|
|
|
|
0x2E => '[h]:mm:ss', |
61
|
|
|
|
|
|
|
0x2F => 'mm:ss.0', |
62
|
|
|
|
|
|
|
0x30 => '##0.0E+0', |
63
|
|
|
|
|
|
|
0x31 => '@', |
64
|
|
|
|
|
|
|
); |
65
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
67
|
|
|
|
|
|
|
# new (for Spreadsheet::ParseExcel::FmtDefault) |
68
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
69
|
|
|
|
|
|
|
sub new { |
70
|
37
|
|
|
37
|
0
|
123
|
my ( $sPkg, %hKey ) = @_; |
71
|
37
|
|
|
|
|
96
|
my $oThis = {}; |
72
|
37
|
|
|
|
|
84
|
bless $oThis; |
73
|
37
|
|
|
|
|
209
|
return $oThis; |
74
|
|
|
|
|
|
|
} |
75
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
77
|
|
|
|
|
|
|
# TextFmt (for Spreadsheet::ParseExcel::FmtDefault) |
78
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
79
|
|
|
|
|
|
|
sub TextFmt { |
80
|
1215
|
|
|
1215
|
0
|
2938
|
my ( $oThis, $sTxt, $sCode ) = @_; |
81
|
1215
|
100
|
100
|
|
|
7119
|
return $sTxt if ( ( !defined($sCode) ) || ( $sCode eq '_native_' ) ); |
82
|
365
|
|
|
|
|
18451
|
return pack( 'U*', unpack( 'n*', $sTxt ) ); |
83
|
|
|
|
|
|
|
} |
84
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
86
|
|
|
|
|
|
|
# FmtStringDef (for Spreadsheet::ParseExcel::FmtDefault) |
87
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
88
|
|
|
|
|
|
|
sub FmtStringDef { |
89
|
387
|
|
|
387
|
0
|
630
|
my ( $oThis, $iFmtIdx, $oBook, $rhFmt ) = @_; |
90
|
387
|
|
|
|
|
763
|
my $sFmtStr = $oBook->{FormatStr}->{$iFmtIdx}; |
91
|
|
|
|
|
|
|
|
92
|
387
|
100
|
100
|
|
|
1742
|
if ( !( defined($sFmtStr) ) && defined($rhFmt) ) { |
93
|
56
|
|
|
|
|
111
|
$sFmtStr = $rhFmt->{$iFmtIdx}; |
94
|
|
|
|
|
|
|
} |
95
|
387
|
100
|
|
|
|
1055
|
$sFmtStr = $hFmtDefault{$iFmtIdx} unless ($sFmtStr); |
96
|
387
|
|
|
|
|
885
|
return $sFmtStr; |
97
|
|
|
|
|
|
|
} |
98
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
100
|
|
|
|
|
|
|
# FmtString (for Spreadsheet::ParseExcel::FmtDefault) |
101
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
102
|
|
|
|
|
|
|
sub FmtString { |
103
|
387
|
|
|
387
|
0
|
561
|
my ( $oThis, $oCell, $oBook ) = @_; |
104
|
|
|
|
|
|
|
|
105
|
387
|
|
|
|
|
1616
|
my $sFmtStr = |
106
|
|
|
|
|
|
|
$oThis->FmtStringDef( $oBook->{Format}[ $oCell->{FormatNo} ]->{FmtIdx}, |
107
|
|
|
|
|
|
|
$oBook ); |
108
|
|
|
|
|
|
|
|
109
|
|
|
|
|
|
|
# Special case for cells that use Lotus123 style leading |
110
|
|
|
|
|
|
|
# apostrophe to designate text formatting. |
111
|
387
|
50
|
|
|
|
1389
|
if ( $oBook->{Format}[ $oCell->{FormatNo} ]->{Key123} ) { |
112
|
0
|
|
|
|
|
0
|
$sFmtStr = '@'; |
113
|
|
|
|
|
|
|
} |
114
|
|
|
|
|
|
|
|
115
|
387
|
50
|
|
|
|
797
|
unless ( defined($sFmtStr) ) { |
116
|
0
|
0
|
|
|
|
0
|
if ( $oCell->{Type} eq 'Numeric' ) { |
|
|
0
|
|
|
|
|
|
117
|
0
|
0
|
|
|
|
0
|
if ( int( $oCell->{Val} ) != $oCell->{Val} ) { |
118
|
0
|
|
|
|
|
0
|
$sFmtStr = '0.00'; |
119
|
|
|
|
|
|
|
} |
120
|
|
|
|
|
|
|
else { |
121
|
0
|
|
|
|
|
0
|
$sFmtStr = '0'; |
122
|
|
|
|
|
|
|
} |
123
|
|
|
|
|
|
|
} |
124
|
|
|
|
|
|
|
elsif ( $oCell->{Type} eq 'Date' ) { |
125
|
0
|
0
|
|
|
|
0
|
if ( int( $oCell->{Val} ) <= 0 ) { |
126
|
0
|
|
|
|
|
0
|
$sFmtStr = 'h:mm:ss'; |
127
|
|
|
|
|
|
|
} |
128
|
|
|
|
|
|
|
else { |
129
|
0
|
|
|
|
|
0
|
$sFmtStr = 'yyyy-mm-dd'; |
130
|
|
|
|
|
|
|
} |
131
|
|
|
|
|
|
|
} |
132
|
|
|
|
|
|
|
else { |
133
|
0
|
|
|
|
|
0
|
$sFmtStr = '@'; |
134
|
|
|
|
|
|
|
} |
135
|
|
|
|
|
|
|
} |
136
|
387
|
|
|
|
|
773
|
return $sFmtStr; |
137
|
|
|
|
|
|
|
} |
138
|
|
|
|
|
|
|
|
139
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
140
|
|
|
|
|
|
|
# ValFmt (for Spreadsheet::ParseExcel::FmtDefault) |
141
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
142
|
|
|
|
|
|
|
sub ValFmt { |
143
|
1122
|
|
|
1122
|
0
|
1520
|
my ( $oThis, $oCell, $oBook ) = @_; |
144
|
|
|
|
|
|
|
|
145
|
1122
|
|
|
|
|
1744
|
my ( $Dt, $iFmtIdx, $iNumeric, $Flg1904 ); |
146
|
|
|
|
|
|
|
|
147
|
1122
|
100
|
|
|
|
2803
|
if ( $oCell->{Type} eq 'Text' ) { |
148
|
737
|
100
|
66
|
|
|
5364
|
$Dt = |
149
|
|
|
|
|
|
|
( ( defined $oCell->{Val} ) && ( $oCell->{Val} ne '' ) ) |
150
|
|
|
|
|
|
|
? $oThis->TextFmt( $oCell->{Val}, $oCell->{Code} ) |
151
|
|
|
|
|
|
|
: ''; |
152
|
|
|
|
|
|
|
|
153
|
737
|
|
|
|
|
7077
|
return $Dt; |
154
|
|
|
|
|
|
|
} |
155
|
|
|
|
|
|
|
else { |
156
|
385
|
|
|
|
|
716
|
$Dt = $oCell->{Val}; |
157
|
385
|
|
|
|
|
683
|
$Flg1904 = $oBook->{Flg1904}; |
158
|
385
|
|
|
|
|
874
|
my $sFmtStr = $oThis->FmtString( $oCell, $oBook ); |
159
|
|
|
|
|
|
|
|
160
|
385
|
|
|
|
|
1389
|
return ExcelFmt( $sFmtStr, $Dt, $Flg1904, $oCell->{Type} ); |
161
|
|
|
|
|
|
|
} |
162
|
|
|
|
|
|
|
} |
163
|
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
165
|
|
|
|
|
|
|
# ChkType (for Spreadsheet::ParseExcel::FmtDefault) |
166
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
167
|
|
|
|
|
|
|
sub ChkType { |
168
|
1122
|
|
|
1122
|
0
|
1727
|
my ( $oPkg, $iNumeric, $iFmtIdx ) = @_; |
169
|
1122
|
100
|
|
|
|
2019
|
if ($iNumeric) { |
170
|
385
|
100
|
100
|
|
|
2354
|
if ( ( ( $iFmtIdx >= 0x0E ) && ( $iFmtIdx <= 0x16 ) ) |
|
|
|
66
|
|
|
|
|
|
|
|
66
|
|
|
|
|
171
|
|
|
|
|
|
|
|| ( ( $iFmtIdx >= 0x2D ) && ( $iFmtIdx <= 0x2F ) ) ) |
172
|
|
|
|
|
|
|
{ |
173
|
49
|
|
|
|
|
226
|
return "Date"; |
174
|
|
|
|
|
|
|
} |
175
|
|
|
|
|
|
|
else { |
176
|
336
|
|
|
|
|
1312
|
return "Numeric"; |
177
|
|
|
|
|
|
|
} |
178
|
|
|
|
|
|
|
} |
179
|
|
|
|
|
|
|
else { |
180
|
737
|
|
|
|
|
2562
|
return "Text"; |
181
|
|
|
|
|
|
|
} |
182
|
|
|
|
|
|
|
} |
183
|
|
|
|
|
|
|
|
184
|
|
|
|
|
|
|
1; |
185
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
__END__ |