caxlsx 3.4.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -1
  3. data/README.md +9 -11
  4. data/Rakefile +7 -5
  5. data/lib/axlsx/content_type/abstract_content_type.rb +9 -4
  6. data/lib/axlsx/content_type/content_type.rb +7 -5
  7. data/lib/axlsx/content_type/default.rb +4 -2
  8. data/lib/axlsx/content_type/override.rb +4 -2
  9. data/lib/axlsx/doc_props/app.rb +26 -24
  10. data/lib/axlsx/doc_props/core.rb +8 -6
  11. data/lib/axlsx/drawing/area_chart.rb +10 -8
  12. data/lib/axlsx/drawing/area_series.rb +12 -10
  13. data/lib/axlsx/drawing/ax_data_source.rb +2 -0
  14. data/lib/axlsx/drawing/axes.rb +6 -4
  15. data/lib/axlsx/drawing/axis.rb +21 -19
  16. data/lib/axlsx/drawing/bar_3D_chart.rb +14 -12
  17. data/lib/axlsx/drawing/bar_chart.rb +13 -11
  18. data/lib/axlsx/drawing/bar_series.rb +8 -6
  19. data/lib/axlsx/drawing/bubble_chart.rb +6 -4
  20. data/lib/axlsx/drawing/bubble_series.rb +8 -6
  21. data/lib/axlsx/drawing/cat_axis.rb +12 -10
  22. data/lib/axlsx/drawing/chart.rb +20 -18
  23. data/lib/axlsx/drawing/d_lbls.rb +7 -5
  24. data/lib/axlsx/drawing/drawing.rb +58 -56
  25. data/lib/axlsx/drawing/graphic_frame.rb +6 -4
  26. data/lib/axlsx/drawing/hyperlink.rb +10 -8
  27. data/lib/axlsx/drawing/line_3D_chart.rb +7 -5
  28. data/lib/axlsx/drawing/line_chart.rb +10 -8
  29. data/lib/axlsx/drawing/line_series.rb +12 -10
  30. data/lib/axlsx/drawing/marker.rb +9 -7
  31. data/lib/axlsx/drawing/num_data.rb +9 -7
  32. data/lib/axlsx/drawing/num_data_source.rb +9 -7
  33. data/lib/axlsx/drawing/num_val.rb +7 -5
  34. data/lib/axlsx/drawing/one_cell_anchor.rb +7 -5
  35. data/lib/axlsx/drawing/pic.rb +16 -14
  36. data/lib/axlsx/drawing/picture_locking.rb +3 -1
  37. data/lib/axlsx/drawing/pie_3D_chart.rb +5 -3
  38. data/lib/axlsx/drawing/pie_series.rb +8 -6
  39. data/lib/axlsx/drawing/scaling.rb +8 -6
  40. data/lib/axlsx/drawing/scatter_chart.rb +7 -5
  41. data/lib/axlsx/drawing/scatter_series.rb +14 -12
  42. data/lib/axlsx/drawing/ser_axis.rb +7 -5
  43. data/lib/axlsx/drawing/series.rb +6 -4
  44. data/lib/axlsx/drawing/series_title.rb +6 -4
  45. data/lib/axlsx/drawing/str_data.rb +7 -5
  46. data/lib/axlsx/drawing/str_val.rb +6 -4
  47. data/lib/axlsx/drawing/title.rb +13 -14
  48. data/lib/axlsx/drawing/two_cell_anchor.rb +4 -2
  49. data/lib/axlsx/drawing/val_axis.rb +4 -2
  50. data/lib/axlsx/drawing/view_3D.rb +9 -7
  51. data/lib/axlsx/drawing/vml_drawing.rb +18 -16
  52. data/lib/axlsx/drawing/vml_shape.rb +24 -22
  53. data/lib/axlsx/package.rb +69 -66
  54. data/lib/axlsx/rels/relationship.rb +10 -5
  55. data/lib/axlsx/rels/relationships.rb +5 -3
  56. data/lib/axlsx/stylesheet/border.rb +6 -4
  57. data/lib/axlsx/stylesheet/border_pr.rb +5 -3
  58. data/lib/axlsx/stylesheet/cell_alignment.rb +12 -10
  59. data/lib/axlsx/stylesheet/cell_protection.rb +5 -3
  60. data/lib/axlsx/stylesheet/cell_style.rb +10 -8
  61. data/lib/axlsx/stylesheet/color.rb +9 -7
  62. data/lib/axlsx/stylesheet/dxf.rb +5 -3
  63. data/lib/axlsx/stylesheet/fill.rb +3 -1
  64. data/lib/axlsx/stylesheet/font.rb +18 -16
  65. data/lib/axlsx/stylesheet/gradient_fill.rb +6 -4
  66. data/lib/axlsx/stylesheet/gradient_stop.rb +6 -4
  67. data/lib/axlsx/stylesheet/num_fmt.rb +8 -10
  68. data/lib/axlsx/stylesheet/pattern_fill.rb +5 -3
  69. data/lib/axlsx/stylesheet/styles.rb +69 -71
  70. data/lib/axlsx/stylesheet/table_style.rb +7 -5
  71. data/lib/axlsx/stylesheet/table_style_element.rb +6 -4
  72. data/lib/axlsx/stylesheet/table_styles.rb +6 -4
  73. data/lib/axlsx/stylesheet/xf.rb +18 -16
  74. data/lib/axlsx/util/accessors.rb +4 -2
  75. data/lib/axlsx/util/buffered_zip_output_stream.rb +60 -0
  76. data/lib/axlsx/util/constants.rb +117 -104
  77. data/lib/axlsx/util/mime_type_utils.rb +3 -5
  78. data/lib/axlsx/util/options_parser.rb +3 -1
  79. data/lib/axlsx/util/serialized_attributes.rb +42 -17
  80. data/lib/axlsx/util/simple_typed_list.rb +47 -47
  81. data/lib/axlsx/util/storage.rb +11 -10
  82. data/lib/axlsx/util/validators.rb +101 -41
  83. data/lib/axlsx/util/zip_command.rb +10 -10
  84. data/lib/axlsx/version.rb +3 -1
  85. data/lib/axlsx/workbook/defined_name.rb +6 -4
  86. data/lib/axlsx/workbook/defined_names.rb +3 -1
  87. data/lib/axlsx/workbook/shared_strings_table.rb +8 -6
  88. data/lib/axlsx/workbook/workbook.rb +78 -76
  89. data/lib/axlsx/workbook/workbook_view.rb +3 -1
  90. data/lib/axlsx/workbook/workbook_views.rb +3 -1
  91. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +65 -8
  92. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +7 -3
  93. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +11 -7
  94. data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +51 -0
  95. data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +56 -0
  96. data/lib/axlsx/workbook/worksheet/border_creator.rb +5 -3
  97. data/lib/axlsx/workbook/worksheet/break.rb +3 -1
  98. data/lib/axlsx/workbook/worksheet/cell.rb +53 -54
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +31 -27
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +5 -3
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -1
  102. data/lib/axlsx/workbook/worksheet/col.rb +5 -3
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +5 -3
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +12 -10
  105. data/lib/axlsx/workbook/worksheet/cols.rb +3 -1
  106. data/lib/axlsx/workbook/worksheet/comment.rb +8 -6
  107. data/lib/axlsx/workbook/worksheet/comments.rb +6 -4
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +9 -4
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +18 -16
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +3 -1
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +14 -13
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +30 -28
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +3 -1
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +7 -5
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +4 -2
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +4 -2
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +23 -6
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +5 -5
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +6 -2
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +15 -10
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -2
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +11 -9
  123. data/lib/axlsx/workbook/worksheet/pane.rb +11 -9
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +20 -19
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -6
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +2 -0
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +3 -1
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +3 -1
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -3
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +3 -1
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +16 -14
  132. data/lib/axlsx/workbook/worksheet/row.rb +6 -7
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +6 -4
  134. data/lib/axlsx/workbook/worksheet/selection.rb +9 -7
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -2
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
  137. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +6 -2
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +8 -4
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +10 -8
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +15 -13
  141. data/lib/axlsx/workbook/worksheet/table.rb +9 -7
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +4 -2
  143. data/lib/axlsx/workbook/worksheet/tables.rb +3 -1
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +38 -37
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +4 -2
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +8 -2
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +6 -4
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -2
  149. data/lib/axlsx.rb +56 -42
  150. data/lib/caxlsx.rb +3 -1
  151. metadata +49 -43
