write_xlsx 1.10.0 → 1.10.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -0
  3. data/Changes +9 -0
  4. data/README.md +2 -2
  5. data/examples/autofilter.rb +1 -1
  6. data/examples/chart_area.rb +12 -12
  7. data/examples/chart_bar.rb +12 -12
  8. data/examples/chart_clustered.rb +12 -12
  9. data/examples/chart_column.rb +12 -12
  10. data/examples/chart_combined.rb +25 -25
  11. data/examples/chart_data_labels.rb +99 -99
  12. data/examples/chart_data_table.rb +25 -25
  13. data/examples/chart_data_tools.rb +50 -50
  14. data/examples/chart_doughnut.rb +29 -29
  15. data/examples/chart_gauge.rb +18 -18
  16. data/examples/chart_line.rb +32 -32
  17. data/examples/chart_pareto.rb +16 -16
  18. data/examples/chart_pie.rb +17 -17
  19. data/examples/chart_radar.rb +38 -38
  20. data/examples/chart_scatter.rb +12 -12
  21. data/examples/chart_secondary_axis.rb +13 -13
  22. data/examples/chart_stock.rb +12 -12
  23. data/examples/chart_styles.rb +5 -5
  24. data/examples/colors.rb +11 -11
  25. data/examples/comments2.rb +15 -15
  26. data/examples/conditional_format.rb +74 -74
  27. data/examples/data_validate.rb +64 -64
  28. data/examples/date_time.rb +3 -3
  29. data/examples/demo.rb +14 -14
  30. data/examples/diag_border.rb +6 -6
  31. data/examples/dynamic_arrays.rb +2 -2
  32. data/examples/formats.rb +10 -10
  33. data/examples/hyperlink1.rb +4 -4
  34. data/examples/ignore_errors.rb +2 -2
  35. data/examples/indent.rb +2 -2
  36. data/examples/macros.rb +4 -4
  37. data/examples/merge1.rb +1 -1
  38. data/examples/merge2.rb +9 -9
  39. data/examples/merge3.rb +5 -5
  40. data/examples/merge4.rb +20 -20
  41. data/examples/merge5.rb +18 -18
  42. data/examples/merge6.rb +7 -7
  43. data/examples/outline.rb +1 -1
  44. data/examples/outline_collapsed.rb +1 -1
  45. data/examples/panes.rb +4 -4
  46. data/examples/properties.rb +9 -9
  47. data/examples/protection.rb +2 -2
  48. data/examples/rich_strings.rb +6 -6
  49. data/examples/shape1.rb +7 -7
  50. data/examples/shape2.rb +16 -16
  51. data/examples/shape3.rb +5 -5
  52. data/examples/shape4.rb +7 -7
  53. data/examples/shape5.rb +7 -7
  54. data/examples/shape6.rb +7 -7
  55. data/examples/shape7.rb +10 -10
  56. data/examples/shape8.rb +10 -10
  57. data/examples/shape_all.rb +4 -4
  58. data/examples/sparklines1.rb +11 -11
  59. data/examples/sparklines2.rb +76 -76
  60. data/examples/tables.rb +87 -87
  61. data/examples/watermark.rb +1 -1
  62. data/lib/write_xlsx/chart/bar.rb +4 -4
  63. data/lib/write_xlsx/chart/line.rb +1 -1
  64. data/lib/write_xlsx/chart/radar.rb +2 -2
  65. data/lib/write_xlsx/chart/scatter.rb +4 -4
  66. data/lib/write_xlsx/chart/series.rb +27 -27
  67. data/lib/write_xlsx/chart/stock.rb +5 -5
  68. data/lib/write_xlsx/chart.rb +30 -30
  69. data/lib/write_xlsx/colors.rb +19 -19
  70. data/lib/write_xlsx/package/conditional_format.rb +18 -7
  71. data/lib/write_xlsx/package/table.rb +33 -24
  72. data/lib/write_xlsx/shape.rb +5 -5
  73. data/lib/write_xlsx/sheets.rb +1 -1
  74. data/lib/write_xlsx/sparkline.rb +286 -286
  75. data/lib/write_xlsx/utility.rb +32 -31
  76. data/lib/write_xlsx/version.rb +1 -1
  77. data/lib/write_xlsx/workbook.rb +20 -20
  78. data/lib/write_xlsx/worksheet/cell_data.rb +1 -1
  79. data/lib/write_xlsx/worksheet/data_validation.rb +13 -1
  80. data/lib/write_xlsx/worksheet.rb +486 -246
  81. metadata +3 -3
