caxlsx 3.4.1 → 4.0.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.
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
  # A simple list of merged cells
3
5
  class MergedCells < SimpleTypedList
@@ -10,23 +12,21 @@ module Axlsx
10
12
  end
11
13
 
12
14
  # adds cells to the merged cells collection
13
- # @param [Array||String] cells The cells to add to the merged cells
15
+ # @param [Array|String] cells The cells to add to the merged cells
14
16
  # collection. This can be an array of actual cells or a string style
15
17
  # range like 'A1:C1'
16
18
  def add(cells)
17
19
  self << if cells.is_a?(String)
18
20
  cells
19
21
  elsif cells.is_a?(Array)
20
- Axlsx::cell_range(cells, false)
21
- elsif cells.is_a?(Row)
22
- Axlsx::cell_range(cells, false)
22
+ Axlsx.cell_range(cells, false)
23
23
  end
24
24
  end
25
25
 
26
26
  # serialize the object
27
27
  # @param [String] str
28
28
  # @return [String]
29
- def to_xml_string(str = '')
29
+ def to_xml_string(str = +'')
30
30
  return if empty?
31
31
 
32
32
  str << "<mergeCells count='#{size}'>"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The OutlinePr class manages serialization of a worksheet's outlinePr element, which provides various
3
5
  # options to control outlining.
@@ -25,8 +27,10 @@ module Axlsx
25
27
  # Serialize the object
26
28
  # @param [String] str serialized output will be appended to this object if provided.
27
29
  # @return [String]
28
- def to_xml_string(str = '')
29
- str << "<outlinePr #{serialized_attributes} />"
30
+ def to_xml_string(str = +'')
31
+ str << '<outlinePr '
32
+ serialized_attributes(str)
33
+ str << '/>'
30
34
  end
31
35
  end
32
36
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # PageMargins specify the margins when printing a worksheet.
3
5
  #
@@ -27,7 +29,10 @@ module Axlsx
27
29
  parse_options options
28
30
  end
29
31
 
30
- serializable_attributes :left, :right, :bottom, :top, :header, :footer
32
+ # Possible margins to set
33
+ MARGIN_KEYS = [:left, :right, :top, :bottom, :header, :footer].freeze
34
+
35
+ serializable_attributes(*MARGIN_KEYS)
31
36
 
32
37
  # Default left and right margin (in inches)
33
38
  DEFAULT_LEFT_RIGHT = 0.75
@@ -63,34 +68,34 @@ module Axlsx
63
68
  attr_reader :footer
64
69
 
65
70
  # Set some or all margins at once.
66
- # @param [Hash] margins the margins to set (possible keys are :left, :right, :top, :bottom, :header and :footer).
71
+ # @param [Hash] margins the margins to set. See {MARGIN_KEYS} for a list of possible keys.
67
72
  def set(margins)
68
73
  margins.select do |k, v|
69
- next unless [:left, :right, :top, :bottom, :header, :footer].include? k
74
+ next unless MARGIN_KEYS.include? k
70
75
 
71
76
  send("#{k}=", v)
72
77
  end
73
78
  end
74
79
 
75
80
  # @see left
76
- def left=(v); Axlsx::validate_unsigned_numeric(v); @left = v end
81
+ def left=(v); Axlsx.validate_unsigned_numeric(v); @left = v end
77
82
  # @see right
78
- def right=(v); Axlsx::validate_unsigned_numeric(v); @right = v end
83
+ def right=(v); Axlsx.validate_unsigned_numeric(v); @right = v end
79
84
  # @see top
80
- def top=(v); Axlsx::validate_unsigned_numeric(v); @top = v end
85
+ def top=(v); Axlsx.validate_unsigned_numeric(v); @top = v end
81
86
  # @see bottom
82
- def bottom=(v); Axlsx::validate_unsigned_numeric(v); @bottom = v end
87
+ def bottom=(v); Axlsx.validate_unsigned_numeric(v); @bottom = v end
83
88
  # @see header
