caxlsx 3.4.1 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -1
  3. data/README.md +9 -11
  4. data/Rakefile +7 -5
  5. data/examples/generate.rb +3 -1
  6. data/lib/axlsx/content_type/abstract_content_type.rb +12 -4
  7. data/lib/axlsx/content_type/content_type.rb +8 -6
  8. data/lib/axlsx/content_type/default.rb +7 -2
  9. data/lib/axlsx/content_type/override.rb +7 -2
  10. data/lib/axlsx/doc_props/app.rb +95 -26
  11. data/lib/axlsx/doc_props/core.rb +8 -6
  12. data/lib/axlsx/drawing/area_chart.rb +10 -8
  13. data/lib/axlsx/drawing/area_series.rb +20 -12
  14. data/lib/axlsx/drawing/ax_data_source.rb +2 -0
  15. data/lib/axlsx/drawing/axes.rb +6 -4
  16. data/lib/axlsx/drawing/axis.rb +42 -22
  17. data/lib/axlsx/drawing/bar_3D_chart.rb +14 -12
  18. data/lib/axlsx/drawing/bar_chart.rb +13 -11
  19. data/lib/axlsx/drawing/bar_series.rb +20 -9
  20. data/lib/axlsx/drawing/bubble_chart.rb +6 -4
  21. data/lib/axlsx/drawing/bubble_series.rb +8 -6
  22. data/lib/axlsx/drawing/cat_axis.rb +29 -12
  23. data/lib/axlsx/drawing/chart.rb +46 -20
  24. data/lib/axlsx/drawing/d_lbls.rb +10 -8
  25. data/lib/axlsx/drawing/drawing.rb +59 -56
  26. data/lib/axlsx/drawing/graphic_frame.rb +6 -4
  27. data/lib/axlsx/drawing/hyperlink.rb +19 -8
  28. data/lib/axlsx/drawing/line_3D_chart.rb +7 -5
  29. data/lib/axlsx/drawing/line_chart.rb +10 -8
  30. data/lib/axlsx/drawing/line_series.rb +20 -12
  31. data/lib/axlsx/drawing/marker.rb +24 -7
  32. data/lib/axlsx/drawing/num_data.rb +9 -7
  33. data/lib/axlsx/drawing/num_data_source.rb +9 -7
  34. data/lib/axlsx/drawing/num_val.rb +7 -5
  35. data/lib/axlsx/drawing/one_cell_anchor.rb +13 -5
  36. data/lib/axlsx/drawing/pic.rb +26 -15
  37. data/lib/axlsx/drawing/picture_locking.rb +3 -1
  38. data/lib/axlsx/drawing/pie_3D_chart.rb +6 -4
  39. data/lib/axlsx/drawing/pie_chart.rb +36 -0
  40. data/lib/axlsx/drawing/pie_series.rb +23 -9
  41. data/lib/axlsx/drawing/scaling.rb +25 -9
  42. data/lib/axlsx/drawing/scatter_chart.rb +7 -5
  43. data/lib/axlsx/drawing/scatter_series.rb +14 -12
  44. data/lib/axlsx/drawing/ser_axis.rb +13 -5
  45. data/lib/axlsx/drawing/series.rb +13 -5
  46. data/lib/axlsx/drawing/series_title.rb +6 -4
  47. data/lib/axlsx/drawing/str_data.rb +7 -5
  48. data/lib/axlsx/drawing/str_val.rb +6 -4
  49. data/lib/axlsx/drawing/title.rb +13 -14
  50. data/lib/axlsx/drawing/two_cell_anchor.rb +4 -2
  51. data/lib/axlsx/drawing/val_axis.rb +4 -2
  52. data/lib/axlsx/drawing/view_3D.rb +16 -8
  53. data/lib/axlsx/drawing/vml_drawing.rb +18 -16
  54. data/lib/axlsx/drawing/vml_shape.rb +24 -22
  55. data/lib/axlsx/package.rb +73 -67
  56. data/lib/axlsx/rels/relationship.rb +21 -6
  57. data/lib/axlsx/rels/relationships.rb +6 -4
  58. data/lib/axlsx/stylesheet/border.rb +15 -4
  59. data/lib/axlsx/stylesheet/border_pr.rb +19 -6
  60. data/lib/axlsx/stylesheet/cell_alignment.rb +41 -10
  61. data/lib/axlsx/stylesheet/cell_protection.rb +12 -3
  62. data/lib/axlsx/stylesheet/cell_style.rb +33 -8
  63. data/lib/axlsx/stylesheet/color.rb +15 -7
  64. data/lib/axlsx/stylesheet/dxf.rb +34 -9
  65. data/lib/axlsx/stylesheet/fill.rb +7 -2
  66. data/lib/axlsx/stylesheet/font.rb +65 -17
  67. data/lib/axlsx/stylesheet/gradient_fill.rb +12 -4
  68. data/lib/axlsx/stylesheet/gradient_stop.rb +14 -5
  69. data/lib/axlsx/stylesheet/num_fmt.rb +14 -10
  70. data/lib/axlsx/stylesheet/pattern_fill.rb +18 -5
  71. data/lib/axlsx/stylesheet/styles.rb +124 -82
  72. data/lib/axlsx/stylesheet/table_style.rb +19 -6
  73. data/lib/axlsx/stylesheet/table_style_element.rb +15 -4
  74. data/lib/axlsx/stylesheet/table_styles.rb +14 -5
  75. data/lib/axlsx/stylesheet/xf.rb +73 -18
  76. data/lib/axlsx/util/accessors.rb +10 -6
  77. data/lib/axlsx/util/buffered_zip_output_stream.rb +60 -0
  78. data/lib/axlsx/util/constants.rb +117 -104
  79. data/lib/axlsx/util/mime_type_utils.rb +3 -5
  80. data/lib/axlsx/util/options_parser.rb +3 -1
  81. data/lib/axlsx/util/serialized_attributes.rb +42 -17
  82. data/lib/axlsx/util/simple_typed_list.rb +47 -47
  83. data/lib/axlsx/util/storage.rb +11 -10
  84. data/lib/axlsx/util/validators.rb +101 -41
  85. data/lib/axlsx/util/zip_command.rb +10 -10
  86. data/lib/axlsx/version.rb +3 -1
  87. data/lib/axlsx/workbook/defined_name.rb +6 -4
  88. data/lib/axlsx/workbook/defined_names.rb +4 -2
  89. data/lib/axlsx/workbook/shared_strings_table.rb +8 -6
  90. data/lib/axlsx/workbook/workbook.rb +94 -79
  91. data/lib/axlsx/workbook/workbook_view.rb +3 -1
  92. data/lib/axlsx/workbook/workbook_views.rb +4 -2
  93. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +65 -8
  94. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +11 -5
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +11 -7
  96. data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +51 -0
  97. data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +56 -0
  98. data/lib/axlsx/workbook/worksheet/border_creator.rb +5 -3
  99. data/lib/axlsx/workbook/worksheet/break.rb +3 -1
  100. data/lib/axlsx/workbook/worksheet/cell.rb +83 -64
  101. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +31 -27
  102. data/lib/axlsx/workbook/worksheet/cfvo.rb +11 -3
  103. data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -1
  104. data/lib/axlsx/workbook/worksheet/col.rb +5 -3
  105. data/lib/axlsx/workbook/worksheet/col_breaks.rb +6 -4
  106. data/lib/axlsx/workbook/worksheet/color_scale.rb +12 -10
  107. data/lib/axlsx/workbook/worksheet/cols.rb +4 -2
  108. data/lib/axlsx/workbook/worksheet/comment.rb +8 -6
  109. data/lib/axlsx/workbook/worksheet/comments.rb +6 -4
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +16 -5
  111. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +73 -16
  112. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +4 -2
  113. data/lib/axlsx/workbook/worksheet/data_bar.rb +14 -13
  114. data/lib/axlsx/workbook/worksheet/data_validation.rb +69 -28
  115. data/lib/axlsx/workbook/worksheet/data_validations.rb +4 -2
  116. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +7 -5
  117. data/lib/axlsx/workbook/worksheet/dimension.rb +4 -2
  118. data/lib/axlsx/workbook/worksheet/header_footer.rb +4 -2
  119. data/lib/axlsx/workbook/worksheet/icon_set.rb +38 -9
  120. data/lib/axlsx/workbook/worksheet/merged_cells.rb +6 -6
  121. data/lib/axlsx/workbook/worksheet/outline_pr.rb +6 -2
  122. data/lib/axlsx/workbook/worksheet/page_margins.rb +39 -11
  123. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +7 -4
  124. data/lib/axlsx/workbook/worksheet/page_setup.rb +34 -9
  125. data/lib/axlsx/workbook/worksheet/pane.rb +17 -9
  126. data/lib/axlsx/workbook/worksheet/pivot_table.rb +20 -19
  127. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -6
  128. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +3 -1
  129. data/lib/axlsx/workbook/worksheet/print_options.rb +3 -1
  130. data/lib/axlsx/workbook/worksheet/protected_range.rb +3 -1
  131. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +6 -4
  132. data/lib/axlsx/workbook/worksheet/rich_text.rb +3 -1
  133. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +46 -24
  134. data/lib/axlsx/workbook/worksheet/row.rb +11 -9
  135. data/lib/axlsx/workbook/worksheet/row_breaks.rb +7 -5
  136. data/lib/axlsx/workbook/worksheet/selection.rb +15 -7
  137. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -2
  138. data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
  139. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +6 -2
  140. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +8 -4
  141. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +11 -9
  142. data/lib/axlsx/workbook/worksheet/sheet_view.rb +38 -15
  143. data/lib/axlsx/workbook/worksheet/table.rb +9 -7
  144. data/lib/axlsx/workbook/worksheet/table_style_info.rb +4 -2
  145. data/lib/axlsx/workbook/worksheet/tables.rb +4 -2
  146. data/lib/axlsx/workbook/worksheet/worksheet.rb +56 -39
  147. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +4 -2
  148. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +8 -2
  149. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +7 -5
  150. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +5 -3
  151. data/lib/axlsx.rb +56 -42
  152. data/lib/caxlsx.rb +3 -1
  153. metadata +39 -71
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # the access class defines common properties and values for a chart axis.
3
5
  class Axis