@@ -20,7 +20,7 @@ worksheet = workbook.add_worksheet
20
20
  dirname = File.dirname(File.expand_path(__FILE__))
21
21
  worksheet.set_header(
22
22
  '&C&C&[Picture]', nil,
23
- { :image_center => File.join(dirname, 'watermark.png') }
23
+ { image_center: File.join(dirname, 'watermark.png') }
24
24
  )
25
25
 
26
26
  workbook.close
@@ -86,14 +86,14 @@ module Writexlsx
86
86
 
87
87
  def axis_defaults_set
88
88
  if @x_axis.defaults
89
- @x_axis.defaults[:major_gridlines] = { :visible => 1 }
89
+ @x_axis.defaults[:major_gridlines] = { visible: 1 }
90
90
  else
91
- @x_axis.defaults = { :major_gridlines => { :visible => 1 } }
91
+ @x_axis.defaults = { major_gridlines: { visible: 1 } }
92
92
  end
93
93
  if @y_axis.defaults
94
- @y_axis.defaults[:major_gridlines] = { :visible => 0 }
94
+ @y_axis.defaults[:major_gridlines] = { visible: 0 }
95
95
  else
96
- @y_axis.defaults = { :major_gridlines => { :visible => 0 } }
96
+ @y_axis.defaults = { major_gridlines: { visible: 0 } }
97
97
  end
98
98
  @x_axis.defaults[:num_format] = '0%' if @subtype == 'percent_stacked'
99
99
  end
@@ -24,7 +24,7 @@ module Writexlsx
24
24
  def initialize(subtype)
25
25
  super(subtype)
26
26
  @subtype ||= 'standard'
27
- @default_marker = Marker.new(:type => 'none')
27
+ @default_marker = Marker.new(type: 'none')
28
28
  @smooth_allowed = 1
29
29
 
30
30
  # Override and reset the default axis values.
@@ -32,10 +32,10 @@ module Writexlsx
32
32
  def initialize(subtype)
33
33
  super(subtype)
34
34
  @subtype = subtype || 'marker'
35
- @default_marker = Marker.new(:type => 'none') if @subtype == 'marker'
35
+ @default_marker = Marker.new(type: 'none') if @subtype == 'marker'
36
36
 
37
37
  # Override and reset the default axis values.
38
- @x_axis.defaults[:major_gridlines] = { :visible => 1 }
38
+ @x_axis.defaults[:major_gridlines] = { visible: 1 }
39
39
  set_x_axis
40
40
 
41
41
  # Hardcode major_tick_mark for now untill there is an accessor.
@@ -123,8 +123,8 @@ module Writexlsx
123
123
  write_layout(@plotarea.layout, 'plot')
124
124
 
125
125
  # Write the subclass chart type elements for primary and secondary axes.
126
- write_chart_type(:primary_axes => 1)
127
- write_chart_type(:primary_axes => 0)
126
+ write_chart_type(primary_axes: 1)
127
+ write_chart_type(primary_axes: 0)
128
128
 
129
129
  # Write c:catAx and c:valAx elements for series using primary axes.
130
130
  write_cat_val_axis(@x_axis, @y_axis, @axis_ids, 'b')
@@ -201,7 +201,7 @@ module Writexlsx
201
201
  # Go through each series and define default values.
202
202
  @series.each do |series|
203
203
  # Set a line type unless there is already a user defined type.
204
- series.line = line_properties(:width => 2.25, :none => 1, :_defined => 1) unless series.line_defined?
204
+ series.line = line_properties(width: 2.25, none: 1, _defined: 1) unless series.line_defined?
205
205
  end
206
206
  end
207
207
 
@@ -210,7 +210,7 @@ module Writexlsx
210
210
  # Go through each series and define default values.
211
211
  @series.each do |series|
212
212
  # Set a marker type unless there is already a user defined type.
213
- series.marker = Marker.new(:type => 'none', :_defined => 1) unless ptrue?(series.marker)
213
+ series.marker = Marker.new(type: 'none', _defined: 1) unless ptrue?(series.marker)
214
214
  end