@@ -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,7 +38,7 @@ 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
 
@@ -56,19 +58,19 @@ module Axlsx
56
58
  # Serializes the object
57
59
  # @param [String] str
58
60
  # @return [String]
59
- def to_xml_string(str = '')
61
+ def to_xml_string(str = +'')
60
62
  super(str) do
61
63
  colors.each_with_index do |c, index|
62
64
  str << '<c:dPt>'
63
- str << ('<c:idx val="' << index.to_s << '"/>')
65
+ str << '<c:idx val="' << index.to_s << '"/>'
64
66
  str << '<c:spPr><a:solidFill>'
65
- str << ('<a:srgbClr val="' << c << '"/>')
67
+ str << '<a:srgbClr val="' << c << '"/>'
66
68
  str << '</a:solidFill></c:spPr></c:dPt>'
67
69
  end
68
70
 
69
71
  if series_color
70
72
  str << '<c:spPr><a:solidFill>'
71
- str << ('<a:srgbClr val="' << series_color << '"/>')
73
+ str << '<a:srgbClr val="' << series_color << '"/>'
72
74
  str << '</a:solidFill>'
73
75
  str << '</c:spPr>'
74
76
  end
@@ -76,7 +78,7 @@ module Axlsx
76
78
  @labels.to_xml_string(str) unless @labels.nil?