84
- def header=(v); Axlsx::validate_unsigned_numeric(v); @header = v end
89
+ def header=(v); Axlsx.validate_unsigned_numeric(v); @header = v end
85
90
  # @see footer
86
- def footer=(v); Axlsx::validate_unsigned_numeric(v); @footer = v end
91
+ def footer=(v); Axlsx.validate_unsigned_numeric(v); @footer = v end
87
92
 
88
93
  # Serializes the page margins element
89
94
  # @param [String] str
90
95
  # @return [String]
91
96
  # @note For compatibility, this is a noop unless custom margins have been specified.
92
97
  # @see #custom_margins_specified?
93
- def to_xml_string(str = '')
98
+ def to_xml_string(str = +'')
94
99
  serialized_tag('pageMargins', str)
95
100
  end
96
101
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # Page setup properties of the worksheet
3
5
  # This class name is not a typo, its spec.
@@ -35,8 +37,10 @@ module Axlsx
35
37
  end
36
38
 
37
39
  # serialize to xml
38
- def to_xml_string(str = '')
39
- str << ('<pageSetUpPr ' << serialized_attributes << '/>')
40
+ def to_xml_string(str = +'')
41
+ str << '<pageSetUpPr '
42
+ serialized_attributes(str)
43
+ str << '/>'
40
44
  end
41
45
  end
42
46
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # Page setup settings for printing a worksheet. All settings are optional.
3
5
  #
@@ -196,17 +198,17 @@ module Axlsx
196
198
  end
197
199
 
198
200
  # @see fit_to_height
199
- def fit_to_height=(v); Axlsx::validate_unsigned_int(v); @fit_to_height = v; end
201
+ def fit_to_height=(v); Axlsx.validate_unsigned_int(v); @fit_to_height = v; end
200
202
  # @see fit_to_width
201
- def fit_to_width=(v); Axlsx::validate_unsigned_int(v); @fit_to_width = v; end
203
+ def fit_to_width=(v); Axlsx.validate_unsigned_int(v); @fit_to_width = v; end
202
204
  # @see orientation
203
- def orientation=(v); Axlsx::validate_page_orientation(v); @orientation = v; end
205
+ def orientation=(v); Axlsx.validate_page_orientation(v); @orientation = v; end
204
206
  # @see paper_height
205
- def paper_height=(v); Axlsx::validate_number_with_unit(v); @paper_height = v; end
207
+ def paper_height=(v); Axlsx.validate_number_with_unit(v); @paper_height = v; end
206
208
  # @see paper_width
207
- def paper_width=(v); Axlsx::validate_number_with_unit(v); @paper_width = v; end
209
+ def paper_width=(v); Axlsx.validate_number_with_unit(v); @paper_width = v; end
208
210
  # @see scale
209
- def scale=(v); Axlsx::validate_scale_10_400(v); @scale = v; end
211
+ def scale=(v); Axlsx.validate_scale_10_400(v); @scale = v; end
210
212
 
211
213
  # convenience method to achieve sanity when setting fit_to_width and fit_to_height
212
214
  # as they both default to 1 if only their counterpart is specified.
@@ -223,14 +225,14 @@ module Axlsx
223
225
  # We treat any page set up that has a value set for fit_to_width or fit_to_height value as fit_to_page.
224
226
  # @return [Boolean]
225
227
  def fit_to_page?
226
- # is there some better what to express this?
227
- (fit_to_width != nil || fit_to_height != nil)
228
+ # is there some better way to express this?
229
+ (!fit_to_width.nil? || !fit_to_height.nil?)
228
230
  end
229
231
 
230
232
  # Serializes the page settings element.
231
233
  # @param [String] str
232
234
  # @return [String]
233
- def to_xml_string(str = '')
235
+ def to_xml_string(str = +'')
234
236
  serialized_tag('pageSetup', str)
235
237
  end
236
238
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # Pane options for a worksheet.
3
5
  #
@@ -94,33 +96,33 @@ module Axlsx
94
96
 
