diff options
| -rw-r--r-- | examples/basic_charts.rb | 4 | ||||
| -rw-r--r-- | lib/axlsx/drawing/bar_3D_chart.rb | 18 | ||||
| -rw-r--r-- | lib/axlsx/drawing/d_lbls.rb | 4 | ||||
| -rw-r--r-- | lib/axlsx/drawing/line_3D_chart.rb | 19 |
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 |
