caxlsx 4.0.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -12
- data/README.md +1 -1
- data/examples/generate.rb +3 -1
- data/lib/axlsx/content_type/abstract_content_type.rb +6 -3
- data/lib/axlsx/content_type/content_type.rb +4 -4
- data/lib/axlsx/content_type/default.rb +4 -1
- data/lib/axlsx/content_type/override.rb +4 -1
- data/lib/axlsx/doc_props/app.rb +91 -24
- data/lib/axlsx/drawing/area_chart.rb +3 -3
- data/lib/axlsx/drawing/area_series.rb +10 -4
- data/lib/axlsx/drawing/ax_data_source.rb +1 -1
- data/lib/axlsx/drawing/axes.rb +1 -1
- data/lib/axlsx/drawing/axis.rb +25 -7
- data/lib/axlsx/drawing/bar_3D_chart.rb +3 -3
- data/lib/axlsx/drawing/bar_chart.rb +3 -3
- data/lib/axlsx/drawing/bar_series.rb +14 -5
- data/lib/axlsx/drawing/bubble_chart.rb +2 -2
- data/lib/axlsx/drawing/bubble_series.rb +2 -2
- data/lib/axlsx/drawing/cat_axis.rb +23 -8
- data/lib/axlsx/drawing/chart.rb +32 -8
- data/lib/axlsx/drawing/d_lbls.rb +8 -8
- data/lib/axlsx/drawing/drawing.rb +50 -49
- data/lib/axlsx/drawing/hyperlink.rb +13 -4
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -3
- data/lib/axlsx/drawing/line_chart.rb +3 -3
- data/lib/axlsx/drawing/line_series.rb +10 -4
- data/lib/axlsx/drawing/marker.rb +19 -4
- data/lib/axlsx/drawing/num_val.rb +1 -1
- data/lib/axlsx/drawing/one_cell_anchor.rb +8 -2
- data/lib/axlsx/drawing/pic.rb +17 -8
- data/lib/axlsx/drawing/pie_3D_chart.rb +3 -3
- data/lib/axlsx/drawing/pie_chart.rb +36 -0
- data/lib/axlsx/drawing/pie_series.rb +18 -6
- data/lib/axlsx/drawing/scaling.rb +18 -4
- data/lib/axlsx/drawing/scatter_chart.rb +2 -2
- data/lib/axlsx/drawing/scatter_series.rb +2 -2
- data/lib/axlsx/drawing/ser_axis.rb +11 -5
- data/lib/axlsx/drawing/series.rb +8 -2
- data/lib/axlsx/drawing/two_cell_anchor.rb +1 -1
- data/lib/axlsx/drawing/val_axis.rb +2 -2
- data/lib/axlsx/drawing/view_3D.rb +8 -2
- data/lib/axlsx/package.rb +11 -11
- data/lib/axlsx/rels/relationship.rb +15 -5
- data/lib/axlsx/rels/relationships.rb +3 -3
- data/lib/axlsx/stylesheet/border.rb +12 -3
- data/lib/axlsx/stylesheet/border_pr.rb +15 -4
- data/lib/axlsx/stylesheet/cell_alignment.rb +39 -10
- data/lib/axlsx/stylesheet/cell_protection.rb +9 -2
- data/lib/axlsx/stylesheet/cell_style.rb +30 -7
- data/lib/axlsx/stylesheet/color.rb +10 -4
- data/lib/axlsx/stylesheet/dxf.rb +29 -6
- data/lib/axlsx/stylesheet/fill.rb +4 -1
- data/lib/axlsx/stylesheet/font.rb +59 -13
- data/lib/axlsx/stylesheet/gradient_fill.rb +9 -3
- data/lib/axlsx/stylesheet/gradient_stop.rb +9 -2
- data/lib/axlsx/stylesheet/num_fmt.rb +8 -2
- data/lib/axlsx/stylesheet/pattern_fill.rb +14 -3
- data/lib/axlsx/stylesheet/styles.rb +83 -43
- data/lib/axlsx/stylesheet/table_style.rb +15 -4
- data/lib/axlsx/stylesheet/table_style_element.rb +12 -3
- data/lib/axlsx/stylesheet/table_styles.rb +10 -3
- data/lib/axlsx/stylesheet/xf.rb +69 -16
- data/lib/axlsx/util/accessors.rb +9 -7
- data/lib/axlsx/util/constants.rb +2 -2
- data/lib/axlsx/util/serialized_attributes.rb +2 -2
- data/lib/axlsx/util/simple_typed_list.rb +25 -12
- data/lib/axlsx/util/storage.rb +4 -4
- data/lib/axlsx/util/validators.rb +1 -1
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/defined_name.rb +1 -1
- data/lib/axlsx/workbook/defined_names.rb +1 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +3 -3
- data/lib/axlsx/workbook/workbook.rb +80 -67
- data/lib/axlsx/workbook/workbook_views.rb +1 -1
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +4 -4
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +5 -3
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +3 -3
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +1 -1
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +2 -2
- data/lib/axlsx/workbook/worksheet/border_creator.rb +4 -4
- data/lib/axlsx/workbook/worksheet/cell.rb +37 -17
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +1 -1
- data/lib/axlsx/workbook/worksheet/cfvo.rb +8 -2
- data/lib/axlsx/workbook/worksheet/col.rb +22 -9
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +1 -1
- data/lib/axlsx/workbook/worksheet/cols.rb +1 -1
- data/lib/axlsx/workbook/worksheet/comment.rb +2 -2
- data/lib/axlsx/workbook/worksheet/comments.rb +1 -1
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +9 -3
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +70 -15
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +3 -3
- data/lib/axlsx/workbook/worksheet/data_validation.rb +53 -14
- data/lib/axlsx/workbook/worksheet/data_validations.rb +3 -3
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +2 -2
- data/lib/axlsx/workbook/worksheet/dimension.rb +1 -1
- data/lib/axlsx/workbook/worksheet/icon_set.rb +17 -5
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +1 -1
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +1 -1
- data/lib/axlsx/workbook/worksheet/page_margins.rb +30 -7
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -2
- data/lib/axlsx/workbook/worksheet/page_setup.rb +32 -9
- data/lib/axlsx/workbook/worksheet/pane.rb +8 -2
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +29 -5
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +1 -1
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +1 -1
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +31 -11
- data/lib/axlsx/workbook/worksheet/row.rb +5 -2
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +1 -1
- data/lib/axlsx/workbook/worksheet/selection.rb +8 -2
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +1 -1
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +1 -1
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +30 -9
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +2 -2
- data/lib/axlsx/workbook/worksheet/tables.rb +1 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +28 -14
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +3 -3
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +2 -2
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +2 -2
- data/lib/axlsx.rb +44 -30
- data/lib/caxlsx.rb +1 -1
- metadata +10 -48
|
@@ -17,7 +17,7 @@ module Axlsx
|
|
|
17
17
|
|
|
18
18
|
serializable_attributes :auto, :rgb, :tint
|
|
19
19
|
|
|
20
|
-
# Determines if the color is system color
|
|
20
|
+
# Determines if the color is system color dependent
|
|
21
21
|
# @return [Boolean]
|
|
22
22
|
attr_reader :auto
|
|
23
23
|
|
|
@@ -47,7 +47,10 @@ module Axlsx
|
|
|
47
47
|
attr_reader :tint
|
|
48
48
|
|
|
49
49
|
# @see auto
|
|
50
|
-
def auto=(v)
|
|
50
|
+
def auto=(v)
|
|
51
|
+
Axlsx.validate_boolean v
|
|
52
|
+
@auto = v
|
|
53
|
+
end
|
|
51
54
|
|
|
52
55
|
# @see color
|
|
53
56
|
def rgb=(v)
|
|
@@ -61,12 +64,15 @@ module Axlsx
|
|
|
61
64
|
end
|
|
62
65
|
|
|
63
66
|
# @see tint
|
|
64
|
-
def tint=(v)
|
|
67
|
+
def tint=(v)
|
|
68
|
+
Axlsx.validate_float v
|
|
69
|
+
@tint = v
|
|
70
|
+
end
|
|
65
71
|
|
|
66
72
|
# This version does not support themes
|
|
67
73
|
# def theme=(v) Axlsx::validate_unsigned_integer v; @theme = v end
|
|
68
74
|
|
|
69
|
-
# Indexed colors are for backward
|
|
75
|
+
# Indexed colors are for backward compatibility which I am choosing not to support
|
|
70
76
|
# def indexed=(v) Axlsx::validate_unsigned_integer v; @indexed = v end
|
|
71
77
|
|
|
72
78
|
# Serializes the object
|
data/lib/axlsx/stylesheet/dxf.rb
CHANGED
|
@@ -49,17 +49,40 @@ module Axlsx
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# @see Dxf#alignment
|
|
52
|
-
def alignment=(v)
|
|
52
|
+
def alignment=(v)
|
|
53
|
+
DataTypeValidator.validate "Dxf.alignment", CellAlignment, v
|
|
54
|
+
@alignment = v
|
|
55
|
+
end
|
|
56
|
+
|
|
53
57
|
# @see protection
|
|
54
|
-
def protection=(v)
|
|
58
|
+
def protection=(v)
|
|
59
|
+
DataTypeValidator.validate "Dxf.protection", CellProtection, v
|
|
60
|
+
@protection = v
|
|
61
|
+
end
|
|
62
|
+
|
|
55
63
|
# @see numFmt
|
|
56
|
-
def numFmt=(v)
|
|
64
|
+
def numFmt=(v)
|
|
65
|
+
DataTypeValidator.validate "Dxf.numFmt", NumFmt, v
|
|
66
|
+
@numFmt = v
|
|
67
|
+
end
|
|
68
|
+
|
|
57
69
|
# @see font
|
|
58
|
-
def font=(v)
|
|
70
|
+
def font=(v)
|
|
71
|
+
DataTypeValidator.validate "Dxf.font", Font, v
|
|
72
|
+
@font = v
|
|
73
|
+
end
|
|
74
|
+
|
|
59
75
|
# @see border
|
|
60
|
-
def border=(v)
|
|
76
|
+
def border=(v)
|
|
77
|
+
DataTypeValidator.validate "Dxf.border", Border, v
|
|
78
|
+
@border = v
|
|
79
|
+
end
|
|
80
|
+
|
|
61
81
|
# @see fill
|
|
62
|
-
def fill=(v)
|
|
82
|
+
def fill=(v)
|
|
83
|
+
DataTypeValidator.validate "Dxf.fill", Fill, v
|
|
84
|
+
@fill = v
|
|
85
|
+
end
|
|
63
86
|
|
|
64
87
|
# Serializes the object
|
|
65
88
|
# @param [String] str
|
|
@@ -28,6 +28,9 @@ module Axlsx
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# @see fill_type
|
|
31
|
-
def fill_type=(v)
|
|
31
|
+
def fill_type=(v)
|
|
32
|
+
DataTypeValidator.validate "Fill.fill_type", [PatternFill, GradientFill], v
|
|
33
|
+
@fill_type = v
|
|
34
|
+
end
|
|
32
35
|
end
|
|
33
36
|
end
|
|
@@ -33,7 +33,7 @@ module Axlsx
|
|
|
33
33
|
# The charset of the font
|
|
34
34
|
# @return [Integer]
|
|
35
35
|
# @note
|
|
36
|
-
# The following values are defined in the OOXML specification and are OS
|
|
36
|
+
# The following values are defined in the OOXML specification and are OS dependent values
|
|
37
37
|
# 0 ANSI_CHARSET
|
|
38
38
|
# 1 DEFAULT_CHARSET
|
|
39
39
|
# 2 SYMBOL_CHARSET
|
|
@@ -112,15 +112,34 @@ module Axlsx
|
|
|
112
112
|
attr_reader :sz
|
|
113
113
|
|
|
114
114
|
# @see name
|
|
115
|
-
def name=(v)
|
|
115
|
+
def name=(v)
|
|
116
|
+
Axlsx.validate_string v
|
|
117
|
+
@name = v
|
|
118
|
+
end
|
|
119
|
+
|
|
116
120
|
# @see charset
|
|
117
|
-
def charset=(v)
|
|
121
|
+
def charset=(v)
|
|
122
|
+
Axlsx.validate_unsigned_int v
|
|
123
|
+
@charset = v
|
|
124
|
+
end
|
|
125
|
+
|
|
118
126
|
# @see family
|
|
119
|
-
def family=(v)
|
|
127
|
+
def family=(v)
|
|
128
|
+
Axlsx.validate_unsigned_int v
|
|
129
|
+
@family = v
|
|
130
|
+
end
|
|
131
|
+
|
|
120
132
|
# @see b
|
|
121
|
-
def b=(v)
|
|
133
|
+
def b=(v)
|
|
134
|
+
Axlsx.validate_boolean v
|
|
135
|
+
@b = v
|
|
136
|
+
end
|
|
137
|
+
|
|
122
138
|
# @see i
|
|
123
|
-
def i=(v)
|
|
139
|
+
def i=(v)
|
|
140
|
+
Axlsx.validate_boolean v
|
|
141
|
+
@i = v
|
|
142
|
+
end
|
|
124
143
|
|
|
125
144
|
# @see u
|
|
126
145
|
def u=(v)
|
|
@@ -131,19 +150,46 @@ module Axlsx
|
|
|
131
150
|
end
|
|
132
151
|
|
|
133
152
|
# @see strike
|
|
134
|
-
def strike=(v)
|
|
153
|
+
def strike=(v)
|
|
154
|
+
Axlsx.validate_boolean v
|
|
155
|
+
@strike = v
|
|
156
|
+
end
|
|
157
|
+
|
|
135
158
|
# @see outline
|
|
136
|
-
def outline=(v)
|
|
159
|
+
def outline=(v)
|
|
160
|
+
Axlsx.validate_boolean v
|
|
161
|
+
@outline = v
|
|
162
|
+
end
|
|
163
|
+
|
|
137
164
|
# @see shadow
|
|
138
|
-
def shadow=(v)
|
|
165
|
+
def shadow=(v)
|
|
166
|
+
Axlsx.validate_boolean v
|
|
167
|
+
@shadow = v
|
|
168
|
+
end
|
|
169
|
+
|
|
139
170
|
# @see condense
|
|
140
|
-
def condense=(v)
|
|
171
|
+
def condense=(v)
|
|
172
|
+
Axlsx.validate_boolean v
|
|
173
|
+
@condense = v
|
|
174
|
+
end
|
|
175
|
+
|
|
141
176
|
# @see extend
|
|
142
|
-
def extend=(v)
|
|
177
|
+
def extend=(v)
|
|
178
|
+
Axlsx.validate_boolean v
|
|
179
|
+
@extend = v
|
|
180
|
+
end
|
|
181
|
+
|
|
143
182
|
# @see color
|
|
144
|
-
def color=(v)
|
|
183
|
+
def color=(v)
|
|
184
|
+
DataTypeValidator.validate "Font.color", Color, v
|
|
185
|
+
@color = v
|
|
186
|
+
end
|
|
187
|
+
|
|
145
188
|
# @see sz
|
|
146
|
-
def sz=(v)
|
|
189
|
+
def sz=(v)
|
|
190
|
+
Axlsx.validate_unsigned_int v
|
|
191
|
+
@sz = v
|
|
192
|
+
end
|
|
147
193
|
|
|
148
194
|
# Serializes the object
|
|
149
195
|
# @param [String] str
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Axlsx
|
|
4
|
-
# A GradientFill defines the color and positioning for
|
|
4
|
+
# A GradientFill defines the color and positioning for gradient cell fill.
|
|
5
5
|
# @see Open Office XML Part 1 §18.8.24
|
|
6
6
|
class GradientFill
|
|
7
7
|
include Axlsx::OptionsParser
|
|
@@ -55,10 +55,16 @@ module Axlsx
|
|
|
55
55
|
attr_reader :stop
|
|
56
56
|
|
|
57
57
|
# @see type
|
|
58
|
-
def type=(v)
|
|
58
|
+
def type=(v)
|
|
59
|
+
Axlsx.validate_gradient_type v
|
|
60
|
+
@type = v
|
|
61
|
+
end
|
|
59
62
|
|
|
60
63
|
# @see degree
|
|
61
|
-
def degree=(v)
|
|
64
|
+
def degree=(v)
|
|
65
|
+
Axlsx.validate_float v
|
|
66
|
+
@degree = v
|
|
67
|
+
end
|
|
62
68
|
|
|
63
69
|
# @see left
|
|
64
70
|
def left=(v)
|
|
@@ -22,9 +22,16 @@ module Axlsx
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
# @see color
|
|
25
|
-
def color=(v)
|
|
25
|
+
def color=(v)
|
|
26
|
+
DataTypeValidator.validate "GradientStop.color", Color, v
|
|
27
|
+
@color = v
|
|
28
|
+
end
|
|
29
|
+
|
|
26
30
|
# @see position
|
|
27
|
-
def position=(v)
|
|
31
|
+
def position=(v)
|
|
32
|
+
DataTypeValidator.validate "GradientStop.position", Float, v, ->(arg) { arg >= 0 && arg <= 1 }
|
|
33
|
+
@position = v
|
|
34
|
+
end
|
|
28
35
|
|
|
29
36
|
# Serializes the object
|
|
30
37
|
# @param [String] str
|
|
@@ -61,10 +61,16 @@ module Axlsx
|
|
|
61
61
|
attr_reader :numFmtId
|
|
62
62
|
|
|
63
63
|
# @see numFmtId
|
|
64
|
-
def numFmtId=(v)
|
|
64
|
+
def numFmtId=(v)
|
|
65
|
+
Axlsx.validate_unsigned_int v
|
|
66
|
+
@numFmtId = v
|
|
67
|
+
end
|
|
65
68
|
|
|
66
69
|
# @see formatCode
|
|
67
|
-
def formatCode=(v)
|
|
70
|
+
def formatCode=(v)
|
|
71
|
+
Axlsx.validate_string v
|
|
72
|
+
@formatCode = v
|
|
73
|
+
end
|
|
68
74
|
|
|
69
75
|
# Serializes the object
|
|
70
76
|
# @param [String] str
|
|
@@ -49,11 +49,22 @@ module Axlsx
|
|
|
49
49
|
attr_reader :patternType
|
|
50
50
|
|
|
51
51
|
# @see fgColor
|
|
52
|
-
def fgColor=(v)
|
|
52
|
+
def fgColor=(v)
|
|
53
|
+
DataTypeValidator.validate "PatternFill.fgColor", Color, v
|
|
54
|
+
@fgColor = v
|
|
55
|
+
end
|
|
56
|
+
|
|
53
57
|
# @see bgColor
|
|
54
|
-
def bgColor=(v)
|
|
58
|
+
def bgColor=(v)
|
|
59
|
+
DataTypeValidator.validate "PatternFill.bgColor", Color, v
|
|
60
|
+
@bgColor = v
|
|
61
|
+
end
|
|
62
|
+
|
|
55
63
|
# @see patternType
|
|
56
|
-
def patternType=(v)
|
|
64
|
+
def patternType=(v)
|
|
65
|
+
Axlsx.validate_pattern_type v
|
|
66
|
+
@patternType = v
|
|
67
|
+
end
|
|
57
68
|
|
|
58
69
|
# Serializes the object
|
|
59
70
|
# @param [String] str
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Axlsx
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
4
|
+
require_relative 'border'
|
|
5
|
+
require_relative 'border_pr'
|
|
6
|
+
require_relative 'cell_alignment'
|
|
7
|
+
require_relative 'cell_style'
|
|
8
|
+
require_relative 'color'
|
|
9
|
+
require_relative 'fill'
|
|
10
|
+
require_relative 'font'
|
|
11
|
+
require_relative 'gradient_fill'
|
|
12
|
+
require_relative 'gradient_stop'
|
|
13
|
+
require_relative 'num_fmt'
|
|
14
|
+
require_relative 'pattern_fill'
|
|
15
|
+
require_relative 'table_style'
|
|
16
|
+
require_relative 'table_styles'
|
|
17
|
+
require_relative 'table_style_element'
|
|
18
|
+
require_relative 'dxf'
|
|
19
|
+
require_relative 'xf'
|
|
20
|
+
require_relative 'cell_protection'
|
|
21
21
|
|
|
22
22
|
# The Styles class manages worksheet styles
|
|
23
23
|
# In addition to creating the require style objects for a valid xlsx package, this class provides the key mechanism for adding styles to your workbook, and safely applying them to the cells of your worksheet.
|
|
24
|
-
# All portions of the stylesheet are implemented here exception colors, which specify legacy and modified
|
|
24
|
+
# All portions of the stylesheet are implemented here exception colors, which specify legacy and modified palette colors, and exLst, which is used as a future feature data storage area.
|
|
25
25
|
# @see Office Open XML Part 1 18.8.11 for gory details on how this stuff gets put together
|
|
26
26
|
# @see Styles#add_style
|
|
27
27
|
# @note The recommended way to manage styles is with add_style
|
|
@@ -156,7 +156,7 @@ module Axlsx
|
|
|
156
156
|
# ws = p.workbook.add_worksheet
|
|
157
157
|
#
|
|
158
158
|
# # black text on a white background at 14pt with thin borders!
|
|
159
|
-
# title = ws.styles.add_style(:bg_color => "FFFF0000", :fg_color=>"
|
|
159
|
+
# title = ws.styles.add_style(:bg_color => "FFFF0000", :fg_color=>"FF000000", :sz=>14, :border=> {:style => :thin, :color => "FFFF0000"}
|
|
160
160
|
#
|
|
161
161
|
# ws.add_row ["Least Popular Pets"]
|
|
162
162
|
# ws.add_row ["", "Dry Skinned Reptiles", "Bald Cats", "Violent Parrots"], :style=>title
|
|
@@ -174,7 +174,7 @@ module Axlsx
|
|
|
174
174
|
#
|
|
175
175
|
# # define your styles
|
|
176
176
|
# title = ws.styles.add_style(:bg_color => "FFFF0000",
|
|
177
|
-
# :fg_color=>"
|
|
177
|
+
# :fg_color=>"FF000000",
|
|
178
178
|
# :border=>Axlsx::STYLE_THIN_BORDER,
|
|
179
179
|
# :alignment=>{:horizontal => :center})
|
|
180
180
|
#
|
|
@@ -209,10 +209,10 @@ module Axlsx
|
|
|
209
209
|
#
|
|
210
210
|
# # define your styles
|
|
211
211
|
# profitable = wb.styles.add_style(:bg_color => "FFFF0000",
|
|
212
|
-
# :fg_color=>"
|
|
212
|
+
# :fg_color=>"FF000000",
|
|
213
213
|
# :type => :dxf)
|
|
214
214
|
#
|
|
215
|
-
# ws.add_row ["
|
|
215
|
+
# ws.add_row ["Generated At:", Time.now], :styles=>[nil, date_time]
|
|
216
216
|
# ws.add_row ["Previous Year Quarterly Profits (JPY)"], :style=>title
|
|
217
217
|
# ws.add_row ["Quarter", "Profit", "% of Total"], :style=>title
|
|
218
218
|
# ws.add_row ["Q1", 4000, 40], :style=>[title, currency, percent]
|
|
@@ -245,7 +245,7 @@ module Axlsx
|
|
|
245
245
|
|
|
246
246
|
font_defaults = { name: @fonts.first.name, sz: @fonts.first.sz, family: @fonts.first.family }
|
|
247
247
|
|
|
248
|
-
raw_style = { type: :xf }.merge(font_defaults
|
|
248
|
+
raw_style = { type: :xf }.merge(font_defaults, options)
|
|
249
249
|
|
|
250
250
|
if raw_style[:format_code]
|
|
251
251
|
raw_style.delete(:num_fmt)
|
|
@@ -275,7 +275,7 @@ module Axlsx
|
|
|
275
275
|
if options[:type] == :xf
|
|
276
276
|
xf_index = (cellXfs << style)
|
|
277
277
|
|
|
278
|
-
# Add styles to style_index cache for
|
|
278
|
+
# Add styles to style_index cache for reuse
|
|
279
279
|
style_index[xf_index] = raw_style
|
|
280
280
|
|
|
281
281
|
xf_index
|
|
@@ -298,7 +298,7 @@ module Axlsx
|
|
|
298
298
|
|
|
299
299
|
# parses add_style options for alignment
|
|
300
300
|
# noop if options hash does not include :alignment key
|
|
301
|
-
# @option options [Hash] alignment A hash of options to prive the CellAlignment
|
|
301
|
+
# @option options [Hash] alignment A hash of options to prive the CellAlignment initializer
|
|
302
302
|
# @return [CellAlignment]
|
|
303
303
|
# @see CellAlignment
|
|
304
304
|
def parse_alignment_options(options = {})
|
|
@@ -325,27 +325,60 @@ module Axlsx
|
|
|
325
325
|
def parse_font_options(options = {})
|
|
326
326
|
return if (options.keys & [:fg_color, :sz, :b, :i, :u, :strike, :outline, :shadow, :charset, :family, :font_name]).empty?
|
|
327
327
|
|
|
328
|
-
Axlsx.instance_values_for(fonts.first).
|
|
329
|
-
# Thanks for that 1.8.7 - cant do a simple merge...
|
|
330
|
-
options[key.to_sym] = value unless options.key?(key.to_sym)
|
|
331
|
-
end
|
|
332
|
-
font = Font.new(options)
|
|
328
|
+
font = Font.new(Axlsx.instance_values_for(fonts.first).merge(options))
|
|
333
329
|
font.color = Color.new(rgb: options[:fg_color]) if options[:fg_color]
|
|
334
330
|
font.name = options[:font_name] if options[:font_name]
|
|
335
331
|
options[:type] == :dxf ? font : fonts << font
|
|
336
332
|
end
|
|
337
333
|
|
|
338
334
|
# parses add_style options for fills. If the options hash contains :type => :dxf we return a Fill object. If not, we return the index of the fill after being added to the fills collection.
|
|
339
|
-
# @note noop
|
|
340
|
-
# @option options [String] bg_color The rgb color to apply to the fill
|
|
335
|
+
# @note noop unless at least one of the documented attributes is specified in options
|
|
336
|
+
# @option options [String] bg_color The rgb color to apply to the fill. An alias for pattern_bg_color if you need only a solid background
|
|
337
|
+
# @option options [String] pattern_type The fill pattern to apply to the fill
|
|
338
|
+
# @option options [String] pattern_bg_color The rgb color to apply to the fill as the first color
|
|
339
|
+
# @option options [String] pattern_fg_color The rgb color to apply to the fill as the second color
|
|
341
340
|
# @return [Fill|Integer]
|
|
342
341
|
def parse_fill_options(options = {})
|
|
343
|
-
return unless options[:bg_color]
|
|
342
|
+
return unless options[:bg_color] || options[:pattern_type] || options[:pattern_bg_color] || options[:pattern_fg_color]
|
|
344
343
|
|
|
345
|
-
|
|
344
|
+
pattern_type = options[:pattern_type] || :solid
|
|
346
345
|
dxf = options[:type] == :dxf
|
|
347
|
-
|
|
348
|
-
|
|
346
|
+
|
|
347
|
+
pattern_options = {
|
|
348
|
+
patternType: pattern_type
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if options[:pattern_bg_color] && options[:bg_color]
|
|
352
|
+
warn 'Both `bg_color` and `pattern_bg_color` got defined. To get a solid background without defining it in `patter_type`, use only `bg_color`, otherwise use only `pattern_bg_color` to avoid confusion.'
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
bg_color = options[:pattern_bg_color] || options[:bg_color]
|
|
356
|
+
fg_color = options[:pattern_fg_color]
|
|
357
|
+
|
|
358
|
+
# Both bgColor and fgColor happens to configure the background of the cell.
|
|
359
|
+
# One of them sets the "background" of the cell, while the other one is
|
|
360
|
+
# responsible for the "pattern" of the cell. When you pick "solid" pattern for
|
|
361
|
+
# a normal xf style, then it's a rectangle covering all bgColor with fgColor,
|
|
362
|
+
# which means we need to to set the given background color to fgColor as well.
|
|
363
|
+
# For some reason I wasn't able find, it works the opposite for dxf styles
|
|
364
|
+
# (differential formatting records), so to get the expected color, we need
|
|
365
|
+
# to put it into bgColor. We only need these cross-assignments when using
|
|
366
|
+
# "solid" pattern and the user provided only one color to get the least
|
|
367
|
+
# amount of surprise
|
|
368
|
+
|
|
369
|
+
if bg_color
|
|
370
|
+
pattern_options[:bgColor] = Color.new(rgb: bg_color)
|
|
371
|
+
elsif pattern_type == :solid && fg_color
|
|
372
|
+
pattern_options[:bgColor] = Color.new(rgb: fg_color)
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
if fg_color
|
|
376
|
+
pattern_options[:fgColor] = Color.new(rgb: fg_color)
|
|
377
|
+
elsif pattern_type == :solid && bg_color
|
|
378
|
+
pattern_options[:fgColor] = Color.new(rgb: bg_color)
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
pattern = PatternFill.new(pattern_options)
|
|
349
382
|
fill = Fill.new(pattern)
|
|
350
383
|
dxf ? fill : fills << fill
|
|
351
384
|
end
|
|
@@ -364,7 +397,7 @@ module Axlsx
|
|
|
364
397
|
# { :border => { :style => :thick, :color => "FFFF0000", :edges => [:top, :bottom] }
|
|
365
398
|
# @return [Border|Integer]
|
|
366
399
|
def parse_border_options(options = {})
|
|
367
|
-
if options[:border].nil? && Border::EDGES.all? { |x| options["border_#{x}"
|
|
400
|
+
if options[:border].nil? && Border::EDGES.all? { |x| options[:"border_#{x}"].nil? }
|
|
368
401
|
return nil
|
|
369
402
|
end
|
|
370
403
|
|
|
@@ -409,7 +442,7 @@ module Axlsx
|
|
|
409
442
|
end
|
|
410
443
|
|
|
411
444
|
Border::EDGES.each do |edge|
|
|
412
|
-
val = options["border_#{edge}"
|
|
445
|
+
val = options[:"border_#{edge}"]
|
|
413
446
|
|
|
414
447
|
if val
|
|
415
448
|
borders_array << val.merge(edges: [edge])
|
|
@@ -430,8 +463,8 @@ module Axlsx
|
|
|
430
463
|
end
|
|
431
464
|
end
|
|
432
465
|
|
|
433
|
-
if options["border_#{edge}"
|
|
434
|
-
edge_b_opts = edge_b_opts.merge(options["border_#{edge}"
|
|
466
|
+
if options[:"border_#{edge}"]
|
|
467
|
+
edge_b_opts = edge_b_opts.merge(options[:"border_#{edge}"])
|
|
435
468
|
skip_edge = false
|
|
436
469
|
end
|
|
437
470
|
|
|
@@ -472,7 +505,12 @@ module Axlsx
|
|
|
472
505
|
# If this is a standard xf we pull from numFmts the highest current and increment for num_fmt
|
|
473
506
|
options[:num_fmt] ||= (@numFmts.map(&:numFmtId).max + 1) if options[:type] != :dxf
|
|
474
507
|
numFmt = NumFmt.new(numFmtId: options[:num_fmt] || 0, formatCode: options[:format_code].to_s)
|
|
475
|
-
options[:type] == :dxf
|
|
508
|
+
if options[:type] == :dxf
|
|
509
|
+
numFmt
|
|
510
|
+
else
|
|
511
|
+
numFmts << numFmt
|
|
512
|
+
numFmt.numFmtId
|
|
513
|
+
end
|
|
476
514
|
else
|
|
477
515
|
options[:num_fmt]
|
|
478
516
|
end
|
|
@@ -534,8 +572,10 @@ module Axlsx
|
|
|
534
572
|
@cellXfs << Xf.new(borderId: 0, xfId: 0, numFmtId: 14, fontId: 0, fillId: 0, applyNumberFormat: 1)
|
|
535
573
|
@cellXfs.lock
|
|
536
574
|
|
|
537
|
-
@dxfs = SimpleTypedList.new(Dxf, "dxfs")
|
|
538
|
-
@
|
|
575
|
+
@dxfs = SimpleTypedList.new(Dxf, "dxfs")
|
|
576
|
+
@dxfs.lock
|
|
577
|
+
@tableStyles = TableStyles.new(defaultTableStyle: "TableStyleMedium9", defaultPivotStyle: "PivotStyleLight16")
|
|
578
|
+
@tableStyles.lock
|
|
539
579
|
end
|
|
540
580
|
end
|
|
541
581
|
end
|
|
@@ -15,7 +15,7 @@ module Axlsx
|
|
|
15
15
|
def initialize(name, options = {})
|
|
16
16
|
self.name = name
|
|
17
17
|
parse_options options
|
|
18
|
-
super
|
|
18
|
+
super(TableStyleElement)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
serializable_attributes :name, :pivot, :table
|
|
@@ -33,11 +33,22 @@ module Axlsx
|
|
|
33
33
|
attr_reader :table
|
|
34
34
|
|
|
35
35
|
# @see name
|
|
36
|
-
def name=(v)
|
|
36
|
+
def name=(v)
|
|
37
|
+
Axlsx.validate_string v
|
|
38
|
+
@name = v
|
|
39
|
+
end
|
|
40
|
+
|
|
37
41
|
# @see pivot
|
|
38
|
-
def pivot=(v)
|
|
42
|
+
def pivot=(v)
|
|
43
|
+
Axlsx.validate_boolean v
|
|
44
|
+
@pivot = v
|
|
45
|
+
end
|
|
46
|
+
|
|
39
47
|
# @see table
|
|
40
|
-
def table=(v)
|
|
48
|
+
def table=(v)
|
|
49
|
+
Axlsx.validate_boolean v
|
|
50
|
+
@table = v
|
|
51
|
+
end
|
|
41
52
|
|
|
42
53
|
# Serializes the object
|
|
43
54
|
# @param [String] str
|
|
@@ -58,13 +58,22 @@ module Axlsx
|
|
|
58
58
|
attr_reader :dxfId
|
|
59
59
|
|
|
60
60
|
# @see type
|
|
61
|
-
def type=(v)
|
|
61
|
+
def type=(v)
|
|
62
|
+
Axlsx.validate_table_element_type v
|
|
63
|
+
@type = v
|
|
64
|
+
end
|
|
62
65
|
|
|
63
66
|
# @see size
|
|
64
|
-
def size=(v)
|
|
67
|
+
def size=(v)
|
|
68
|
+
Axlsx.validate_unsigned_int v
|
|
69
|
+
@size = v
|
|
70
|
+
end
|
|
65
71
|
|
|
66
72
|
# @see dxfId
|
|
67
|
-
def dxfId=(v)
|
|
73
|
+
def dxfId=(v)
|
|
74
|
+
Axlsx.validate_unsigned_int v
|
|
75
|
+
@dxfId = v
|
|
76
|
+
end
|
|
68
77
|
|
|
69
78
|
# Serializes the object
|
|
70
79
|
# @param [String] str
|
|
@@ -12,7 +12,7 @@ module Axlsx
|
|
|
12
12
|
def initialize(options = {})
|
|
13
13
|
@defaultTableStyle = options[:defaultTableStyle] || "TableStyleMedium9"
|
|
14
14
|
@defaultPivotStyle = options[:defaultPivotStyle] || "PivotStyleLight16"
|
|
15
|
-
super
|
|
15
|
+
super(TableStyle)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
serializable_attributes :defaultTableStyle, :defaultPivotStyle
|
|
@@ -26,9 +26,16 @@ module Axlsx
|
|
|
26
26
|
attr_reader :defaultPivotStyle
|
|
27
27
|
|
|
28
28
|
# @see defaultTableStyle
|
|
29
|
-
def defaultTableStyle=(v)
|
|
29
|
+
def defaultTableStyle=(v)
|
|
30
|
+
Axlsx.validate_string(v)
|
|
31
|
+
@defaultTableStyle = v
|
|
32
|
+
end
|
|
33
|
+
|
|
30
34
|
# @see defaultPivotStyle
|
|
31
|
-
def defaultPivotStyle=(v)
|
|
35
|
+
def defaultPivotStyle=(v)
|
|
36
|
+
Axlsx.validate_string(v)
|
|
37
|
+
@defaultPivotStyle = v
|
|
38
|
+
end
|
|
32
39
|
|
|
33
40
|
# Serializes the object
|
|
34
41
|
# @param [String] str
|