95
97
  # @see active_pane
96
98
  def active_pane=(v)
97
- Axlsx::validate_pane_type(v)
98
- @active_pane = Axlsx::camel(v.to_s, false)
99
+ Axlsx.validate_pane_type(v)
100
+ @active_pane = Axlsx.camel(v.to_s, false)
99
101
  end
100
102
 
101
103
  # @see state
102
104
  def state=(v)
103
- Axlsx::validate_split_state_type(v)
104
- @state = Axlsx::camel(v.to_s, false)
105
+ Axlsx.validate_split_state_type(v)
106
+ @state = Axlsx.camel(v.to_s, false)
105
107
  end
106
108
 
107
109
  # @see top_left_cell
108
110
  def top_left_cell=(v)
109
- cell = (v.class == Axlsx::Cell ? v.r_abs : v)
110
- Axlsx::validate_string(cell)
111
+ cell = (v.instance_of?(Axlsx::Cell) ? v.r_abs : v)
112
+ Axlsx.validate_string(cell)
111
113
  @top_left_cell = cell
112
114
  end
113
115
 
114
116
  # @see x_split
115
- def x_split=(v); Axlsx::validate_unsigned_int(v); @x_split = v end
117
+ def x_split=(v); Axlsx.validate_unsigned_int(v); @x_split = v end
116
118
 
117
119
  # @see y_split
118
- def y_split=(v); Axlsx::validate_unsigned_int(v); @y_split = v end
120
+ def y_split=(v); Axlsx.validate_unsigned_int(v); @y_split = v end
119
121
 
120
122
  # Serializes the data validation
121
123
  # @param [String] str
122
124
  # @return [String]
123
- def to_xml_string(str = '')
125
+ def to_xml_string(str = +'')
124
126
  finalize
125
127
  serialized_tag 'pane', str
126
128
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # Table
3
5
  # @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
@@ -122,7 +124,7 @@ module Axlsx
122
124
  @data = []
123
125
  v.each do |data_field|
124
126
  if data_field.is_a? String
125
- data_field = { :ref => data_field }
127
+ data_field = { ref: data_field }
126
128
  end
127
129
  data_field.each do |key, value|
128
130
  if key == :num_fmt
@@ -133,7 +135,6 @@ module Axlsx
133
135
  end
134
136
  @data << data_field
135
137
  end
136
- @data
137
138
  end
138
139
 
139
140
  # The pages
@@ -158,13 +159,13 @@ module Axlsx
158
159
  # The part name for this table
159
160
  # @return [String]
160
161
  def pn
161
- "#{PIVOT_TABLE_PN % (index + 1)}"
162
+ format(PIVOT_TABLE_PN, index + 1)
162
163
  end
163
164
 
164
165
  # The relationship part name of this pivot table
165
166
  # @return [String]
166
167
  def rels_pn
167
- "#{PIVOT_TABLE_RELS_PN % (index + 1)}"
168
+ format(PIVOT_TABLE_RELS_PN, index + 1)
168
169
  end
169
170
 
170
171
  # The cache_definition for this pivot table
@@ -184,13 +185,13 @@ module Axlsx
184
185
  # Serializes the object
185
186
  # @param [String] str
186
187
  # @return [String]
187
- def to_xml_string(str = '')
188
+ def to_xml_string(str = +'')
188
189
  str << '<?xml version="1.0" encoding="UTF-8"?>'
189
190
 
