axlsx 2.0.1 → 2.1.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -3
  3. data/Rakefile +9 -10
  4. data/examples/IMAGE1UP.JPEG +0 -0
  5. data/examples/auto_filter.rb +10 -1
  6. data/examples/conditional_formatting/example_conditional_formatting.rb +3 -3
  7. data/examples/example.rb +72 -4
  8. data/examples/merge_cells.rb +17 -0
  9. data/examples/no_grid_with_borders.rb +18 -0
  10. data/examples/pivot_test.rb +63 -0
  11. data/examples/split.rb +16 -0
  12. data/lib/axlsx.rb +30 -16
  13. data/lib/axlsx/content_type/abstract_content_type.rb +1 -1
  14. data/lib/axlsx/content_type/content_type.rb +1 -1
  15. data/lib/axlsx/doc_props/app.rb +1 -1
  16. data/lib/axlsx/doc_props/core.rb +5 -5
  17. data/lib/axlsx/drawing/axes.rb +1 -1
  18. data/lib/axlsx/drawing/axis.rb +12 -9
  19. data/lib/axlsx/drawing/bar_3D_chart.rb +13 -13
  20. data/lib/axlsx/drawing/bar_series.rb +9 -9
  21. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  22. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  23. data/lib/axlsx/drawing/cat_axis.rb +5 -5
  24. data/lib/axlsx/drawing/chart.rb +44 -7
  25. data/lib/axlsx/drawing/drawing.rb +3 -1
  26. data/lib/axlsx/drawing/graphic_frame.rb +3 -3
  27. data/lib/axlsx/drawing/hyperlink.rb +1 -3
  28. data/lib/axlsx/drawing/line_3D_chart.rb +2 -2
  29. data/lib/axlsx/drawing/line_chart.rb +10 -10
  30. data/lib/axlsx/drawing/line_series.rb +14 -2
  31. data/lib/axlsx/drawing/marker.rb +1 -1
  32. data/lib/axlsx/drawing/num_data.rb +4 -4
  33. data/lib/axlsx/drawing/num_data_source.rb +6 -6
  34. data/lib/axlsx/drawing/num_val.rb +1 -1
  35. data/lib/axlsx/drawing/one_cell_anchor.rb +1 -1
  36. data/lib/axlsx/drawing/pic.rb +2 -3
  37. data/lib/axlsx/drawing/picture_locking.rb +1 -3
  38. data/lib/axlsx/drawing/pie_3D_chart.rb +5 -6
  39. data/lib/axlsx/drawing/pie_series.rb +6 -6
  40. data/lib/axlsx/drawing/scaling.rb +4 -4
  41. data/lib/axlsx/drawing/scatter_chart.rb +10 -10
  42. data/lib/axlsx/drawing/scatter_series.rb +26 -7
  43. data/lib/axlsx/drawing/ser_axis.rb +2 -2
  44. data/lib/axlsx/drawing/series.rb +3 -3
  45. data/lib/axlsx/drawing/series_title.rb +2 -2
  46. data/lib/axlsx/drawing/str_data.rb +3 -3
  47. data/lib/axlsx/drawing/str_val.rb +1 -1
  48. data/lib/axlsx/drawing/title.rb +3 -3
  49. data/lib/axlsx/drawing/val_axis.rb +1 -1
  50. data/lib/axlsx/drawing/vml_drawing.rb +1 -1
  51. data/lib/axlsx/package.rb +39 -28
  52. data/lib/axlsx/rels/relationship.rb +1 -1
  53. data/lib/axlsx/rels/relationships.rb +2 -2
  54. data/lib/axlsx/stylesheet/border_pr.rb +2 -2
  55. data/lib/axlsx/stylesheet/cell_alignment.rb +1 -3
  56. data/lib/axlsx/stylesheet/cell_protection.rb +1 -3
  57. data/lib/axlsx/stylesheet/cell_style.rb +1 -3
  58. data/lib/axlsx/stylesheet/color.rb +1 -3
  59. data/lib/axlsx/stylesheet/font.rb +1 -1
  60. data/lib/axlsx/stylesheet/gradient_stop.rb +1 -1
  61. data/lib/axlsx/stylesheet/num_fmt.rb +1 -3
  62. data/lib/axlsx/stylesheet/pattern_fill.rb +1 -1
  63. data/lib/axlsx/stylesheet/styles.rb +6 -6
  64. data/lib/axlsx/stylesheet/table_style_element.rb +1 -3
  65. data/lib/axlsx/util/accessors.rb +6 -6
  66. data/lib/axlsx/util/constants.rb +106 -101
  67. data/lib/axlsx/util/options_parser.rb +2 -1
  68. data/lib/axlsx/util/parser.rb +4 -4
  69. data/lib/axlsx/util/serialized_attributes.rb +16 -6
  70. data/lib/axlsx/util/simple_typed_list.rb +28 -52
  71. data/lib/axlsx/util/storage.rb +4 -4
  72. data/lib/axlsx/util/string.rb +7 -0
  73. data/lib/axlsx/util/validators.rb +20 -13
  74. data/lib/axlsx/version.rb +1 -1
  75. data/lib/axlsx/workbook/defined_name.rb +11 -12
  76. data/lib/axlsx/workbook/defined_names.rb +2 -2
  77. data/lib/axlsx/workbook/shared_strings_table.rb +5 -5
  78. data/lib/axlsx/workbook/workbook.rb +19 -12
  79. data/lib/axlsx/workbook/workbook_view.rb +78 -0
  80. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  81. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +2 -2
  82. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +1 -3
  83. data/lib/axlsx/workbook/worksheet/break.rb +1 -3
  84. data/lib/axlsx/workbook/worksheet/cell.rb +128 -73
  85. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +50 -40
  86. data/lib/axlsx/workbook/worksheet/cfvo.rb +1 -3
  87. data/lib/axlsx/workbook/worksheet/cfvos.rb +1 -1
  88. data/lib/axlsx/workbook/worksheet/col.rb +7 -10
  89. data/lib/axlsx/workbook/worksheet/col_breaks.rb +2 -2
  90. data/lib/axlsx/workbook/worksheet/comment.rb +5 -6
  91. data/lib/axlsx/workbook/worksheet/comments.rb +9 -12
  92. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +1 -1
  93. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +1 -1
  94. data/lib/axlsx/workbook/worksheet/data_bar.rb +4 -6
  95. data/lib/axlsx/workbook/worksheet/data_validation.rb +6 -4
  96. data/lib/axlsx/workbook/worksheet/dimension.rb +2 -2
  97. data/lib/axlsx/workbook/worksheet/header_footer.rb +6 -8
  98. data/lib/axlsx/workbook/worksheet/icon_set.rb +3 -5
  99. data/lib/axlsx/workbook/worksheet/merged_cells.rb +2 -2
  100. data/lib/axlsx/workbook/worksheet/page_margins.rb +1 -3
  101. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -1
  102. data/lib/axlsx/workbook/worksheet/page_setup.rb +21 -23
  103. data/lib/axlsx/workbook/worksheet/pane.rb +1 -3
  104. data/lib/axlsx/workbook/worksheet/pivot_table.rb +17 -24
  105. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +4 -4
  106. data/lib/axlsx/workbook/worksheet/print_options.rb +1 -3
  107. data/lib/axlsx/workbook/worksheet/protected_range.rb +1 -3
  108. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +1 -1
  109. data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
  110. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
  111. data/lib/axlsx/workbook/worksheet/row.rb +33 -51
  112. data/lib/axlsx/workbook/worksheet/row_breaks.rb +2 -2
  113. data/lib/axlsx/workbook/worksheet/selection.rb +1 -3
  114. data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
  115. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +1 -3
  116. data/lib/axlsx/workbook/worksheet/table.rb +6 -6
  117. data/lib/axlsx/workbook/worksheet/table_style_info.rb +1 -3
  118. data/lib/axlsx/workbook/worksheet/tables.rb +1 -1
  119. data/lib/axlsx/workbook/worksheet/worksheet.rb +59 -30
  120. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +3 -3
  121. data/test/drawing/tc_axis.rb +27 -0
  122. data/test/drawing/tc_bubble_chart.rb +44 -0
  123. data/test/drawing/tc_bubble_series.rb +21 -0
  124. data/test/drawing/tc_data_source.rb +6 -0
  125. data/test/drawing/tc_line_chart.rb +5 -5
  126. data/test/drawing/tc_line_series.rb +10 -2
  127. data/test/drawing/tc_pic.rb +4 -0
  128. data/test/drawing/tc_scatter_series.rb +25 -1
  129. data/test/tc_helper.rb +1 -1
  130. data/test/tc_package.rb +7 -1
  131. data/test/util/tc_simple_typed_list.rb +1 -2
  132. data/test/workbook/tc_defined_name.rb +12 -4
  133. data/test/workbook/tc_workbook.rb +16 -2
  134. data/test/workbook/tc_workbook_view.rb +50 -0
  135. data/test/workbook/worksheet/auto_filter/tc_filters.rb +1 -1
  136. data/test/workbook/worksheet/tc_break.rb +1 -1
  137. data/test/workbook/worksheet/tc_cell.rb +30 -4
  138. data/test/workbook/worksheet/tc_col.rb +2 -2
  139. data/test/workbook/worksheet/tc_conditional_formatting.rb +2 -2
  140. data/test/workbook/worksheet/tc_data_bar.rb +1 -1
  141. data/test/workbook/worksheet/tc_data_validation.rb +11 -11
  142. data/test/workbook/worksheet/tc_header_footer.rb +2 -2
  143. data/test/workbook/worksheet/tc_icon_set.rb +1 -1
  144. data/test/workbook/worksheet/tc_page_setup.rb +3 -3
  145. data/test/workbook/worksheet/tc_print_options.rb +1 -1
  146. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  147. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  148. data/test/workbook/worksheet/tc_row.rb +2 -2
  149. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +1 -1
  150. data/test/workbook/worksheet/tc_sheet_format_pr.rb +4 -4
  151. data/test/workbook/worksheet/tc_sheet_protection.rb +5 -5
  152. data/test/workbook/worksheet/tc_sheet_view.rb +4 -4
  153. data/test/workbook/worksheet/tc_worksheet.rb +49 -10
  154. metadata +81 -55
  155. data/test/axlsx.qcachegrind +0 -2226