@@ -13,7 +15,7 @@ module Axlsx
13
15
  @id = rand(8**8)
14
16
  @format_code = "General"
15
17
  @delete = @label_rotation = 0
16
- @scaling = Scaling.new(:orientation => :minMax)
18
+ @scaling = Scaling.new(orientation: :minMax)
17
19
  @title = @color = nil
18
20
  self.ax_pos = :b
19
21
  self.tick_lbl_pos = :nextTo
@@ -97,36 +99,54 @@ module Axlsx
97
99
 
98
100
  # The position of the axis
99
101
  # must be one of [:l, :r, :t, :b]
100
- def ax_pos=(v) RestrictionValidator.validate "#{self.class}.ax_pos", [:l, :r, :b, :t], v; @ax_pos = v; end
102
+ def ax_pos=(v)
103
+ RestrictionValidator.validate "#{self.class}.ax_pos", [:l, :r, :b, :t], v
104
+ @ax_pos = v
105
+ end
101
106
  alias :axPos= :ax_pos=
102
107
 
103
108
  # the position of the tick labels
104
109
  # must be one of [:nextTo, :high, :low1]
105
- def tick_lbl_pos=(v) RestrictionValidator.validate "#{self.class}.tick_lbl_pos", [:nextTo, :high, :low, :none], v; @tick_lbl_pos = v; end
110
+ def tick_lbl_pos=(v)
111
+ RestrictionValidator.validate "#{self.class}.tick_lbl_pos", [:nextTo, :high, :low, :none], v
112
+ @tick_lbl_pos = v
113
+ end
106
114
  alias :tickLblPos= :tick_lbl_pos=