215
215
  end
216
216
  end
@@ -77,12 +77,12 @@ module Writexlsx
77
77
 
78
78
  def types
79
79
  {
80
- :exponential => 'exp',
81
- :linear => 'linear',
82
- :log => 'log',
83
- :moving_average => 'movingAvg',
84
- :polynomial => 'poly',
85
- :power => 'power'
80
+ exponential: 'exp',
81
+ linear: 'linear',
82
+ log: 'log',
83
+ moving_average: 'movingAvg',
84
+ polynomial: 'poly',
85
+ power: 'power'
86
86
  }
87
87
  end
88
88
  end
@@ -108,20 +108,20 @@ module Writexlsx
108
108
 
109
109
  def types
110
110
  {
111
- :automatic => 'automatic',
112
- :none => 'none',
113
- :square => 'square',
114
- :diamond => 'diamond',
115
- :triangle => 'triangle',
116
- :x => 'x',
117
- :star => 'star',
118
- :dot => 'dot',
119
- :short_dash => 'dot',
120
- :dash => 'dash',
121
- :long_dash => 'dash',
122
- :circle => 'circle',
123
- :plus => 'plus',
124
- :picture => 'picture'
111
+ automatic: 'automatic',
112
+ none: 'none',
113
+ square: 'square',
114
+ diamond: 'diamond',
115
+ triangle: 'triangle',
116
+ x: 'x',
117
+ star: 'star',
118
+ dot: 'dot',
119
+ short_dash: 'dot',
120
+ dash: 'dash',
121
+ long_dash: 'dash',
122
+ circle: 'circle',
123
+ plus: 'plus',
124
+ picture: 'picture'
125
125
  }
126
126
  end
127
127
  end
@@ -155,11 +155,11 @@ module Writexlsx
155
155
 
156
156
  def types
157
157
  {
158
- :fixed => 'fixedVal',
159
- :percentage => 'percentage',
160
- :standard_deviation => 'stdDev',
161
- :standard_error => 'stdErr',
162
- :custom => 'cust'
158
+ fixed: 'fixedVal',
159
+ percentage: 'percentage',
160
+ standard_deviation: 'stdDev',
161
+ standard_error: 'stdErr',
162
+ custom: 'cust'
163
163
  }
164
164
  end
165
165
 
@@ -261,8 +261,8 @@ module Writexlsx
261
261
 
262
262
  def errorbars(x, y)
263
263
  {
264
- :_x_error_bars => x ? Errorbars.new(x) : nil,
265
- :_y_error_bars => y ? Errorbars.new(y) : nil
264
+ _x_error_bars: x ? Errorbars.new(x) : nil,
265
+ _y_error_bars: y ? Errorbars.new(y) : nil
266
266
  }
267
267
  end
268
268
 
@@ -104,17 +104,17 @@ module Writexlsx
104
104
  if index % 4 != 3
105
105
  unless series.line_defined?
106
106
  series.line = {
107
- :width => 2.25,
108
- :none => 1,
109
- :_defined => 1
107
+ width: 2.25,
108
+ none: 1,
109
+ _defined: 1
110
110
  }
111
111
  end
112
112
 
113
113
  unless ptrue?(series.marker)
114
114
  series.marker = if index % 4 == 2
115
- Marker.new(:type => 'dot', :size => 3)
115
+ Marker.new(type: 'dot', size: 3)
116
116
  else
117
- Marker.new(:type => 'none')
117
+ Marker.new(type: 'none')
118
118
  end
119
119
  end
120
120
  end
@@ -70,7 +70,7 @@ module Writexlsx
70
70
  @gradient = gradient_properties(params[:gradient])
71
71
 
72
72
  # Map deprecated Spreadsheet::WriteExcel fill colour.
73
- fill = params[:color] ? { :color => params[:color] } : params[:fill]
73
+ fill = params[:color] ? { color: params[:color] } : params[:fill]
74
74
  @fill = fill_properties(fill)
75
75
 
76
76
  # Pattern fill overrides solid fill.
@@ -90,13 +90,13 @@ module Writexlsx
90
90
 
91
91
  # Map deprecated Spreadsheet::WriteExcel line_weight.
92
92
  border = params[:border]
93
- border = { :width => swe_line_weight(line_weight) } if line_weight
93
+ border = { width: swe_line_weight(line_weight) } if line_weight
94
94
 
