From c4471f4448799d3980f4db5f1cfaaa4e36d95bee Mon Sep 17 00:00:00 2001 From: Randy Morgan Date: Fri, 20 Jul 2012 21:45:13 +0900 Subject: data labels for bar and line charts --- examples/basic_charts.rb | 4 ++++ lib/axlsx/drawing/bar_3D_chart.rb | 18 ++++++++++-------- lib/axlsx/drawing/d_lbls.rb | 4 ++++ 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 << '' str_inner << '' str_inner << '' str_inner << '' @series.each { |ser| ser.to_xml_string(str_inner) } - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' + @d_lbls.to_xml_string(str) if @d_lbls str_inner << '' unless @gap_width.nil? str_inner << '' unless @gap_depth.nil? str_inner << '' 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 << '' str_inner << '' str_inner << '' @series.each { |ser| ser.to_xml_string(str_inner) } - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' - str_inner << '' + @d_lbls.to_xml_string(str) if @d_lbls str_inner << '' unless @gapDepth.nil? str_inner << '' str_inner << '' @@ -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 -- cgit v1.2.3