77
79
  @data.to_xml_string(str) unless @data.nil?
78
80
  # this is actually only required for shapes other than box
79
- str << ('<c:shape val="' << shape.to_s << '"></c:shape>')
81
+ str << '<c:shape val="' << shape.to_s << '"></c:shape>'
80
82
  end
81
83
  end
82
84
 
@@ -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,18 +42,18 @@ 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) Axlsx.validate_unsigned_int(v); @tick_lbl_skip = v; end
47
49
  alias :tickLblSkip= :tick_lbl_skip=
48
50
 
49
51
  # @see tick_mark_skip
50
- def tick_mark_skip=(v) Axlsx::validate_unsigned_int(v); @tick_mark_skip = v; end
52
+ def tick_mark_skip=(v) Axlsx.validate_unsigned_int(v); @tick_mark_skip = v; end
51
53
  alias :tickMarkSkip= :tick_mark_skip=
52
54
 
53
55
  # 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
56
+ def auto=(v) Axlsx.validate_boolean(v); @auto = v; end
55
57
 
56
58
  # specifies how the perpendicular axis is crossed
57
59
  # must be one of [:ctr, :l, :r]
@@ -66,14 +68,14 @@ module Axlsx
66
68
  # Serializes the object
67
69
  # @param [String] str
68
70
  # @return [String]
69
- def to_xml_string(str = '')
71
+ def to_xml_string(str = +'')
70
72
  str << '<c:catAx>'
71
73
  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 << '"/>')
74
+ str << '<c:auto val="' << @auto.to_s << '"/>'
75
+ str << '<c:lblAlgn val="' << @lbl_algn.to_s << '"/>'
76
+ str << '<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>'
77
+ str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>'
78
+ str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>'
77
79
  str << '</c:catAx>'
78
80
  end
79
81
  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,7 @@ 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) Axlsx.validate_boolean(v); @vary_colors = v; end
64
66
 
65
67
  # The title object for the chart.
66
68
  # @return [Title]
@@ -122,7 +124,7 @@ module Axlsx
122
124
  # The part name for this chart
123
125
  # @return [String]
124
126
  def pn
125
- "#{CHART_PN % (index + 1)}"
127
+ format(CHART_PN, index + 1)
126
128
  end
127
129
 
128
130
  # The title object for the chart.
@@ -147,18 +149,18 @@ module Axlsx
147
149
  # Show the legend in the chart
148
150
  # @param [Boolean] v
149
151
  # @return [Boolean]
150
- def show_legend=(v) Axlsx::validate_boolean(v); @show_legend = v; end
152
+ def show_legend=(v) Axlsx.validate_boolean(v); @show_legend = v; end
151
153
 
152
154
  # How to display blank values
153
155
  # @see display_blanks_as
154
156
  # @param [Symbol] v
155
157
  # @return [Symbol]
156
- def display_blanks_as=(v) Axlsx::validate_display_blanks_as(v); @display_blanks_as = v; end
158
+ def display_blanks_as=(v) Axlsx.validate_display_blanks_as(v); @display_blanks_as = v; end
157
159
 
158
160
  # The style for the chart.
159
161
  # see ECMA Part 1 §21.2.2.196
160
162
  # @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
163
+ def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, ->(arg) { arg >= 1 && arg <= 48 }; @style = v; end
162
164
 