95
95
  # Map deprecated Spreadsheet::WriteExcel line_pattern.
96
96
  if params[:line_pattern]
97
97
  pattern = swe_line_pattern(params[:line_pattern])
98
98
  if pattern == 'none'
99
- border = { :none => 1 }
99
+ border = { none: 1 }
100
100
  else
101
101
  border[:dash_type] = pattern
102
102
  end
@@ -432,8 +432,8 @@ module Writexlsx
432
432
 
433
433
  # Set the up and down bar properties.
434
434
  @up_down_bars = {
435
- :_up => Chartline.new(params[:up]),
436
- :_down => Chartline.new(params[:down])
435
+ _up: Chartline.new(params[:up]),
436
+ _down: Chartline.new(params[:down])
437
437
  }
438
438
  end
439
439
 
@@ -695,33 +695,33 @@ module Writexlsx
695
695
 
696
696
  def x_axis_defaults
697
697
  {
698
- :num_format => 'General',
699
- :major_gridlines => { :visible => 0 }
698
+ num_format: 'General',
699
+ major_gridlines: { visible: 0 }
700
700
  }
701
701
  end
702
702
 
703
703
  def y_axis_defaults
704
704
  {
705
- :num_format => 'General',
706
- :major_gridlines => { :visible => 1 }
705
+ num_format: 'General',
706
+ major_gridlines: { visible: 1 }
707
707
  }
708
708
  end
709
709
 
710
710
  def x2_axis_defaults
711
711
  {
712
- :num_format => 'General',
713
- :label_position => 'none',
714
- :crossing => 'max',
715
- :visible => 0
712
+ num_format: 'General',
713
+ label_position: 'none',
714
+ crossing: 'max',
715
+ visible: 0
716
716
  }
717
717
  end
718
718
 
719
719
  def y2_axis_defaults
720
720
  {
721
- :num_format => 'General',
722
- :major_gridlines => { :visible => 0 },
723
- :position => 'right',
724
- :visible => 1
721
+ num_format: 'General',
722
+ major_gridlines: { visible: 0 },
723
+ position: 'right',
724
+ visible: 1
725
725
  }
726
726
  end
727
727
 
@@ -803,8 +803,8 @@ module Writexlsx
803
803
  # Write the c:layout element.
804
804
  write_layout(@plotarea.layout, 'plot')
805
805
  # Write the subclass chart type elements for primary and secondary axes.
806
- write_chart_type(:primary_axes => 1)
807
- write_chart_type(:primary_axes => 0)
806
+ write_chart_type(primary_axes: 1)
807
+ write_chart_type(primary_axes: 0)
808
808
 
809
809
  # Configure a combined chart if present.
810
810
  if second_chart
@@ -823,15 +823,15 @@ module Writexlsx
823
823
  second_chart.series_index = @series_index
824
824
 
825
825
  # Write the subclass chart type elements for combined chart.
826
- second_chart.write_chart_type(:primary_axes => 1)
827
- second_chart.write_chart_type(:primary_axes => 0)
826
+ second_chart.write_chart_type(primary_axes: 1)
827
+ second_chart.write_chart_type(primary_axes: 0)
828
828
  end
829
829
 
830
830
  # Write the category and value elements for the primary axes.
831
831
  params = {
832
- :x_axis => @x_axis,
833
- :y_axis => @y_axis,
834
- :axis_ids => @axis_ids
832
+ x_axis: @x_axis,
833
+ y_axis: @y_axis,
834
+ axis_ids: @axis_ids
835
835
  }
836
836
 
837
837
  if @date_category
@@ -844,9 +844,9 @@ module Writexlsx
844
844
 
845
845
  # Write the category and value elements for the secondary axes.
846
846
  params = {
847
- :x_axis => @x2_axis,
848
- :y_axis => @y2_axis,
849
- :axis_ids => @axis2_ids
847
+ x_axis: @x2_axis,
848
+ y_axis: @y2_axis,
849
+ axis_ids: @axis2_ids
850
850
  }
851
851
 
852
852
  write_val_axis(@x2_axis, @y2_axis, @axis2_ids)
@@ -855,9 +855,9 @@ module Writexlsx
855
855
  if second_chart && second_chart.is_secondary?
856
856
 
