Skip to content

Commit

Permalink
Fix for column/bar gap/overlap on y2 axis.
Browse files Browse the repository at this point in the history
  • Loading branch information
Hideo NAKAMURA committed Dec 5, 2014
1 parent cec2783 commit 372e6dc
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 5 deletions.
37 changes: 32 additions & 5 deletions lib/write_xlsx/chart.rb
Expand Up @@ -241,9 +241,27 @@ def add_series(params)

@series << Series.new(self, params)

# Set the secondary axis properties.
x2_axis = params[:x2_axis]
y2_axis = params[:y2_axis]

# Set the gap and overlap for Bar/Column charts.
@series_gap = params[:gap] if params[:gap]
@series_overlap = params[:overlap] if params[:overlap]
if params[:gap]
if ptrue?(y2_axis)
@series_gap_2 = params[:gap]
else
@series_gap_1 = params[:gap]
end
end

# Set the overlap for Bar/Column charts.
if params[:overlap]
if ptrue?(y2_axis)
@series_overlap_2 = params[:overlap]
else
@series_overlap_1 = params[:overlap]
end
end
end

#
Expand Down Expand Up @@ -428,7 +446,7 @@ def write_bar_chart(params) # :nodoc:

# Set a default overlap for stacked charts.
if @subtype =~ /stacked/
@series_overlap = 100 unless @series_overlap
@series_overlap_1 = 100 unless @series_overlap_1
end

@writer.tag_elements('c:barChart') do
Expand All @@ -442,8 +460,17 @@ def write_bar_chart(params) # :nodoc:
# write the c:marker element.
write_marker_value

# Write the c:gapWidth element.
write_gap_width(@series_gap)
if ptrue?(params[:primary_axes])
# Write the c:gapWidth element.
write_gap_width(@series_gap_1)
# Write the c:overlap element.
write_overlap(@series_overlap_1)
else
# Write the c:gapWidth element.
write_gap_width(@series_gap_2)
# Write the c:overlap element.
write_overlap(@series_overlap_2)
end

# write the c:overlap element.
write_overlap(@series_overlap)
Expand Down
54 changes: 54 additions & 0 deletions test/regression/test_chart_gap04.rb
@@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
require 'helper'

class TestRegressionChartGap04 < Test::Unit::TestCase
def setup
setup_dir_var
end

def teardown
File.delete(@xlsx) if File.exist?(@xlsx)
end

def test_chart_gap04
@xlsx = 'chart_gap04.xlsx'
workbook = WriteXLSX.new(@xlsx)
worksheet = workbook.add_worksheet
chart = workbook.add_chart(:type => 'column', :embedded => 1)

# For testing, copy the randomly generated axis ids in the target xlsx file.
chart.instance_variable_set(:@axis_ids, [45938176, 59715584])
chart.instance_variable_set(:@axis2_ids, [62526208, 59718272])

data = [
[1, 2, 3, 4, 5],
[6, 8, 6, 4, 2]
]

worksheet.write('A1', data)

chart.add_series(
:values => '=Sheet1!$A$1:$A$5',
:gap => 51,
:overlap => 12
)

chart.add_series(
:values => '=Sheet1!$B$1:$B$5',
:y2_axis => 1,
:gap => 251,
:overlap => -27
)

worksheet.insert_chart('E9', chart)

workbook.close
compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
[],
{
'xl/charts/chart1.xml' => ['<c:pageMargins'],
'xl/workbook.xml' => [ '<fileVersion' ]
}
)
end
end
56 changes: 56 additions & 0 deletions test/regression/test_chart_gap05.rb
@@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
require 'helper'

class TestRegressionChartGap05 < Test::Unit::TestCase
def setup
setup_dir_var
end

def teardown
File.delete(@xlsx) if File.exist?(@xlsx)
end

def test_chart_gap05
@xlsx = 'chart_gap05.xlsx'
workbook = WriteXLSX.new(@xlsx)
worksheet = workbook.add_worksheet
chart = workbook.add_chart(:type => 'bar', :embedded => 1)

# For testing, copy the randomly generated axis ids in the target xlsx file.
chart.instance_variable_set(:@axis_ids, [45938176, 59715584])
chart.instance_variable_set(:@axis2_ids, [70848512, 54519680])

data = [
[1, 2, 3, 4, 5],
[6, 8, 6, 4, 2]
]

worksheet.write('A1', data)

chart.add_series(
:values => '=Sheet1!$A$1:$A$5',
:gap => 51,
:overlap => 12
)

chart.add_series(
:values => '=Sheet1!$B$1:$B$5',
:y2_axis => 1,
:gap => 251,
:overlap => -27
)

chart.set_x2_axis(:label_position => 'next_to')

worksheet.insert_chart('E9', chart)

workbook.close
compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
[],
{
'xl/charts/chart1.xml' => ['<c:pageMargins'],
'xl/workbook.xml' => [ '<fileVersion' ]
}
)
end
end
Binary file added test/regression/xlsx_files/chart_gap04.xlsx
Binary file not shown.
Binary file added test/regression/xlsx_files/chart_gap05.xlsx
Binary file not shown.

0 comments on commit 372e6dc

Please sign in to comment.