163
165
  # @see legend_position
164
166
  def legend_position=(v) RestrictionValidator.validate "Chart.legend_position", [:b, :l, :r, :t, :tr], v; @legend_position = v; end
@@ -185,32 +187,32 @@ module Axlsx
185
187
 
186
188
  # Assigns a background color to chart area
187
189
  def bg_color=(v)
188
- DataTypeValidator.validate(:color, Color, Color.new(:rgb => v))
190
+ DataTypeValidator.validate(:color, Color, Color.new(rgb: v))
189
191
  @bg_color = v
190
192
  end
191
193
 
192
194
  # Whether only data from visible cells should be plotted.
193
195
  # @param [Boolean] v
194
196
  # @return [Boolean]
195
- def plot_visible_only=(v) Axlsx::validate_boolean(v); @plot_visible_only = v; end
197
+ def plot_visible_only=(v) Axlsx.validate_boolean(v); @plot_visible_only = v; end
196
198
 
197
199
  # Whether the chart area shall have rounded corners.
198
200
  # @param [Boolean] v
199
201
  # @return [Boolean]
200
- def rounded_corners=(v) Axlsx::validate_boolean(v); @rounded_corners = v; end
202
+ def rounded_corners=(v) Axlsx.validate_boolean(v); @rounded_corners = v; end
201
203
 
202
204
  # Serializes the object
203
205
  # @param [String] str
204
206
  # @return [String]
205
- def to_xml_string(str = '')
207
+ def to_xml_string(str = +'')
206
208
  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 << '"/>')
209
+ str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">'
210
+ str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
211
+ str << '<c:roundedCorners val="' << rounded_corners.to_s << '"/>'
212
+ str << '<c:style val="' << style.to_s << '"/>'
211
213
  str << '<c:chart>'
212
214
  @title.to_xml_string(str) unless @title.empty?
213
- str << ('<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>')
215
+ str << '<c:autoTitleDeleted val="' << @title.nil?.to_s << '"/>'
214
216
  @view_3D.to_xml_string(str) if @view_3D
215
217
  str << '<c:floor><c:thickness val="0"/></c:floor>'
216
218
  str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
@@ -221,13 +223,13 @@ module Axlsx
221
223
  str << '</c:plotArea>'
222
224
  if @show_legend
223
225
  str << '<c:legend>'
224
- str << ('<c:legendPos val="' << @legend_position.to_s << '"/>')
226
+ str << '<c:legendPos val="' << @legend_position.to_s << '"/>'
225
227
  str << '<c:layout/>'
226
228
  str << '<c:overlay val="0"/>'
227
229
  str << '</c:legend>'
228
230
  end
229
- str << ('<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>')
230
- str << ('<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>')
231
+ str << '<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>'
232
+ str << '<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>'
231
233
  str << '<c:showDLblsOverMax val="1"/>'
232
234
  str << '</c:chart>'
233
235
  if bg_color
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # There are more elements in the dLbls spec that allow for
3
5
  # customizations and formatting. For now, I am just implementing the
@@ -36,7 +38,7 @@ module Axlsx
36
38
  [:show_legend_key, :show_val, :show_cat_name,
37
39
  :show_ser_name, :show_percent, :show_bubble_size,
38
40
  :show_leader_lines].each do |attr|
39
- self.send("#{attr}=", false)
41
+ send("#{attr}=", false)
40
42
  end
41
43
  end
42
44
 
@@ -69,19 +71,19 @@ module Axlsx
69
71
 
70
72
  # serializes the data labels
71
73
  # @return [String]
72
- def to_xml_string(str = '')
74
+ def to_xml_string(str = +'')
73
75
  validate_attributes_for_chart_type
74
76
  str << '<c:dLbls>'
75
77
  instance_vals = Axlsx.instance_values_for(self)
76
78
  %w(d_lbl_pos show_legend_key show_val show_cat_name show_ser_name show_percent show_bubble_size show_leader_lines).each do |key|
77
- next unless instance_vals.keys.include?(key) && instance_vals[key] != nil
79
+ next unless instance_vals.key?(key) && !instance_vals[key].nil?
78
80
 
79
- str << "<c:#{Axlsx::camel(key, false)} val='#{instance_vals[key]}' />"
81
+ str << "<c:#{Axlsx.camel(key, false)} val='#{instance_vals[key]}' />"
80
82
  end