857
857
  params = {
858
- :x_axis => second_chart.x2_axis,
859
- :y_axis => second_chart.y2_axis,
860
- :axis_ids => second_chart.axis2_ids
858
+ x_axis: second_chart.x2_axis,
859
+ y_axis: second_chart.y2_axis,
860
+ axis_ids: second_chart.axis2_ids
861
861
  }
862
862
 
863
863
  second_chart.write_val_axis(
@@ -4,25 +4,25 @@
4
4
  module Writexlsx
5
5
  class Colors
6
6
  COLORS = {
7
- :aqua => 0x0F,
8
- :cyan => 0x0F,
9
- :black => 0x08,
10
- :blue => 0x0C,
11
- :brown => 0x10,
12
- :magenta => 0x0E,
13
- :fuchsia => 0x0E,
14
- :gray => 0x17,
15
- :grey => 0x17,
16
- :green => 0x11,
17
- :lime => 0x0B,
18
- :navy => 0x12,
19
- :orange => 0x35,
20
- :pink => 0x21,
21
- :purple => 0x14,
22
- :red => 0x0A,
23
- :silver => 0x16,
24
- :white => 0x09,
25
- :yellow => 0x0D
7
+ aqua: 0x0F,
8
+ cyan: 0x0F,
9
+ black: 0x08,
10
+ blue: 0x0C,
11
+ brown: 0x10,
12
+ magenta: 0x0E,
13
+ fuchsia: 0x0E,
14
+ gray: 0x17,
15
+ grey: 0x17,
16
+ green: 0x11,
17
+ lime: 0x0B,
18
+ navy: 0x12,
19
+ orange: 0x35,
20
+ pink: 0x21,
21
+ purple: 0x14,
22
+ red: 0x0A,
23
+ silver: 0x16,
24
+ white: 0x09,
25
+ yellow: 0x0D
26
26
  } # :nodoc:
27
27
 
28
28
  ###############################################################################
@@ -409,12 +409,23 @@ module Writexlsx
409
409
 
410
410
  def row_col_param_for_conditional_formatting(*args)
411
411
  # Check for a cell reference in A1 notation and substitute row and column
412
- if args[0].to_s =~ (/^\D/) && (args[0] =~ /,/)
413
- # Check for a user defined multiple range like B3:K6,B8:K11.
414
- user_range = args[0].sub(/^=/, '').gsub(/\s*,\s*/, ' ').gsub(/\$/, '')
412
+ user_range = if args[0].to_s =~ (/^\D/) && (args[0] =~ /,/)
413
+ # Check for a user defined multiple range like B3:K6,B8:K11.
414
+ args[0].sub(/^=/, '').gsub(/\s*,\s*/, ' ').gsub(/\$/, '')
415
+ end
416
+
417
+ if (row_col_array = row_col_notation(args.first))
418
+ if row_col_array.size == 2
419
+ row1, col1 = row_col_array
420
+ row2 = args[1]
421
+ elsif row_col_array.size == 4
422
+ row1, col1, row2, col2 = row_col_array
423
+ param = args[1]
424
+ end
425
+ else
426
+ row1, col1, row2, col2, param = args
415
427
  end
416
428
 
417
- row1, col1, row2, col2, param = row_col_notation(args)
418
429
  if row2.respond_to?(:keys)
419
430
  param = row2
420
431
  row2 = row1
@@ -658,9 +669,9 @@ module Writexlsx
658
669
  # Set the default icon properties.
659
670
  total_icons.times do
660
671
  props << {
661
- :criteria => 0,
662
- :value => 0,
663
- :type => 'percent'
672
+ criteria: 0,
673
+ value: 0,
674
+ type: 'percent'
664
675
  }
665
676
  end
666
677
 
@@ -162,41 +162,50 @@ module Writexlsx
162
162
 
163
163
  private
164
164
 
165
- def handle_args(*args)
165
+ def handle_args(row1, col1 = nil, row2 = nil, col2 = nil, param = nil)
166
166
  # Check for a cell reference in A1 notation and substitute row and column
167
- row1, col1, row2, col2, param = row_col_notation(args)
167
+ if (row_col_array = row_col_notation(row1))
168
+ _row1, _col1, _row2, _col2 = row_col_array
169
+ _param = col1
170
+ else
171
+ _row1 = row1
172
+ _col1 = col1
173
+ _row2 = row2
174
+ _col2 = col2
175
+ _param = param
176
+ end
168
177
 
169
178
  # Check for a valid number of args.
170
- raise "Not enough parameters to add_table()" if [row1, col1, row2, col2].include?(nil)
179
+ raise "Not enough parameters to add_table()" if [_row1, _col1, _row2, _col2].include?(nil)
171
180
 
172
181
  # Check that row and col are valid without storing the values.
173
- check_dimensions_and_update_max_min_values(row1, col1, 1, 1)
174
- check_dimensions_and_update_max_min_values(row2, col2, 1, 1)
182
+ check_dimensions_and_update_max_min_values(_row1, _col1, 1, 1)
183
+ check_dimensions_and_update_max_min_values(_row2, _col2, 1, 1)
175
184
 
176
185
  # Swap last row/col for first row/col as necessary.
177
- row1, row2 = row2, row1 if row1 > row2
178
- col1, col2 = col2, col1 if col1 > col2
186
+ _row1, _row2 = _row2, _row1 if _row1 > _row2
187
+ _col1, _col2 = _col2, _col1 if _col1 > _col2
179
188
 
180
189
  # The final hash contains the validation parameters.
181
- param ||= {}
190
+ _param ||= {}
182
191
 
183
192
  # Turn on Excel's defaults.
184
- param[:banded_rows] ||= 1
185
- param[:header_row] ||= 1
186
- param[:autofilter] ||= 1
193
+ _param[:banded_rows] ||= 1
194
+ _param[:header_row] ||= 1
195
+ _param[:autofilter] ||= 1
187
196
 
188
197
  # Check that there are enough rows.
189
- num_rows = row2 - row1
190
- num_rows -= 1 if ptrue?(param[:header_row])
198
+ num_rows = _row2 - _row1
199
+ num_rows -= 1 if ptrue?(_param[:header_row])
191
200
 
192
201
  raise "Must have at least one data row in in add_table()" if num_rows < 0
193
202
 
194
203
  # If the header row if off the default is to turn autofilter off.
195
- param[:autofilter] = 0 if param[:header_row] == 0
204
+ _param[:autofilter] = 0 if _param[:header_row] == 0
196
205
 
197
- check_parameter(param, valid_table_parameter, 'add_table')
206
+ check_parameter(_param, valid_table_parameter, 'add_table')
198
207
 
199
- [row1, row2, col1, col2, param]
208
+ [_row1, _row2, _col1, _col2, _param]
200
209
  end
201
210
 
202
211
  # List of valid input parameters.
@@ -248,14 +257,14 @@ module Writexlsx
248
257
  .gsub(/\]/, "']")