@@ -35,7 +35,7 @@ module Axlsx
35
35
  # macro attribute should be optional!
36
36
  str << '<xdr:graphicFrame>'
37
37
  str << '<xdr:nvGraphicFramePr>'
38
- 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 << '"/>')
39
39
  str << '<xdr:cNvGraphicFramePr/>'
40
40
  str << '</xdr:nvGraphicFramePr>'
41
41
  str << '<xdr:xfrm>'
@@ -43,8 +43,8 @@ module Axlsx
43
43
  str << '<a:ext cx="0" cy="0"/>'
44
44
  str << '</xdr:xfrm>'
45
45
  str << '<a:graphic>'
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
+ str << ('<a:graphicData uri="' << XML_NS_C << '">')
47
+ str << ('<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>')
48
48
  str << '</a:graphicData>'
49
49
  str << '</a:graphic>'
50
50
  str << '</xdr:graphicFrame>'
@@ -93,9 +93,7 @@ module Axlsx
93
93
  # @param [String] str
94
94
  # @return [String]
95
95
  def to_xml_string(str = '')
96
- str << '<a:hlinkClick '
97
- serialized_attributes str, {:'r:id' => relationship.Id, :'xmlns:r' => XML_NS_R }
98
- str << '/>'
96
+ serialized_tag 'a:hlinkClick', str, {:'r:id' => relationship.Id, :'xmlns:r' => XML_NS_R }
99
97
  end