107
115
 
108
116
  # The number format format code for this axis
109
117
  # default :General
110
- def format_code=(v) Axlsx::validate_string(v); @format_code = v; end
118
+ def format_code=(v)
119
+ Axlsx.validate_string(v)
120
+ @format_code = v
121
+ end
111
122
 
112
123
  # Specify if gridlines should be shown for this axis
113
124
  # default true
114
- def gridlines=(v) Axlsx::validate_boolean(v); @gridlines = v; end
125
+ def gridlines=(v)
126
+ Axlsx.validate_boolean(v)
127
+ @gridlines = v
128
+ end
115
129
 
116
130
  # Specify if axis should be removed from the chart
117
131
  # default false
118
- def delete=(v) Axlsx::validate_boolean(v); @delete = v; end
132
+ def delete=(v)
133
+ Axlsx.validate_boolean(v)
134
+ @delete = v
135
+ end
119
136
 
120
137
  # specifies how the perpendicular axis is crossed
121
138
  # must be one of [:autoZero, :min, :max]
122
- def crosses=(v) RestrictionValidator.validate "#{self.class}.crosses", [:autoZero, :min, :max], v; @crosses = v; end
139
+ def crosses=(v)
140
+ RestrictionValidator.validate "#{self.class}.crosses", [:autoZero, :min, :max], v
141
+ @crosses = v
142
+ end
123
143
 
124
144
  # Specify the degree of label rotation to apply to labels
125
145
  # default true
126
146
  def label_rotation=(v)
127
- Axlsx::validate_int(v)
147
+ Axlsx.validate_int(v)
128
148
  adjusted = v.to_i * 60000
129
- Axlsx::validate_angle(adjusted)
149
+ Axlsx.validate_angle(adjusted)
130
150
  @label_rotation = adjusted
131
151
  end
132
152
 
@@ -146,13 +166,13 @@ module Axlsx
146
166
  # Serializes the object
147
167
  # @param [String] str
148
168
  # @return [String]
149
- def to_xml_string(str = '')
150
- str << ('<c:axId val="' << @id.to_s << '"/>')
169
+ def to_xml_string(str = +'')
170
+ str << '<c:axId val="' << @id.to_s << '"/>'
151
171
  @scaling.to_xml_string str
152
- str << ('<c:delete val="' << @delete.to_s << '"/>')
153
- str << ('<c:axPos val="' << @ax_pos.to_s << '"/>')
172
+ str << '<c:delete val="' << @delete.to_s << '"/>'
173
+ str << '<c:axPos val="' << @ax_pos.to_s << '"/>'
154
174
  str << '<c:majorGridlines>'
155
- # TODO shape properties need to be extracted into a class
175
+ # TODO: shape properties need to be extracted into a class
156
176
  if gridlines == false
