Skip to content

Commit

Permalink
Fix for ignored position in chart custom data labels.
Browse files Browse the repository at this point in the history
Fix issue where custom chart data labels didn't inherit the position
for the data labels in the series.

Issue #754
  • Loading branch information
jmcnamara committed Oct 2, 2020
1 parent 1c21231 commit 512334d
Show file tree
Hide file tree
Showing 7 changed files with 178 additions and 0 deletions.
6 changes: 6 additions & 0 deletions xlsxwriter/chart.py
Original file line number Diff line number Diff line change
Expand Up @@ -3651,6 +3651,9 @@ def _write_custom_labels(self, parent, labels):
elif label.get('formula'):
self._write_custom_label_formula(label)

if parent.get('position'):
self._write_d_lbl_pos(parent['position'])

if parent.get('value'):
self._write_show_val()
if parent.get('category'):
Expand All @@ -3661,6 +3664,9 @@ def _write_custom_labels(self, parent, labels):
elif label.get('value'):
self._write_custom_label_str(label)

if parent.get('position'):
self._write_d_lbl_pos(parent['position'])

if parent.get('value'):
self._write_show_val()
if parent.get('category'):
Expand Down
59 changes: 59 additions & 0 deletions xlsxwriter/test/comparison/test_chart_data_labels48.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
###############################################################################
#
# Tests for XlsxWriter.
#
# Copyright (c), 2013-2020, John McNamara, jmcnamara@cpan.org
#

from ..excel_comparison_test import ExcelComparisonTest
from ...workbook import Workbook


class TestCompareXLSXFiles(ExcelComparisonTest):
"""
Test file created by XlsxWriter against a file created by Excel.
"""

def setUp(self):

self.set_filename('chart_data_labels48.xlsx')

def test_create_file(self):
"""Test the creation of a simple XlsxWriter file."""

workbook = Workbook(self.got_filename)

worksheet = workbook.add_worksheet()
chart = workbook.add_chart({'type': 'column'})

chart.axis_ids = [61160832, 61167104]

data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],

]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

chart.add_series({
'values': '=Sheet1!$A$1:$A$5',
'data_labels': {'value': True, 'position': 'outside_end', 'custom': [{'value': 31}]},
})

chart.add_series({
'values': '=Sheet1!$B$1:$B$5',
'data_labels': {'value': True, 'position': 'inside_base', 'custom': [{'value': 32}]},
})

chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

worksheet.insert_chart('E9', chart)

workbook.close()

self.assertExcelEqual()
59 changes: 59 additions & 0 deletions xlsxwriter/test/comparison/test_chart_data_labels49.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
###############################################################################
#
# Tests for XlsxWriter.
#
# Copyright (c), 2013-2020, John McNamara, jmcnamara@cpan.org
#

from ..excel_comparison_test import ExcelComparisonTest
from ...workbook import Workbook


class TestCompareXLSXFiles(ExcelComparisonTest):
"""
Test file created by XlsxWriter against a file created by Excel.
"""

def setUp(self):

self.set_filename('chart_data_labels49.xlsx')

def test_create_file(self):
"""Test the creation of a simple XlsxWriter file."""

workbook = Workbook(self.got_filename)

worksheet = workbook.add_worksheet()
chart = workbook.add_chart({'type': 'column'})

chart.axis_ids = [59202176, 60966784]

data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],

]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

chart.add_series({
'values': '=Sheet1!$A$1:$A$5',
'data_labels': {'value': True, 'position': 'outside_end', 'custom': [{'value': '=Sheet1!$B$1'}]},
})

chart.add_series({
'values': '=Sheet1!$B$1:$B$5',
'data_labels': {'value': True, 'position': 'inside_base', 'custom': [{'value': '=Sheet1!$B$2'}]},
})

chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

worksheet.insert_chart('E9', chart)

workbook.close()

self.assertExcelEqual()
54 changes: 54 additions & 0 deletions xlsxwriter/test/comparison/test_chart_data_labels50.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
###############################################################################
#
# Tests for XlsxWriter.
#
# Copyright (c), 2013-2020, John McNamara, jmcnamara@cpan.org
#

from ..excel_comparison_test import ExcelComparisonTest
from ...workbook import Workbook


class TestCompareXLSXFiles(ExcelComparisonTest):
"""
Test file created by XlsxWriter against a file created by Excel.
"""

def setUp(self):

self.set_filename('chart_data_labels50.xlsx')

def test_create_file(self):
"""Test the creation of a simple XlsxWriter file."""

workbook = Workbook(self.got_filename)

worksheet = workbook.add_worksheet()
chart = workbook.add_chart({'type': 'column'})

chart.axis_ids = [84605184, 84639744]

data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],
]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

chart.add_series({
'values': '=Sheet1!$A$1:$A$5',
'data_labels': {'value': 1, 'position': 'center', 'custom': [{'font': {'bold': 1, 'italic': 1, 'color': 'red', 'baseline': -1}, 'border': {'color': 'red'}}]}
})

chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

worksheet.insert_chart('E9', chart)

workbook.close()

self.assertExcelEqual()
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit 512334d

Please sign in to comment.