190
- str << ('<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '"' << (data.size <= 1 ? ' dataOnRows="1"' : '') << ' applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">')
191
+ str << '<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '"' << (data.size <= 1 ? ' dataOnRows="1"' : '') << ' applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">'
191
192
 
192
- str << ('<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>')
193
- str << ('<pivotFields count="' << header_cells_count.to_s << '">')
193
+ str << '<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>'
194
+ str << '<pivotFields count="' << header_cells_count.to_s << '">'
194
195
 
195
196
  header_cell_values.each do |cell_value|
196
197
  subtotal = !no_subtotals_on_headers.include?(cell_value)
@@ -203,13 +204,13 @@ module Axlsx
203
204
  str << '<rowFields count="1"><field x="-2"/></rowFields>'
204
205
  str << '<rowItems count="2"><i><x/></i> <i i="1"><x v="1"/></i></rowItems>'
205
206
  else
206
- str << ('<rowFields count="' << rows.size.to_s << '">')
207
+ str << '<rowFields count="' << rows.size.to_s << '">'
207
208
  rows.each do |row_value|
208
- str << ('<field x="' << header_index_of(row_value).to_s << '"/>')
209
+ str << '<field x="' << header_index_of(row_value).to_s << '"/>'
209
210
  end
210
211
  str << '</rowFields>'
211
- str << ('<rowItems count="' << rows.size.to_s << '">')
212
- rows.size.times do |i|
212
+ str << '<rowItems count="' << rows.size.to_s << '">'
213
+ rows.size.times do
213
214
  str << '<i/>'
214
215
  end
215
216
  str << '</rowItems>'
@@ -219,7 +220,7 @@ module Axlsx
219
220
  str << '<colFields count="1"><field x="-2"/></colFields>'
220
221
  str << "<colItems count=\"#{data.size}\">"
221
222
  str << '<i><x/></i>'
222
- data[1..-1].each_with_index do |datum_value, i|
223
+ (data.size - 1).times do |i|
223
224
  str << "<i i=\"#{i + 1}\"><x v=\"#{i + 1}\"/></i>"
224
225
  end
225
226
  str << '</colItems>'
@@ -227,16 +228,16 @@ module Axlsx
227
228
  str << '<colItems count="1"><i/></colItems>'
228
229
  end
229
230
  else
230
- str << ('<colFields count="' << columns.size.to_s << '">')
231
+ str << '<colFields count="' << columns.size.to_s << '">'
231
232
  columns.each do |column_value|
232
- str << ('<field x="' << header_index_of(column_value).to_s << '"/>')
233
+ str << '<field x="' << header_index_of(column_value).to_s << '"/>'
233
234
  end
234
235
  str << '</colFields>'
235
236
  end
236
237
  unless pages.empty?
237
- str << ('<pageFields count="' << pages.size.to_s << '">')
238
+ str << '<pageFields count="' << pages.size.to_s << '">'
238
239
  pages.each do |page_value|
239
- str << ('<pageField fld="' << header_index_of(page_value).to_s << '"/>')
240
+ str << '<pageField fld="' << header_index_of(page_value).to_s << '"/>'
240
241
  end
241
242
  str << '</pageFields>'
242
243
  end
@@ -244,7 +245,7 @@ module Axlsx
244
245
  str << "<dataFields count=\"#{data.size}\">"
245
246
  data.each do |datum_value|
246
247
  # The correct name prefix in ["Sum","Average", etc...]
247
- str << "<dataField name='#{(datum_value[:subtotal] || '')} of #{datum_value[:ref]}' fld='#{header_index_of(datum_value[:ref])}' baseField='0' baseItem='0'"
248
+ str << "<dataField name='#{datum_value[:subtotal] || ''} of #{datum_value[:ref]}' fld='#{header_index_of(datum_value[:ref])}' baseField='0' baseItem='0'"
248
249
  str << " numFmtId='#{datum_value[:num_fmt]}'" if datum_value[:num_fmt]
249
250
  str << " subtotal='#{datum_value[:subtotal]}' " if datum_value[:subtotal]
250
251
  str << "/>"
@@ -265,7 +266,7 @@ module Axlsx
265
266
  # References for header cells
266
267
  # @return [Array]
267
268
  def header_cell_refs
268
- Axlsx::range_to_a(header_range).first
269
+ Axlsx.range_to_a(header_range).first
269
270
  end
270
271
 
271
272
  # The header cells for the pivot table
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # Table
3
5
  # @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
@@ -24,7 +26,7 @@ module Axlsx
24
26
  # The part name for this table
25
27
  # @return [String]
26
28
  def pn
27
- "#{PIVOT_TABLE_CACHE_DEFINITION_PN % (index + 1)}"
29
+ format(PIVOT_TABLE_CACHE_DEFINITION_PN, index + 1)
28
30
  end
29
31
 
30
32
  # The identifier for this cache
@@ -43,15 +45,15 @@ module Axlsx
43
45
  # Serializes the object
44
46
  # @param [String] str
45
47
  # @return [String]
46
- def to_xml_string(str = '')
48
+ def to_xml_string(str = +'')
47
49
  str << '<?xml version="1.0" encoding="UTF-8"?>'
48
- str << ('<pivotCacheDefinition xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '" invalid="1" refreshOnLoad="1" recordCount="0">')
50
+ str << '<pivotCacheDefinition xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '" invalid="1" refreshOnLoad="1" recordCount="0">'
49
51
  str << '<cacheSource type="worksheet">'
50
- str << ('<worksheetSource ref="' << pivot_table.range << '" sheet="' << pivot_table.data_sheet.name << '"/>')
52
+ str << '<worksheetSource ref="' << pivot_table.range << '" sheet="' << pivot_table.data_sheet.name << '"/>'
51
53
  str << '</cacheSource>'
52
- str << ('<cacheFields count="' << pivot_table.header_cells_count.to_s << '">')
54
+ str << '<cacheFields count="' << pivot_table.header_cells_count.to_s << '">'
53
55
  pivot_table.header_cells.each do |cell|
54
- str << ('<cacheField name="' << cell.clean_value << '" numFmtId="0">')
56
+ str << '<cacheField name="' << cell.clean_value << '" numFmtId="0">'
55
57
  str << '<sharedItems count="0">'
56
58
  str << '</sharedItems>'
57
59
  str << '</cacheField>'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A simple, self serializing class for storing pivot tables
3
5
  class PivotTables < SimpleTypedList
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # Options for printing a worksheet. All options are boolean and false by default.
3
5
  #
@@ -31,7 +33,7 @@ module Axlsx
31
33
  # @note As all attributes default to "false" according to the xml schema definition, the generated xml includes only those attributes that are set to true.
32
34
  # @param [String] str
33
35
  # @return [String]
34
- def to_xml_string(str = '')
36
+ def to_xml_string(str = +'')
35
37
  serialized_tag 'printOptions', str
36
38
  end
37
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The Protected Range class represents a set of cells in the worksheet
3
5
  # @note the recommended way to manage protected ranges with via Worksheet#protect_range
@@ -39,7 +41,7 @@ module Axlsx
39
41
  # @param [String] str if this string object is provided we append
40
42
  # our output to that object. Use this - it helps limit the number of
41
43
  # objects created during serialization
42
- def to_xml_string(str = "")
44
+ def to_xml_string(str = +'')
43
45
  serialized_tag 'protectedRange', str
44
46
  end
45
47
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A self serializing collection of ranges that should be protected in
3
5
  # the worksheet
@@ -17,16 +19,16 @@ module Axlsx
17
19
  sqref = if cells.is_a?(String)
18
20
  cells
19
21
  elsif cells.is_a?(SimpleTypedList) || cells.is_a?(Array)
20
- Axlsx::cell_range(cells, false)
22
+ Axlsx.cell_range(cells, false)
21
23
  end
22
- self << ProtectedRange.new(:sqref => sqref, :name => "Range#{size}")
24
+ self << ProtectedRange.new(sqref: sqref, name: "Range#{size}")
23
25
  last
24
26
  end
25
27
 
26
28
  # Serializes the protected ranges
27
29
  # @param [String] str
28
30
  # @return [String]
29
- def to_xml_string(str = '')
31
+ def to_xml_string(str = +'')
30
32
  return if empty?
31
33
 
32
34
  str << '<protectedRanges>'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A simple, self serializing class for storing TextRuns
3
5
  class RichText < SimpleTypedList
@@ -45,7 +47,7 @@ module Axlsx
45
47
  # renders the RichTextRuns in this collection
46
48
  # @param [String] str
47
49
  # @return [String]
48
- def to_xml_string(str = '')
50
+ def to_xml_string(str = +'')
49
51
  each { |run| run.to_xml_string(str) }
50
52
  str
51
53
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The RichTextRun class creates and self serializing text run.
3
5
  class RichTextRun
@@ -128,7 +130,7 @@ module Axlsx
128
130
 
129
131
  # @see u
130
132
  def u=(v)
131
- v = :single if (v == true || v == 1 || v == :true || v == 'true')
133
+ v = :single if v == true || v == 1 || v == :true || v == 'true'
132
134
  set_run_style :validate_cell_u, :u, v
133
135
  end
134
136
 
@@ -138,7 +140,7 @@ module Axlsx
138
140
 
139
141
  # @param [String] v The 8 character representation for an rgb color #FFFFFFFF"
140
142
  def color=(v)
141
- @color = v.is_a?(Color) ? v : Color.new(:rgb => v)
143
+ @color = v.is_a?(Color) ? v : Color.new(rgb: v)
142
144
  end
143
145
 
144
146
  # The inline sz property for the cell
@@ -197,30 +199,30 @@ module Axlsx
197
199
  return unless INLINE_STYLES.include?(attr.to_sym)
198
200
 
199
201
  Axlsx.send(validator, value) unless validator.nil?
200
- self.instance_variable_set :"@#{attr.to_s}", value
202
+ instance_variable_set :"@#{attr}", value
201
203
  end
202
204
 
203
205
  # Serializes the RichTextRun
204
206
  # @param [String] str
205
207
  # @return [String]
206
- def to_xml_string(str = '')
208
+ def to_xml_string(str = +'')
207
209
  valid = RichTextRun::INLINE_STYLES
208
- data = Hash[Axlsx.instance_values_for(self).map { |k, v| [k.to_sym, v] }]
209
- data = data.select { |key, value| valid.include?(key) && !value.nil? }
210
+ data = Axlsx.instance_values_for(self).transform_keys(&:to_sym)
211
+ data = data.select { |key, value| !value.nil? && valid.include?(key) }
210
212
 
211
213
  str << '<r><rPr>'
212
- data.keys.each do |key|
214
+ data.each do |key, val|
213
215
  case key
214
216
  when :font_name
215
- str << ('<rFont val="' << font_name << '"/>')
217
+ str << '<rFont val="' << font_name << '"/>'
216
218
  when :color
217
- str << data[key].to_xml_string
219
+ str << val.to_xml_string
218
220
  else
219
- str << ('<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>')
221
+ str << '<' << key.to_s << ' val="' << xml_value(val) << '"/>'
220
222
  end
221
223
  end
222
- clean_value = Axlsx::trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@value.to_s))
223
- str << ('</rPr><t>' << clean_value << '</t></r>')
224
+ clean_value = Axlsx.trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx.sanitize(@value.to_s))
225
+ str << '</rPr><t>' << clean_value << '</t></r>'
224
226
  end