81
83
  str << '</c:dLbls>'
82
84
  end
83
85
 
84
- # nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually chrash excel for any chart type other than pie charts.
86
+ # nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually crash Excel for any chart type other than pie charts.
85
87
  def validate_attributes_for_chart_type
86
88
  return if [Pie3DChart, LineChart].include? @chart_type
87
89
 
@@ -1,53 +1,55 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
- require 'axlsx/drawing/d_lbls.rb'
3
- require 'axlsx/drawing/title.rb'
4
- require 'axlsx/drawing/series_title.rb'
5
- require 'axlsx/drawing/series.rb'
6
- require 'axlsx/drawing/pie_series.rb'
7
- require 'axlsx/drawing/bar_series.rb'
8
- require 'axlsx/drawing/line_series.rb'
9
- require 'axlsx/drawing/scatter_series.rb'
10
- require 'axlsx/drawing/bubble_series.rb'
11
- require 'axlsx/drawing/area_series.rb'
12
-
13
- require 'axlsx/drawing/scaling.rb'
14
- require 'axlsx/drawing/axis.rb'
15
-
16
- require 'axlsx/drawing/str_val.rb'
17
- require 'axlsx/drawing/num_val.rb'
18
- require 'axlsx/drawing/str_data.rb'
19
- require 'axlsx/drawing/num_data.rb'
20
- require 'axlsx/drawing/num_data_source.rb'
21
- require 'axlsx/drawing/ax_data_source.rb'
22
-
23
- require 'axlsx/drawing/ser_axis.rb'
24
- require 'axlsx/drawing/cat_axis.rb'
25
- require 'axlsx/drawing/val_axis.rb'
26
- require 'axlsx/drawing/axes.rb'
27
-
28
- require 'axlsx/drawing/marker.rb'
29
-
30
- require 'axlsx/drawing/one_cell_anchor.rb'
31
- require 'axlsx/drawing/two_cell_anchor.rb'
32
- require 'axlsx/drawing/graphic_frame.rb'
33
-
34
- require 'axlsx/drawing/view_3D.rb'
35
- require 'axlsx/drawing/chart.rb'
36
- require 'axlsx/drawing/pie_3D_chart.rb'
37
- require 'axlsx/drawing/bar_3D_chart.rb'
38
- require 'axlsx/drawing/bar_chart.rb'
39
- require 'axlsx/drawing/line_chart.rb'
40
- require 'axlsx/drawing/line_3D_chart.rb'
41
- require 'axlsx/drawing/scatter_chart.rb'
42
- require 'axlsx/drawing/bubble_chart.rb'
43
- require 'axlsx/drawing/area_chart.rb'
44
-
45
- require 'axlsx/drawing/picture_locking.rb'
46
- require 'axlsx/drawing/pic.rb'
47
- require 'axlsx/drawing/hyperlink.rb'
48
-
49
- require 'axlsx/drawing/vml_drawing.rb'
50
- require 'axlsx/drawing/vml_shape.rb'
4
+ require 'axlsx/drawing/d_lbls'
5
+ require 'axlsx/drawing/title'
6
+ require 'axlsx/drawing/series_title'
7
+ require 'axlsx/drawing/series'
8
+ require 'axlsx/drawing/pie_series'
9
+ require 'axlsx/drawing/bar_series'
10
+ require 'axlsx/drawing/line_series'
11
+ require 'axlsx/drawing/scatter_series'
12
+ require 'axlsx/drawing/bubble_series'
13
+ require 'axlsx/drawing/area_series'
14
+
15
+ require 'axlsx/drawing/scaling'
16
+ require 'axlsx/drawing/axis'
17
+
18
+ require 'axlsx/drawing/str_val'
19
+ require 'axlsx/drawing/num_val'
20
+ require 'axlsx/drawing/str_data'
21
+ require 'axlsx/drawing/num_data'
22
+ require 'axlsx/drawing/num_data_source'
23
+ require 'axlsx/drawing/ax_data_source'
24
+
25
+ require 'axlsx/drawing/ser_axis'
26
+ require 'axlsx/drawing/cat_axis'
27
+ require 'axlsx/drawing/val_axis'
28
+ require 'axlsx/drawing/axes'
29
+
30
+ require 'axlsx/drawing/marker'
31
+
32
+ require 'axlsx/drawing/one_cell_anchor'
33
+ require 'axlsx/drawing/two_cell_anchor'
34
+ require 'axlsx/drawing/graphic_frame'
35
+
36
+ require 'axlsx/drawing/view_3D'
37
+ require 'axlsx/drawing/chart'
38
+ require 'axlsx/drawing/pie_3D_chart'
39
+ require 'axlsx/drawing/bar_3D_chart'
40
+ require 'axlsx/drawing/bar_chart'
41
+ require 'axlsx/drawing/line_chart'
42
+ require 'axlsx/drawing/line_3D_chart'
43
+ require 'axlsx/drawing/scatter_chart'
44
+ require 'axlsx/drawing/bubble_chart'
45
+ require 'axlsx/drawing/area_chart'
46
+
47
+ require 'axlsx/drawing/picture_locking'
48
+ require 'axlsx/drawing/pic'
49
+ require 'axlsx/drawing/hyperlink'
50
+
51
+ require 'axlsx/drawing/vml_drawing'
52
+ require 'axlsx/drawing/vml_shape'
51
53
 