157
177
  str << '<c:spPr>'
158
178
  str << '<a:ln>'
@@ -161,25 +181,25 @@ module Axlsx
161
181
  str << '</c:spPr>'
162
182
  end
163
183
  str << '</c:majorGridlines>'
164
- @title.to_xml_string(str) unless @title == nil
184
+ @title.to_xml_string(str) unless @title.nil?
165
185
  # Need to set sourceLinked to 0 if we're setting a format code on this row
166
186
  # otherwise it will never take, as it will always prefer the 'General' formatting
167
187
  # of the cells themselves
168
- str << ('<c:numFmt formatCode="' << @format_code << '" sourceLinked="' << (@format_code.eql?('General') ? '1' : '0') << '"/>')
188
+ str << '<c:numFmt formatCode="' << @format_code << '" sourceLinked="' << (@format_code.eql?('General') ? '1' : '0') << '"/>'
169
189
  str << '<c:majorTickMark val="none"/>'
170
190
  str << '<c:minorTickMark val="none"/>'
171
- str << ('<c:tickLblPos val="' << @tick_lbl_pos.to_s << '"/>')
172
- # TODO - this is also being used for series colors
191
+ str << '<c:tickLblPos val="' << @tick_lbl_pos.to_s << '"/>'
192
+ # TODO: this is also being used for series colors
173
193
  # time to extract this into a class spPr - Shape Properties
174
194
  if @color
175
195
  str << '<c:spPr><a:ln><a:solidFill>'
176
- str << ('<a:srgbClr val="' << @color << '"/>')
196
+ str << '<a:srgbClr val="' << @color << '"/>'
177
197
  str << '</a:solidFill></a:ln></c:spPr>'
178
198
  end
179
199
  # some potential value in implementing this in full. Very detailed!
180
- str << ('<c:txPr><a:bodyPr rot="' << @label_rotation.to_s << '"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr/></a:p></c:txPr>')
181
- str << ('<c:crossAx val="' << @cross_axis.id.to_s << '"/>')
182
- str << ('<c:crosses val="' << @crosses.to_s << '"/>')
200
+ str << '<c:txPr><a:bodyPr rot="' << @label_rotation.to_s << '"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr/></a:p></c:txPr>'
201
+ str << '<c:crossAx val="' << @cross_axis.id.to_s << '"/>'
202
+ str << '<c:crosses val="' << @crosses.to_s << '"/>'
183
203
  end
184
204
  end
185
205
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The Bar3DChart is a three dimentional barchart (who would have guessed?) that you can add to your worksheet.
3
5
  # @see Worksheet#add_chart
@@ -75,7 +77,7 @@ module Axlsx
75
77
  @gap_width, @gap_depth, @shape = nil, nil, nil
76
78
  super(frame, options)
77
79
  @series_type = BarSeries
78
- @view_3D = View3D.new({ :r_ang_ax => 1 }.merge(options))
80
+ @view_3D = View3D.new({ r_ang_ax: 1 }.merge(options))
79
81
  @d_lbls = nil
80
82
  end
81
83
 
@@ -97,14 +99,14 @@ module Axlsx
97
99
  # space between bar or column clusters, as a percentage of the bar or column width.
98
100
  def gap_width=(v)
99
101
  RangeValidator.validate "Bar3DChart.gap_width", 0, 500, v
100
- @gap_width = (v)
102
+ @gap_width = v
101
103
  end
102
104
  alias :gapWidth= :gap_width=
103
105
 
104
106
  # space between bar or column clusters, as a percentage of the bar or column width.
105
107
  def gap_depth=(v)
106
108
  RangeValidator.validate "Bar3DChart.gap_depth", 0, 500, v
107
- @gap_depth = (v)
109
+ @gap_depth = v
108
110
  end
109
111
  alias :gapDepth= :gap_depth=
110
112
 
@@ -118,18 +120,18 @@ module Axlsx
118
120
  # Serializes the object
119
121
  # @param [String] str
120
122
  # @return [String]
121
- def to_xml_string(str = '')
123
+ def to_xml_string(str = +'')
122
124
  super(str) do
123
125
  str << '<c:bar3DChart>'
124
- str << ('<c:barDir val="' << bar_dir.to_s << '"/>')
125
- str << ('<c:grouping val="' << grouping.to_s << '"/>')
126
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
126
+ str << '<c:barDir val="' << bar_dir.to_s << '"/>'
127
+ str << '<c:grouping val="' << grouping.to_s << '"/>'
128
+ str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
127
129
  @series.each { |ser| ser.to_xml_string(str) }
128
130
  @d_lbls.to_xml_string(str) if @d_lbls