225
227
 
226
228
  private
@@ -240,7 +242,7 @@ module Axlsx
240
242
  return sz if sz
241
243
 
242
244
  font = styles.fonts[styles.cellXfs[style].fontId] || styles.fonts[0]
243
- (font.b || (defined?(@b) && @b)) ? (font.sz * 1.5) : font.sz
245
+ font.b || (defined?(@b) && @b) ? (font.sz * 1.5) : font.sz
244
246
  end
245
247
 
246
248
  def style
@@ -253,7 +255,7 @@ module Axlsx
253
255
 
254
256
  # Converts the value to the correct XML representation (fixes issues with
255
257
  # Numbers)
256
- def xml_value value
258
+ def xml_value(value)
257
259
  if value == true
258
260
  1
259
261
  elsif value == false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A Row is a single row in a worksheet.
3
5
  # @note The recommended way to manage rows and cells is to use Worksheet#add_row
@@ -86,12 +88,9 @@ module Axlsx
86
88
  # @param [Integer] r_index The row index, 0 based.
87
89
  # @param [String] str The string this rows xml will be appended to.
88
90
  # @return [String]
89
- def to_xml_string(r_index, str = '')
90
- serialized_tag('row', str, :r => r_index + 1) do
91
- tmp = '' # time / memory tradeoff, lots of calls to rubyzip costs more
92
- # time..
93
- each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, tmp) }
94
- str << tmp
91
+ def to_xml_string(r_index, str = +'')
92
+ serialized_tag('row', str, r: Axlsx.row_ref(r_index)) do
93
+ each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, str) }
95
94
  end