249
258
 
250
259
  subtotals = {
251
- :average => 101,
252
- :countNums => 102,
253
- :count => 103,
254
- :max => 104,
255
- :min => 105,
256
- :stdDev => 107,
257
- :sum => 109,
258
- :var => 110
260
+ average: 101,
261
+ countNums: 102,
262
+ count: 103,
263
+ max: 104,
264
+ min: 105,
265
+ stdDev: 107,
266
+ sum: 109,
267
+ var: 110
259
268
  }
260
269
 
261
270
  unless (func_num = subtotals[function.to_sym])
@@ -204,11 +204,11 @@ module Writexlsx
204
204
  def auto_locate_connectors(shapes, shape_hash)
205
205
  # Valid connector shapes.
206
206
  connector_shapes = {
207
- :straightConnector => 1,
208
- :Connector => 1,
209
- :bentConnector => 1,
210
- :curvedConnector => 1,
211
- :line => 1
207
+ straightConnector: 1,
208
+ Connector: 1,
209
+ bentConnector: 1,
210
+ curvedConnector: 1,
211
+ line: 1
212
212
  }
213
213
 
214
214
  shape_base = @type.chop.to_sym # Remove the number of segments from end of type.
@@ -8,7 +8,7 @@ module Writexlsx
8
8
  class Sheets < DelegateClass(Array)
9
9
  include Writexlsx::Utility
10
10
 
11
- BASE_NAME = { :sheet => 'Sheet', :chart => 'Chart' } # :nodoc:
11
+ BASE_NAME = { sheet: 'Sheet', chart: 'Chart' } # :nodoc:
12
12
 
13
13
  def initialize
14
14
  super([])