summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/basic_charts.rb4
-rw-r--r--lib/axlsx/drawing/bar_3D_chart.rb18
-rw-r--r--lib/axlsx/drawing/d_lbls.rb4
-rw-r--r--lib/axlsx/drawing/line_3D_chart.rb19
4 files changed, 29 insertions, 16 deletions
diff --git a/examples/basic_charts.rb b/examples/basic_charts.rb
index ab5cf522..692dc192 100644
--- a/examples/basic_charts.rb
+++ b/examples/basic_charts.rb
@@ -22,6 +22,8 @@ end
sheet.add_row [1, 2, 3, '=sum(A2:C2)']
sheet.add_chart(Axlsx::Line3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "Chart") do |chart|
chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"], :title => 'bob'
+ chart.d_lbls.show_val = true
+ chart.d_lbls.show_cat_name = true
end
end
@@ -34,6 +36,8 @@ end
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
chart.valAxis.label_rotation = -45
chart.catAxis.label_rotation = 45
+ chart.d_lbls.d_lbl_pos = :outEnd
+ chart.d_lbls.show_val = true
end
end
diff --git a/lib/axlsx/drawing/bar_3D_chart.rb b/lib/axlsx/drawing/bar_3D_chart.rb
index 5db7c1e4..f3eb77e3 100644
--- a/lib/axlsx/drawing/bar_3D_chart.rb
+++ b/lib/axlsx/drawing/bar_3D_chart.rb
@@ -77,6 +77,7 @@ module Axlsx
super(frame, options)
@series_type = BarSeries
@view_3D = View3D.new({:r_ang_ax=>1}.merge(options))
+ @d_lbls = nil
end
# The direction of the bars in the chart
@@ -119,20 +120,14 @@ module Axlsx
# @param [String] str
# @return [String]
def to_xml_string(str = '')
+ remove_invalid_d_lbls_attributes
super(str) do |str_inner|
str_inner << '<c:bar3DChart>'
str_inner << '<c:barDir val="' << bar_dir.to_s << '"/>'
str_inner << '<c:grouping val="' << grouping.to_s << '"/>'
str_inner << '<c:varyColors val="1"/>'
@series.each { |ser| ser.to_xml_string(str_inner) }
- str_inner << '<c:dLbls>'
- str_inner << '<c:showLegendKey val="0"/>'
- str_inner << '<c:showVal val="0"/>'
- str_inner << '<c:showCatName val="0"/>'
- str_inner << '<c:showSerName val="0"/>'
- str_inner << '<c:showPercent val="0"/>'
- str_inner << '<c:showBubbleSize val="0"/>'
- str_inner << '</c:dLbls>'
+ @d_lbls.to_xml_string(str) if @d_lbls
str_inner << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
str_inner << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
str_inner << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
@@ -144,5 +139,12 @@ module Axlsx
@val_axis.to_xml_string str_inner
end
end
+
+ def remove_invalid_d_lbls_attributes
+ return unless @d_lbls
+ @d_lbls.instance_eval{ @d_lbl_pos = nil
+ @show_leader_lines = nil
+ }
+ end
end
end
diff --git a/lib/axlsx/drawing/d_lbls.rb b/lib/axlsx/drawing/d_lbls.rb
index 9777aeb5..13882056 100644
--- a/lib/axlsx/drawing/d_lbls.rb
+++ b/lib/axlsx/drawing/d_lbls.rb
@@ -19,6 +19,10 @@ module Axlsx
# These attributes are all boolean so I'm doing a bit of a hand
# waving magic show to set up the attriubte accessors
+ # @note
+ # not all charts support all methods!
+ # Bar3DChart and Line3DChart and ScatterChart do not support d_lbl_pos or show_leader_lines
+ #
BOOLEAN_ATTRIBUTES = [:show_legend_key, :show_val, :show_cat_name, :show_ser_name, :show_percent, :show_bubble_size, :show_leader_lines]
# creates a new DLbls object
diff --git a/lib/axlsx/drawing/line_3D_chart.rb b/lib/axlsx/drawing/line_3D_chart.rb
index 5fc3e7c2..2268a6dc 100644
--- a/lib/axlsx/drawing/line_3D_chart.rb
+++ b/lib/axlsx/drawing/line_3D_chart.rb
@@ -71,6 +71,7 @@ module Axlsx
super(frame, options)
@series_type = LineSeries
@view_3D = View3D.new({:perspective=>30}.merge(options))
+ @d_lbls = nil
end
# @see grouping
@@ -89,19 +90,13 @@ module Axlsx
# @param [String] str
# @return [String]
def to_xml_string(str = '')
+ remove_invalid_d_lbls_attributes
super(str) do |str_inner|
str_inner << '<c:line3DChart>'
str_inner << '<c:grouping val="' << grouping.to_s << '"/>'
str_inner << '<c:varyColors val="1"/>'
@series.each { |ser| ser.to_xml_string(str_inner) }
- str_inner << '<c:dLbls>'
- str_inner << '<c:showLegendKey val="0"/>'
- str_inner << '<c:showVal val="0"/>'
- str_inner << '<c:showCatName val="0"/>'
- str_inner << '<c:showSerName val="0"/>'
- str_inner << '<c:showPercent val="0"/>'
- str_inner << '<c:showBubbleSize val="0"/>'
- str_inner << '</c:dLbls>'
+ @d_lbls.to_xml_string(str) if @d_lbls
str_inner << '<c:gapDepth val="' << @gapDepth.to_s << '"/>' unless @gapDepth.nil?
str_inner << '<c:axId val="' << @catAxId.to_s << '"/>'
str_inner << '<c:axId val="' << @valAxId.to_s << '"/>'
@@ -112,6 +107,14 @@ module Axlsx
@serAxis.to_xml_string str_inner
end
end
+ #
+ # nills out d_lbls attributes that are not allowed in this chart type
+ def remove_invalid_d_lbls_attributes
+ return unless @d_lbls
+ @d_lbls.instance_eval{ @d_lbl_pos = nil
+ @show_leader_lines = nil
+ }
+ end
end
end