96
95
  end
97
96
 
@@ -130,7 +129,7 @@ module Axlsx
130
129
  # @see height
131
130
  def height=(v)
132
131
  unless v.nil?
133
- Axlsx::validate_unsigned_numeric(v)
132
+ Axlsx.validate_unsigned_numeric(v)
134
133
  @custom_height = true
135
134
  @ht = v
136
135
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A collection of break objects that define row breaks (page breaks) for printing and preview
3
5
 
@@ -11,8 +13,8 @@ module Axlsx
11
13
  # max and man values are fixed.
12
14
  # @see Break
13
15
  def add_break(options)
14
- # force feed the excel default
15
- self << Break.new(options.merge(:max => 16383, :man => true))
16
+ # force feed the Excel default
17
+ self << Break.new(options.merge(max: 16383, man: true))
16
18
  last
17
19
  end
18
20
 
@@ -21,10 +23,10 @@ module Axlsx
21
23
  # <brk id="7" max="16383" man="1"/>
22
24
  # <brk id="13" max="16383" man="1"/>
23
25
  # </rowBreaks>
24
- def to_xml_string(str = '')
26
+ def to_xml_string(str = +'')
25
27
  return if empty?
26
28
 
27
- str << ('<rowBreaks count="' << self.size.to_s << '" manualBreakCount="' << self.size.to_s << '">')
29
+ str << '<rowBreaks count="' << size.to_s << '" manualBreakCount="' << size.to_s << '">'
28
30
  each { |brk| brk.to_xml_string(str) }