100
98
 
101
99
  end
@@ -60,8 +60,8 @@ module Axlsx
60
60
  # @param [String] str
61
61
  # @return [String]
62
62
  def to_xml_string(str = '')
63
- super(str) do |str_inner|
64
- str_inner << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
63
+ super(str) do
64
+ str << ('<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil?
65
65
  end
66
66
  end
67
67
  end
@@ -76,16 +76,16 @@ module Axlsx
76
76
  # @param [String] str
77
77
  # @return [String]
78
78
  def to_xml_string(str = '')
79
- super(str) do |str_inner|
80
- str_inner << "<c:" << node_name << ">"
81
- str_inner << '<c:grouping val="' << grouping.to_s << '"/>'
82
- str_inner << '<c:varyColors val="' << vary_colors.to_s << '"/>'
83
- @series.each { |ser| ser.to_xml_string(str_inner) }
84
- @d_lbls.to_xml_string(str_inner) if @d_lbls
85
- yield str_inner if block_given?
86
- axes.to_xml_string(str_inner, :ids => true)
87
- str_inner << "</c:" << node_name << ">"
88
- axes.to_xml_string(str_inner)
79
+ super(str) do
80
+ str << ("<c:" << node_name << ">")
81
+ str << ('<c:grouping val="' << grouping.to_s << '"/>')
82
+ str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
83
+ @series.each { |ser| ser.to_xml_string(str) }
84
+ @d_lbls.to_xml_string(str) if @d_lbls
85
+ yield if block_given?
86
+ axes.to_xml_string(str, :ids => true)
87
+ str << ("</c:" << node_name << ">")
88
+ axes.to_xml_string(str)
89
89
  end
90
90
  end
91
91
 
@@ -23,12 +23,17 @@ module Axlsx
23
23
  # @return [Boolean]
24
24
  attr_reader :show_marker
25
25
 
26
+ # line smoothing on values
27
+ # @return [Boolean]
28
+ attr_reader :smooth
29
+
26
30
  # Creates a new series
27
31
  # @option options [Array, SimpleTypedList] data
28
32
  # @option options [Array, SimpleTypedList] labels
29
33
  # @param [Chart] chart
30
34
  def initialize(chart, options={})
31
35
  @show_marker = false
36
+ @smooth = false
32
37
  @labels, @data = nil, nil
33
38
  super(chart, options)
34
39
  @labels = AxDataSource.new(:data => options[:labels]) unless options[:labels].nil?
@@ -46,6 +51,12 @@ module Axlsx
46
51
  @show_marker = v
47
52
  end
48
53
 
54
+ # @see smooth
55
+ def smooth=(v)
56
+ Axlsx::validate_boolean(v)
57
+ @smooth = v
58
+ end
59
+
49
60
  # Serializes the object
50
61
  # @param [String] str
51
62
  # @return [String]
@@ -53,11 +64,11 @@ module Axlsx
53
64
  super(str) do
54
65
  if color
55
66
  str << '<c:spPr><a:solidFill>'
56
- str << '<a:srgbClr val="' << color << '"/>'
67
+ str << ('<a:srgbClr val="' << color << '"/>')
57
68
  str << '</a:solidFill>'
58
69
  str << '<a:ln w="28800">'
59
70
  str << '<a:solidFill>'
60
- str << '<a:srgbClr val="' << color << '"/>'
71
+ str << ('<a:srgbClr val="' << color << '"/>')
61
72
  str << '</a:solidFill>'
62
73
  str << '</a:ln>'
63
74
  str << '<a:round/>'
@@ -66,6 +77,7 @@ module Axlsx
66
77
  str << '<c:marker><c:symbol val="none"/></c:marker>' unless @show_marker
67
78
  @labels.to_xml_string(str) unless @labels.nil?
68
79
  @data.to_xml_string(str) unless @data.nil?
80
+ str << ('<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>')
69
81
  end
70
82
  end
71
83
 
@@ -58,7 +58,7 @@ module Axlsx
58
58
  # @return [String]
59
59
  def to_xml_string(str = '')
60
60
  [:col, :colOff, :row, :rowOff].each do |k|
61
- str << '<xdr:' << k.to_s << '>' << self.send(k).to_s << '</xdr:' << k.to_s << '>'
61
+ str << ('<xdr:' << k.to_s << '>' << self.send(k).to_s << '</xdr:' << k.to_s << '>')
62
62
  end
63
63
  end
64
64
  private
@@ -38,13 +38,13 @@ module Axlsx
38
38
 
39
39
  # serialize the object
40
40
  def to_xml_string(str = "")
41
- str << '<c:' << @tag_name.to_s << '>'
42
- str << '<c:formatCode>' << format_code.to_s << '</c:formatCode>'
43
- str << '<c:ptCount val="' << @pt.size.to_s << '"/>'
41
+ str << ('<c:' << @tag_name.to_s << '>')
42
+ str << ('<c:formatCode>' << format_code.to_s << '</c:formatCode>')
43
+ str << ('<c:ptCount val="' << @pt.size.to_s << '"/>')
44
44
  @pt.each_with_index do |num_val, index|
45
45
  num_val.to_xml_string index, str
46
46
  end
47
- str << '</c:' << @tag_name.to_s << '>'
47
+ str << ('</c:' << @tag_name.to_s << '>')
48
48
  end
49
49
 
50
50
  end
@@ -33,7 +33,7 @@ module Axlsx
33
33
  # allowed element tag names
34
34
  # @return [Array]
35
35
  def self.allowed_tag_names
36
- [:yVal, :val]
36
+ [:yVal, :val, :bubbleSize]
37
37
  end
38
38
 
39
39
  # sets the tag name for this data source
@@ -46,16 +46,16 @@ module Axlsx
46
46
  # serialize the object
47
47
  # @param [String] str
48
48
  def to_xml_string(str="")
49
- str << '<c:' << tag_name.to_s << '>'
49
+ str << ('<c:' << tag_name.to_s << '>')
50
50
  if @f
51
- str << '<c:' << @ref_tag_name.to_s << '>'
52
- str << '<c:f>' << @f.to_s << '</c:f>'
51
+ str << ('<c:' << @ref_tag_name.to_s << '>')
52
+ str << ('<c:f>' << @f.to_s << '</c:f>')
53
53
  end
54
54
  @data.to_xml_string str
55
55
  if @f
56
- str << '</c:' << @ref_tag_name.to_s << '>'
56
+ str << ('</c:' << @ref_tag_name.to_s << '>')
57
57
  end
58
- str << '</c:' << tag_name.to_s << '>'
58
+ str << ('</c:' << tag_name.to_s << '>')
59
59
  end
60
60
  end
61
61
  end
@@ -26,7 +26,7 @@ module Axlsx
26
26
  # serialize the object
27
27
  def to_xml_string(idx, str = "")
28
28
  Axlsx::validate_unsigned_int(idx)
29
- str << '<c:pt idx="' << idx.to_s << '" formatCode="' << format_code << '"><c:v>' << v.to_s << '</c:v></c:pt>'
29
+ str << ('<c:pt idx="' << idx.to_s << '" formatCode="' << format_code << '"><c:v>' << v.to_s << '</c:v></c:pt>')
30
30
  end
31
31
  end
32
32
  end
@@ -77,7 +77,7 @@ module Axlsx
77
77
  str << '<xdr:from>'
78
78
  from.to_xml_string(str)
79
79
  str << '</xdr:from>'
80
- str << '<xdr:ext cx="' << ext[:cx].to_s << '" cy="' << ext[:cy].to_s << '"/>'
80
+ str << ('<xdr:ext cx="' << ext[:cx].to_s << '" cy="' << ext[:cy].to_s << '"/>')
81
81
  @object.to_xml_string(str)
82
82
  str << '<xdr:clientData/>'
83
83
  str << '</xdr:oneCellAnchor>'
@@ -165,17 +165,16 @@ module Axlsx
165
165
  def to_xml_string(str = '')
166
166
  str << '<xdr:pic>'
167
167
  str << '<xdr:nvPicPr>'
168
- str << '<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">'
168
+ str << ('<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">')
169
169
  @hyperlink.to_xml_string(str) if @hyperlink.is_a?(Hyperlink)
170
170
  str << '</xdr:cNvPr><xdr:cNvPicPr>'
171
171
  picture_locking.to_xml_string(str)
172
172
  str << '</xdr:cNvPicPr></xdr:nvPicPr>'
173
173
  str << '<xdr:blipFill>'
174
- str << '<a:blip xmlns:r ="' << XML_NS_R << '" r:embed="' << relationship.Id << '"/>'
174
+ str << ('<a:blip xmlns:r ="' << XML_NS_R << '" r:embed="' << relationship.Id << '"/>')
175
175
  str << '<a:stretch><a:fillRect/></a:stretch></xdr:blipFill><xdr:spPr>'
176
176
  str << '<a:xfrm><a:off x="0" y="0"/><a:ext cx="2336800" cy="2161540"/></a:xfrm>'
177
177
  str << '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic>'
178
-
179
178
  end
180
179
 
181
180
  private
@@ -35,9 +35,7 @@ module Axlsx
35
35
  # @param [String] str
36
36
  # @return [String]
37
37
  def to_xml_string(str = '')
38
- str << '<a:picLocks '
39
- serialized_attributes str
40
- str << '/>'
38
+ serialized_tag('a:picLocks', str)
41
39
  end
42
40
 
43
41
  end
@@ -34,13 +34,12 @@ module Axlsx
34
34
  # @param [String] str
35
35
  # @return [String]
36
36
  def to_xml_string(str = '')
37
- super(str) do |str_inner|
38
-
39
- str_inner << '<c:pie3DChart>'
40
- str_inner << '<c:varyColors val="' << vary_colors.to_s << '"/>'
41
- @series.each { |ser| ser.to_xml_string(str_inner) }
37
+ super(str) do
38
+ str << '<c:pie3DChart>'
39
+ str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
40
+ @series.each { |ser| ser.to_xml_string(str) }
42
41
  d_lbls.to_xml_string(str) if @d_lbls
43
- str_inner << '</c:pie3DChart>'
42
+ str << '</c:pie3DChart>'
44
43
  end
45
44
  end
46
45
 
@@ -46,17 +46,17 @@ module Axlsx
46
46
  # @param [String] str
47
47
  # @return [String]
48
48
  def to_xml_string(str = '')
49
- super(str) do |str_inner|
50
- str_inner << '<c:explosion val="' << @explosion << '"/>' unless @explosion.nil?
49
+ super(str) do
50
+ str << '<c:explosion val="' + @explosion + '"/>' unless @explosion.nil?
51
51
  colors.each_with_index do |c, index|
52
52
  str << '<c:dPt>'
53
- str << '<c:idx val="' << index.to_s << '"/>'
53
+ str << ('<c:idx val="' << index.to_s << '"/>')
54
54
  str << '<c:spPr><a:solidFill>'
55
- str << '<a:srgbClr val="' << c << '"/>'
55
+ str << ('<a:srgbClr val="' << c << '"/>')
56
56
  str << '</a:solidFill></c:spPr></c:dPt>'
57
57
  end
58
- @labels.to_xml_string str_inner unless @labels.nil?
59
- @data.to_xml_string str_inner unless @data.nil?
58
+ @labels.to_xml_string str unless @labels.nil?
59
+ @data.to_xml_string str unless @data.nil?
60
60
  end
61
61
  str
62
62
  end
@@ -49,10 +49,10 @@ module Axlsx
49
49
  # @return [String]
50
50
  def to_xml_string(str = '')
51
51
  str << '<c:scaling>'
52
- str << '<c:logBase val="' << @logBase.to_s << '"/>' unless @logBase.nil?
53
- str << '<c:orientation val="' << @orientation.to_s << '"/>' unless @orientation.nil?
54
- str << '<c:min val="' << @min.to_s << '"/>' unless @min.nil?
55
- str << '<c:max val="' << @max.to_s << '"/>' unless @max.nil?
52
+ str << ('<c:logBase val="' << @logBase.to_s << '"/>') unless @logBase.nil?
53
+ str << ('<c:orientation val="' << @orientation.to_s << '"/>') unless @orientation.nil?
54
+ str << ('<c:min val="' << @min.to_s << '"/>') unless @min.nil?
55
+ str << ('<c:max val="' << @max.to_s << '"/>') unless @max.nil?
56
56
  str << '</c:scaling>'
57
57
  end
58
58
 
@@ -25,7 +25,7 @@ module Axlsx
25
25
  # the y value axis
26
26
  # @return [ValAxis]
27
27
  def y_val_axis
28
- axes[:x_val_axis]
28
+ axes[:y_val_axis]
29
29
  end
30
30
  alias :yValAxis :y_val_axis
31
31
 
@@ -51,15 +51,15 @@ module Axlsx
51
51
  # @param [String] str
52
52
  # @return [String]
53
53
  def to_xml_string(str = '')
54
- super(str) do |str_inner|
55
- str_inner << '<c:scatterChart>'
56
- str_inner << '<c:scatterStyle val="' << scatter_style.to_s << '"/>'
57
- str_inner << '<c:varyColors val="' << vary_colors.to_s << '"/>'
58
- @series.each { |ser| ser.to_xml_string(str_inner) }
59
- d_lbls.to_xml_string(str_inner) if @d_lbls
60
- axes.to_xml_string(str_inner, :ids => true)
61
- str_inner << '</c:scatterChart>'
62
- axes.to_xml_string(str_inner)
54
+ super(str) do
55
+ str << '<c:scatterChart>'
56
+ str << ('<c:scatterStyle val="' << scatter_style.to_s << '"/>')
57
+ str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
58
+ @series.each { |ser| ser.to_xml_string(str) }
59
+ d_lbls.to_xml_string(str) if @d_lbls
60
+ axes.to_xml_string(str, :ids => true)
61
+ str << '</c:scatterChart>'
62
+ axes.to_xml_string(str)
63
63
  end
64
64
  str
65
65
  end
@@ -21,9 +21,21 @@ module Axlsx
21
21
  # @return [String]
22
22
  attr_reader :color
23
23
 
24
+ # Line smoothing between data points
25
+ # @return [Boolean]
26
+ attr_reader :smooth
27
+
24
28
  # Creates a new ScatterSeries
25
29
  def initialize(chart, options={})
26
30
  @xData, @yData = nil
31
+ if options[:smooth].nil?
32
+ # If caller hasn't specified smoothing or not, turn smoothing on or off based on scatter style
33
+ @smooth = [:smooth, :smoothMarker].include?(chart.scatter_style)
34
+ else
35
+ # Set smoothing according to the option provided
36
+ Axlsx::validate_boolean(options[:smooth])
37
+ @smooth = options[:smooth]
38
+ end
27
39
  super(chart, options)
28
40
  @xData = AxDataSource.new(:tag_name => :xVal, :data => options[:xData]) unless options[:xData].nil?
29
41
  @yData = NumDataSource.new({:tag_name => :yVal, :data => options[:yData]}) unless options[:yData].nil?
@@ -34,30 +46,37 @@ module Axlsx
34
46
  @color = v
35
47
  end
36
48
 
49
+ # @see smooth
50
+ def smooth=(v)
51
+ Axlsx::validate_boolean(v)
52
+ @smooth = v
53
+ end
54
+
37
55
  # Serializes the object
38
56
  # @param [String] str
39
57
  # @return [String]
40
58
  def to_xml_string(str = '')
41
- super(str) do |inner_str|
59
+ super(str) do
42
60
  # needs to override the super color here to push in ln/and something else!
43
61
  if color
44
62
  str << '<c:spPr><a:solidFill>'
45
- str << '<a:srgbClr val="' << color << '"/>'
63
+ str << ('<a:srgbClr val="' << color << '"/>')
46
64
  str << '</a:solidFill>'
47
65
  str << '<a:ln><a:solidFill>'
48
- str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>'
66
+ str << ('<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>')
49
67
  str << '</c:spPr>'
50
68
  str << '<c:marker>'
51
69
  str << '<c:spPr><a:solidFill>'
52
- str << '<a:srgbClr val="' << color << '"/>'
70
+ str << ('<a:srgbClr val="' << color << '"/>')
53
71
  str << '</a:solidFill>'
54
72
  str << '<a:ln><a:solidFill>'
55
- str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>'
73
+ str << ('<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>')
56
74
  str << '</c:spPr>'
57
75
  str << '</c:marker>'
58
76
  end
59
- @xData.to_xml_string(inner_str) unless @xData.nil?
60
- @yData.to_xml_string(inner_str) unless @yData.nil?
77
+ @xData.to_xml_string(str) unless @xData.nil?
78
+ @yData.to_xml_string(str) unless @yData.nil?
79
+ str << ('<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>')
61
80
  end
62
81
  str
63
82
  end
@@ -35,8 +35,8 @@ module Axlsx
35
35
  def to_xml_string(str = '')
36
36
  str << '<c:serAx>'
37
37
  super(str)
38
- str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>' unless @tick_lbl_skip.nil?
39
- str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>' unless @tick_mark_skip.nil?
38
+ str << ('<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>') unless @tick_lbl_skip.nil?
39
+ str << ('<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>') unless @tick_mark_skip.nil?
40
40
  str << '</c:serAx>'
41
41
  end
42
42
  end
@@ -59,10 +59,10 @@ module Axlsx
59
59
  # @return [String]
60
60
  def to_xml_string(str = '')
61
61
  str << '<c:ser>'
62
- str << '<c:idx val="' << index.to_s << '"/>'
63
- str << '<c:order val="' << (order || index).to_s << '"/>'
62
+ str << ('<c:idx val="' << index.to_s << '"/>')
63
+ str << ('<c:order val="' << (order || index).to_s << '"/>')
64
64
  title.to_xml_string(str) unless title.nil?
65
- yield str if block_given?
65
+ yield if block_given?
66
66
  str << '</c:ser>'
67
67
  end
68
68
  end
@@ -9,11 +9,11 @@ module Axlsx
9
9
  def to_xml_string(str = '')
10
10
  str << '<c:tx>'
11
11
  str << '<c:strRef>'
12
- str << '<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>'
12
+ str << ('<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>')
13
13
  str << '<c:strCache>'
14
14
  str << '<c:ptCount val="1"/>'
15
15
  str << '<c:pt idx="0">'
16
- str << '<c:v>' << @text << '</c:v>'
16
+ str << ('<c:v>' << @text << '</c:v>')
17
17
  str << '</c:pt>'
18
18
  str << '</c:strCache>'
19
19
  str << '</c:strRef>'
@@ -29,12 +29,12 @@ module Axlsx
29
29
 
30
30
  # serialize the object
31
31
  def to_xml_string(str = "")
32
- str << '<c:' << @tag_name.to_s << '>'
33
- str << '<c:ptCount val="' << @pt.size.to_s << '"/>'
32
+ str << ('<c:' << @tag_name.to_s << '>')
33
+ str << ('<c:ptCount val="' << @pt.size.to_s << '"/>')
34
34
  @pt.each_with_index do |value, index|
35
35
  value.to_xml_string index, str
36
36
  end
37
- str << '</c:' << @tag_name.to_s << '>'
37
+ str << ('</c:' << @tag_name.to_s << '>')
38
38
  end
39
39
 
40
40
  end