129
- str << ('<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil?
130
- str << ('<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil?
131
- str << ('<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil?
132
- axes.to_xml_string(str, :ids => true)
131
+ str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
132
+ str << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
133
+ str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
134
+ axes.to_xml_string(str, ids: true)
133
135
  str << '</c:bar3DChart>'
134
136
  axes.to_xml_string(str)
135
137
  end
@@ -139,7 +141,7 @@ module Axlsx
139
141
  # category axes specified via axes[:val_axes] and axes[:cat_axis]
140
142
  # @return [Axes]
141
143
  def axes
142
- @axes ||= Axes.new(:cat_axis => CatAxis, :val_axis => ValAxis)
144
+ @axes ||= Axes.new(cat_axis: CatAxis, val_axis: ValAxis)
143
145
  end
144
146
  end
145
147
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The BarChart is a two dimentional barchart that you can add to your worksheet.
3
5
  # @see Worksheet#add_chart
@@ -89,13 +91,13 @@ module Axlsx
89
91
  # space between bar or column clusters, as a percentage of the bar or column width.
90
92
  def gap_width=(v)
91
93
  RangeValidator.validate "BarChart.gap_width", 0, 500, v
92
- @gap_width = (v)
94
+ @gap_width = v
93
95
  end
94
96
  alias :gapWidth= :gap_width=
95
97
 
96
98
  def overlap=(v)
97
99
  RangeValidator.validate "BarChart.overlap", -100, 100, v
98
- @overlap = (v)
100
+ @overlap = v
99
101
  end
100
102
 
101
103
  # The shape of the bars or columns
@@ -108,18 +110,18 @@ module Axlsx
108
110
  # Serializes the object
109
111
  # @param [String] str
110
112
  # @return [String]
111
- def to_xml_string(str = '')
113
+ def to_xml_string(str = +'')
112
114
  super(str) do
113
115
  str << '<c:barChart>'
114
- str << ('<c:barDir val="' << bar_dir.to_s << '"/>')
115
- str << ('<c:grouping val="' << grouping.to_s << '"/>')
116
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
116
+ str << '<c:barDir val="' << bar_dir.to_s << '"/>'
117
+ str << '<c:grouping val="' << grouping.to_s << '"/>'
118
+ str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
117
119
  @series.each { |ser| ser.to_xml_string(str) }
118
120
  @d_lbls.to_xml_string(str) if @d_lbls
119
- str << ('<c:overlap val="' << @overlap.to_s << '"/>') unless @overlap.nil?
120
- str << ('<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil?
121
- str << ('<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil?
122
- axes.to_xml_string(str, :ids => true)
121
+ str << '<c:overlap val="' << @overlap.to_s << '"/>' unless @overlap.nil?
122
+ str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
123
+ str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
124
+ axes.to_xml_string(str, ids: true)
123
125
  str << '</c:barChart>'
124
126
  axes.to_xml_string(str)
125
127
  end
@@ -129,7 +131,7 @@ module Axlsx
129
131
  # category axes specified via axes[:val_axes] and axes[:cat_axis]
130
132
  # @return [Axes]
131
133
  def axes
132
- @axes ||= Axes.new(:cat_axis => CatAxis, :val_axis => ValAxis)
134
+ @axes ||= Axes.new(cat_axis: CatAxis, val_axis: ValAxis)
133
135
  end
134
136
  end
135
137
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A BarSeries defines the title, data and labels for bar charts
3
5
  # @note The recommended way to manage series is to use Chart#add_series
@@ -36,12 +38,15 @@ module Axlsx
36
38
  @shape = :box
37
39
  @colors = []
38
40
  super(chart, options)
39
- self.labels = AxDataSource.new({ :data => options[:labels] }) unless options[:labels].nil?
41
+ self.labels = AxDataSource.new({ data: options[:labels] }) unless options[:labels].nil?
40
42
  self.data = NumDataSource.new(options) unless options[:data].nil?
41
43
  end
42
44
 
43
45
  # @see colors
44
- def colors=(v) DataTypeValidator.validate "BarSeries.colors", [Array], v; @colors = v end
46
+ def colors=(v)
47
+ DataTypeValidator.validate "BarSeries.colors", [Array], v
48
+ @colors = v
49
+ end
45
50
 
46
51
  def series_color=(v)
47
52
  @series_color = v
@@ -56,19 +61,19 @@ module Axlsx
56
61
  # Serializes the object
57
62
  # @param [String] str
58
63
  # @return [String]
59
- def to_xml_string(str = '')
64
+ def to_xml_string(str = +'')
60
65
  super(str) do
61
66
  colors.each_with_index do |c, index|
62
67
  str << '<c:dPt>'
63
- str << ('<c:idx val="' << index.to_s << '"/>')
68
+ str << '<c:idx val="' << index.to_s << '"/>'
64
69
  str << '<c:spPr><a:solidFill>'
65
- str << ('<a:srgbClr val="' << c << '"/>')
70
+ str << '<a:srgbClr val="' << c << '"/>'
66
71
  str << '</a:solidFill></c:spPr></c:dPt>'
67
72
  end
68
73
 
69
74
  if series_color
70
75
  str << '<c:spPr><a:solidFill>'
71
- str << ('<a:srgbClr val="' << series_color << '"/>')
76
+ str << '<a:srgbClr val="' << series_color << '"/>'
72
77
  str << '</a:solidFill>'
73
78
  str << '</c:spPr>'
74
79
  end
@@ -76,16 +81,22 @@ module Axlsx
76
81
  @labels.to_xml_string(str) unless @labels.nil?
77
82
  @data.to_xml_string(str) unless @data.nil?
78
83
  # this is actually only required for shapes other than box
79
- str << ('<c:shape val="' << shape.to_s << '"></c:shape>')
84
+ str << '<c:shape val="' << shape.to_s << '"></c:shape>'
80
85
  end
81
86
  end
82
87
 
83
88
  private
84
89
 
85
90
  # assigns the data for this series
86
- def data=(v) DataTypeValidator.validate "Series.data", [NumDataSource], v; @data = v; end
91
+ def data=(v)
92
+ DataTypeValidator.validate "Series.data", [NumDataSource], v
93
+ @data = v
94
+ end
87
95
 
88
96
  # assigns the labels for this series
89
- def labels=(v) DataTypeValidator.validate "Series.labels", [AxDataSource], v; @labels = v; end
97
+ def labels=(v)
98
+ DataTypeValidator.validate "Series.labels", [AxDataSource], v
99
+ @labels = v
100
+ end
90
101
  end
91
102
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The BubbleChart allows you to insert a bubble chart into your worksheet
3
5
  # @see Worksheet#add_chart
@@ -33,13 +35,13 @@ module Axlsx
33
35
  # Serializes the object
34
36
  # @param [String] str
35
37
  # @return [String]
36
- def to_xml_string(str = '')
38
+ def to_xml_string(str = +'')
37
39
  super(str) do
38
40
  str << '<c:bubbleChart>'
39
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
41
+ str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
40
42
  @series.each { |ser| ser.to_xml_string(str) }
41
43
  d_lbls.to_xml_string(str) if @d_lbls
42
- axes.to_xml_string(str, :ids => true)
44
+ axes.to_xml_string(str, ids: true)
43
45
  str << '</c:bubbleChart>'
44
46
  axes.to_xml_string(str)
45
47
  end
@@ -50,7 +52,7 @@ module Axlsx
50
52
  # a y_val_axis
51
53
  # @return [Axes]
52
54
  def axes
53
- @axes ||= Axes.new(:x_val_axis => ValAxis, :y_val_axis => ValAxis)
55
+ @axes ||= Axes.new(x_val_axis: ValAxis, y_val_axis: ValAxis)
54
56
  end
55
57
  end
56
58
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A BubbleSeries defines the x/y position and bubble size of data in the chart
3
5
  # @note The recommended way to manage series is to use Chart#add_series
@@ -26,9 +28,9 @@ module Axlsx
26
28
  def initialize(chart, options = {})
27
29
  @xData, @yData, @bubbleSize = nil
28
30
  super(chart, options)
29
- @xData = AxDataSource.new(:tag_name => :xVal, :data => options[:xData]) unless options[:xData].nil?
30
- @yData = NumDataSource.new({ :tag_name => :yVal, :data => options[:yData] }) unless options[:yData].nil?
31
- @bubbleSize = NumDataSource.new({ :tag_name => :bubbleSize, :data => options[:bubbleSize] }) unless options[:bubbleSize].nil?
31
+ @xData = AxDataSource.new(tag_name: :xVal, data: options[:xData]) unless options[:xData].nil?
32
+ @yData = NumDataSource.new({ tag_name: :yVal, data: options[:yData] }) unless options[:yData].nil?
33
+ @bubbleSize = NumDataSource.new({ tag_name: :bubbleSize, data: options[:bubbleSize] }) unless options[:bubbleSize].nil?
32
34
  end
33
35
 
34
36
  # @see color
@@ -39,15 +41,15 @@ module Axlsx
39
41
  # Serializes the object
40
42
  # @param [String] str
41
43
  # @return [String]
42
- def to_xml_string(str = '')
44
+ def to_xml_string(str = +'')
43
45
  super(str) do
44
46
  # needs to override the super color here to push in ln/and something else!
45
47
  if color
46
48
  str << '<c:spPr><a:solidFill>'
47
- str << ('<a:srgbClr val="' << color << '"/>')
49
+ str << '<a:srgbClr val="' << color << '"/>'
48
50
  str << '</a:solidFill>'
49
51
  str << '<a:ln><a:solidFill>'
50
- str << ('<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>')
52
+ str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>'
51
53
  str << '</c:spPr>'
52
54
  end
53
55
  @xData.to_xml_string(str) unless @xData.nil?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A CatAxis object defines a chart category axis
3
5
  class CatAxis < Axis
@@ -40,40 +42,55 @@ module Axlsx
40
42
  alias :tickMarkSkip :tick_mark_skip
41
43
 
42
44
  # regex for validating label offset
43
- LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/
45
+ LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/.freeze
44
46
 
45
47
  # @see tick_lbl_skip
46
- def tick_lbl_skip=(v) Axlsx::validate_unsigned_int(v); @tick_lbl_skip = v; end
48
+ def tick_lbl_skip=(v)
49
+ Axlsx.validate_unsigned_int(v)
50
+ @tick_lbl_skip = v
51
+ end
47
52
  alias :tickLblSkip= :tick_lbl_skip=
48
53
 
49
54
  # @see tick_mark_skip
50
- def tick_mark_skip=(v) Axlsx::validate_unsigned_int(v); @tick_mark_skip = v; end
55
+ def tick_mark_skip=(v)
56
+ Axlsx.validate_unsigned_int(v)
57
+ @tick_mark_skip = v
58
+ end
51
59
  alias :tickMarkSkip= :tick_mark_skip=
52
60
 
53
61
  # From the docs: This element specifies that this axis is a date or text axis based on the data that is used for the axis labels, not a specific choice.
54
- def auto=(v) Axlsx::validate_boolean(v); @auto = v; end
62
+ def auto=(v)
63
+ Axlsx.validate_boolean(v)
64
+ @auto = v
65
+ end
55
66
 
56
67
  # specifies how the perpendicular axis is crossed
57
68
  # must be one of [:ctr, :l, :r]
58
- def lbl_algn=(v) RestrictionValidator.validate "#{self.class}.lbl_algn", [:ctr, :l, :r], v; @lbl_algn = v; end
69
+ def lbl_algn=(v)
70
+ RestrictionValidator.validate "#{self.class}.lbl_algn", [:ctr, :l, :r], v
71
+ @lbl_algn = v
72
+ end
59
73
  alias :lblAlgn= :lbl_algn=
60
74
 
61
75
  # The offset of the labels
62
76
  # must be between a string between 0 and 1000
63
- def lbl_offset=(v) RegexValidator.validate "#{self.class}.lbl_offset", LBL_OFFSET_REGEX, v; @lbl_offset = v; end
77
+ def lbl_offset=(v)
78
+ RegexValidator.validate "#{self.class}.lbl_offset", LBL_OFFSET_REGEX, v
79
+ @lbl_offset = v
80
+ end
64
81
  alias :lblOffset= :lbl_offset=
65
82
 
66
83
  # Serializes the object
67
84
  # @param [String] str
68
85
  # @return [String]
69
- def to_xml_string(str = '')
86
+ def to_xml_string(str = +'')
70
87
  str << '<c:catAx>'
71
88
  super(str)
72
- str << ('<c:auto val="' << @auto.to_s << '"/>')
73
- str << ('<c:lblAlgn val="' << @lbl_algn.to_s << '"/>')
74
- str << ('<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>')
75
- str << ('<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>')
76
- str << ('<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>')
89
+ str << '<c:auto val="' << @auto.to_s << '"/>'
90
+ str << '<c:lblAlgn val="' << @lbl_algn.to_s << '"/>'
91
+ str << '<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>'
92
+ str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>'
93
+ str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>'
77
94
  str << '</c:catAx>'
78
95
  end
79
96
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A Chart is the superclass for specific charts
3
5
  # @note Worksheet#add_chart is the recommended way to create charts for your worksheets.
@@ -49,7 +51,7 @@ module Axlsx
49
51
  # @return [Series]
50
52
  attr_reader :series_type
51
53
 
52
- # TODO data labels!
54
+ # TODO: data labels!
53
55
  def d_lbls
54
56
  @d_lbls ||= DLbls.new(self.class)
55
57
  end
@@ -60,7 +62,10 @@ module Axlsx
60
62
 
61
63
  # Configures the vary_colors options for this chart
62
64
  # @param [Boolean] v The value to set
63
- def vary_colors=(v) Axlsx::validate_boolean(v); @vary_colors = v; end
65
+ def vary_colors=(v)
66
+ Axlsx.validate_boolean(v)
67
+ @vary_colors = v
68
+ end
64
69
 
65
70
  # The title object for the chart.
66
71
  # @return [Title]
@@ -122,7 +127,7 @@ module Axlsx
122
127
  # The part name for this chart
123
128
  # @return [String]
124
129
  def pn
125
- "#{CHART_PN % (index + 1)}"
130
+ format(CHART_PN, index + 1)
126
131
  end
127
132
 
128
133
  # The title object for the chart.
@@ -147,21 +152,33 @@ module Axlsx
147
152
  # Show the legend in the chart
148
153
  # @param [Boolean] v
149
154
  # @return [Boolean]
150
- def show_legend=(v) Axlsx::validate_boolean(v); @show_legend = v; end
155
+ def show_legend=(v)
156
+ Axlsx.validate_boolean(v)
157
+ @show_legend = v
158
+ end
151
159
 
152
160
  # How to display blank values
153
161
  # @see display_blanks_as
154
162
  # @param [Symbol] v
155
163
  # @return [Symbol]
156
- def display_blanks_as=(v) Axlsx::validate_display_blanks_as(v); @display_blanks_as = v; end
164
+ def display_blanks_as=(v)
165
+ Axlsx.validate_display_blanks_as(v)
166
+ @display_blanks_as = v
167
+ end
157
168
 
158
169
  # The style for the chart.
159
170
  # see ECMA Part 1 §21.2.2.196
160
171
  # @param [Integer] v must be between 1 and 48
161
- def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, lambda { |arg| arg >= 1 && arg <= 48 }; @style = v; end
172
+ def style=(v)
173
+ DataTypeValidator.validate "Chart.style", Integer, v, ->(arg) { arg >= 1 && arg <= 48 }
174
+ @style = v
175
+ end
162
176
 
163
177
  # @see legend_position
164
- def legend_position=(v) RestrictionValidator.validate "Chart.legend_position", [:b, :l, :r, :t, :tr], v; @legend_position = v; end
178
+ def legend_position=(v)
179
+ RestrictionValidator.validate "Chart.legend_position", [:b, :l, :r, :t, :tr], v
180
+ @legend_position = v
181
+ end
165
182
 
166
183
  # backwards compatibility to allow chart.to and chart.from access to anchor markers
167
184
  # @note This will be disconinued in version 2.0.0. Please use the end_at method
@@ -185,32 +202,38 @@ module Axlsx
185
202
 
186
203
  # Assigns a background color to chart area
187
204
  def bg_color=(v)
188
- DataTypeValidator.validate(:color, Color, Color.new(:rgb => v))
205
+ DataTypeValidator.validate(:color, Color, Color.new(rgb: v))
189
206
  @bg_color = v
190
207
  end
191
208
 
192
209
  # Whether only data from visible cells should be plotted.
193
210
  # @param [Boolean] v
194
211
  # @return [Boolean]
195
- def plot_visible_only=(v) Axlsx::validate_boolean(v); @plot_visible_only = v; end
212
+ def plot_visible_only=(v)
213
+ Axlsx.validate_boolean(v)
214
+ @plot_visible_only = v
215
+ end
196
216
 
197
217
  # Whether the chart area shall have rounded corners.
198
218
  # @param [Boolean] v
199
219
  # @return [Boolean]
200
- def rounded_corners=(v) Axlsx::validate_boolean(v); @rounded_corners = v; end
220
+ def rounded_corners=(v)
221
+ Axlsx.validate_boolean(v)
222
+ @rounded_corners = v
223
+ end
201
224
 
202
225
  # Serializes the object
203
226
  # @param [String] str
204
227
  # @return [String]
205
- def to_xml_string(str = '')
228
+ def to_xml_string(str = +'')
206
229
  str << '<?xml version="1.0" encoding="UTF-8"?>'
207
- str << ('<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">')
208
- str << ('<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>')
209
- str << ('<c:roundedCorners val="' << rounded_corners.to_s << '"/>')
210
- str << ('<c:style val="' << style.to_s << '"/>')
230
+ str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">'
231
+ str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
232
+ str << '<c:roundedCorners val="' << rounded_corners.to_s << '"/>'
233
+ str << '<c:style val="' << style.to_s << '"/>'
211
234
  str << '<c:chart>'
212
235
  @title.to_xml_string(str) unless @title.empty?
213
- str << ('<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>')
236
+ str << '<c:autoTitleDeleted val="' << @title.nil?.to_s << '"/>'
214
237
  @view_3D.to_xml_string(str) if @view_3D
215
238
  str << '<c:floor><c:thickness val="0"/></c:floor>'
216
239
  str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
@@ -221,13 +244,13 @@ module Axlsx
221
244
  str << '</c:plotArea>'
222
245
  if @show_legend
223
246
  str << '<c:legend>'
224
- str << ('<c:legendPos val="' << @legend_position.to_s << '"/>')
247
+ str << '<c:legendPos val="' << @legend_position.to_s << '"/>'
225
248
  str << '<c:layout/>'
226
249
  str << '<c:overlay val="0"/>'
227
250
  str << '</c:legend>'
228
251
  end
229
- str << ('<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>')
230
- str << ('<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>')
252
+ str << '<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>'
253
+ str << '<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>'
231
254
  str << '<c:showDLblsOverMax val="1"/>'
232
255
  str << '</c:chart>'
233
256
  if bg_color
@@ -288,7 +311,10 @@ module Axlsx
288
311
  end
289
312
 
290
313
  # sets the view_3D object for the chart
291
- def view_3D=(v) DataTypeValidator.validate "#{self.class}.view_3D", View3D, v; @view_3D = v; end
314
+ def view_3D=(v)
315
+ DataTypeValidator.validate "#{self.class}.view_3D", View3D, v
316
+ @view_3D = v
317
+ end
292
318
  alias :view3D= :view_3D=
293
319
  end
294
320
  end