1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
module Roo
class Excelx
module Format
EXCEPTIONAL_FORMATS = {
'h:mm am/pm' => :date,
'h:mm:ss am/pm' => :date
}
STANDARD_FORMATS = {
0 => 'General'.freeze,
1 => '0'.freeze,
2 => '0.00'.freeze,
3 => '#,##0'.freeze,
4 => '#,##0.00'.freeze,
9 => '0%'.freeze,
10 => '0.00%'.freeze,
11 => '0.00E+00'.freeze,
12 => '# ?/?'.freeze,
13 => '# ??/??'.freeze,
14 => 'mm-dd-yy'.freeze,
15 => 'd-mmm-yy'.freeze,
16 => 'd-mmm'.freeze,
17 => 'mmm-yy'.freeze,
18 => 'h:mm AM/PM'.freeze,
19 => 'h:mm:ss AM/PM'.freeze,
20 => 'h:mm'.freeze,
21 => 'h:mm:ss'.freeze,
22 => 'm/d/yy h:mm'.freeze,
37 => '#,##0 ;(#,##0)'.freeze,
38 => '#,##0 ;[Red](#,##0)'.freeze,
39 => '#,##0.00;(#,##0.00)'.freeze,
40 => '#,##0.00;[Red](#,##0.00)'.freeze,
45 => 'mm:ss'.freeze,
46 => '[h]:mm:ss'.freeze,
47 => 'mmss.0'.freeze,
48 => '##0.0E+0'.freeze,
49 => '@'.freeze
}
def to_type(format)
format = format.to_s.downcase
if (type = EXCEPTIONAL_FORMATS[format])
type
elsif format.include?('#')
:float
elsif !format.match(/d+(?![\]])/).nil? || format.include?('y')
if format.include?('h') || format.include?('s')
:datetime
else
:date
end
elsif format.include?('h') || format.include?('s')
:time
elsif format.include?('%')
:percentage
else
:float
end
end
module_function :to_type
end
end
end
|