29
31
  str << '</rowBreaks>'
30
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # Selection options for worksheet panes.
3
5
  #
@@ -72,27 +74,27 @@ module Axlsx
72
74
 
73
75
  # @see active_cell
74
76
  def active_cell=(v)
75
- cell = (v.class == Axlsx::Cell ? v.r_abs : v)
76
- Axlsx::validate_string(cell)
77
+ cell = (v.instance_of?(Axlsx::Cell) ? v.r_abs : v)
78
+ Axlsx.validate_string(cell)
77
79
  @active_cell = cell
78
80
  end
79
81
 
80
82
  # @see active_cell_id
81
- def active_cell_id=(v); Axlsx::validate_unsigned_int(v); @active_cell_id = v end
83
+ def active_cell_id=(v); Axlsx.validate_unsigned_int(v); @active_cell_id = v end
82
84
 
83
85
  # @see pane
84
86
  def pane=(v)
85
- Axlsx::validate_pane_type(v)
86
- @pane = Axlsx::camel(v, false)
87
+ Axlsx.validate_pane_type(v)
88
+ @pane = Axlsx.camel(v, false)
87
89
  end
88
90
 
89
91
  # @see sqref
90
- def sqref=(v); Axlsx::validate_string(v); @sqref = v end
92
+ def sqref=(v); Axlsx.validate_string(v); @sqref = v end
91
93
 
92
94
  # Serializes the data validation
93
95
  # @param [String] str
94
96
  # @return [String]
95
- def to_xml_string(str = '')
97
+ def to_xml_string(str = +'')
96
98
  serialized_tag 'selection', str
97
99
  end
98
100
  end