52
54
  # A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
53
55
  # The anchors reference the charts or images via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
@@ -106,15 +108,15 @@ module Axlsx
106
108
  # An array of hyperlink objects associated with this drawings images
107
109
  # @return [Array]
108
110
  def hyperlinks
109
- links = self.images.select { |a| a.hyperlink.is_a?(Hyperlink) }
110
- links.map { |a| a.hyperlink }
111
+ links = images.select { |a| a.hyperlink.is_a?(Hyperlink) }
112
+ links.map(&:hyperlink)
111
113
  end
112
114
 
113
115
  # An array of image objects that are associated with this drawing's anchors
114
116
  # @return [Array]
115
117
  def images
116
118
  images = @anchors.select { |a| a.object.is_a?(Pic) }
117
- images.map { |a| a.object }
119
+ images.map(&:object)
118
120
  end
119
121
 
120
122
  # The index of this drawing in the owning workbooks's drawings collection.
@@ -126,14 +128,14 @@ module Axlsx
126
128
  # The part name for this drawing
127
129
  # @return [String]
128
130
  def pn
129
- "#{DRAWING_PN % (index + 1)}"
131
+ format(DRAWING_PN, index + 1)
130
132
  end
131
133
 
132
134
  # The relational part name for this drawing
133
135
  # #NOTE This should be rewritten to return an Axlsx::Relationship object.
134
136
  # @return [String]
135
137
  def rels_pn
136
- "#{DRAWING_RELS_PN % (index + 1)}"
138
+ format(DRAWING_RELS_PN, index + 1)
137
139
  end
138
140
 
139
141
  # A list of objects this drawing holds.
@@ -153,9 +155,9 @@ module Axlsx
153
155
  # Serializes the object
154
156
  # @param [String] str
155
157
  # @return [String]
156
- def to_xml_string(str = '')
158
+ def to_xml_string(str = +'')
157
159
  str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
158
- str << ('<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">')
160
+ str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">'
159
161
  anchors.each { |anchor| anchor.to_xml_string(str) }
160
162
  str << '</xdr:wsDr>'
161
163
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A graphic frame defines a container for a chart object
3
5
  # @note The recommended way to manage charts is Worksheet#add_chart
@@ -29,11 +31,11 @@ module Axlsx
29
31
  # Serializes the object
30
32
  # @param [String] str
31
33
  # @return [String]
32
- def to_xml_string(str = '')
34
+ def to_xml_string(str = +'')
33
35
  # macro attribute should be optional!
34
36
  str << '<xdr:graphicFrame>'
35
37
  str << '<xdr:nvGraphicFramePr>'
36
- str << ('<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>')
38
+ str << '<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>'
37
39
  str << '<xdr:cNvGraphicFramePr/>'
38
40
  str << '</xdr:nvGraphicFramePr>'
39
41
  str << '<xdr:xfrm>'
@@ -41,8 +43,8 @@ module Axlsx
41
43
  str << '<a:ext cx="0" cy="0"/>'
42
44
  str << '</xdr:xfrm>'
43
45
  str << '<a:graphic>'
44
- str << ('<a:graphicData uri="' << XML_NS_C << '">')
45
- str << ('<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>')
46
+ str << '<a:graphicData uri="' << XML_NS_C << '">'
47
+ str << '<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>'
46
48
  str << '</a:graphicData>'
47
49
  str << '</a:graphic>'
48
50
  str << '</xdr:graphicFrame>'