diff --git a/lib/Excel/Writer/XLSX/Chart.pm b/lib/Excel/Writer/XLSX/Chart.pm index 405e0dc8..c0183622 100644 --- a/lib/Excel/Writer/XLSX/Chart.pm +++ b/lib/Excel/Writer/XLSX/Chart.pm @@ -6085,16 +6085,32 @@ sub _write_separator { # # _write_show_leader_lines() # -# Write the element. +# Write the element. This is different for Pie/Doughnut +# charts. Other chart types only supported leader lines after Excel 2015 via +# an extension element. # sub _write_show_leader_lines { - my $self = shift; - my $val = 1; + my $self = shift; + my $color = shift; - my @attributes = ( 'val' => $val ); + my $uri = '{CE6537A1-D6FC-4f65-9D91-7224C49458BB}'; + my $xmlns_c_15 = 'http://schemas.microsoft.com/office/drawing/2012/chart'; - $self->xml_empty_tag( 'c:showLeaderLines', @attributes ); + + my @attributes1 = ( + 'uri' => $uri, + 'xmlns:c15' => $xmlns_c_15, + ); + + my @attributes2 = ( 'val' => 1 ); + + + $self->xml_start_tag( 'c:extLst' ); + $self->xml_start_tag( 'c:ext', @attributes1 ); + $self->xml_empty_tag( 'c15:showLeaderLines', @attributes2 ); + $self->xml_end_tag( 'c:ext' ); + $self->xml_end_tag( 'c:extLst' ); } diff --git a/lib/Excel/Writer/XLSX/Chart/Pie.pm b/lib/Excel/Writer/XLSX/Chart/Pie.pm index 285343f8..a510c25c 100644 --- a/lib/Excel/Writer/XLSX/Chart/Pie.pm +++ b/lib/Excel/Writer/XLSX/Chart/Pie.pm @@ -349,6 +349,27 @@ sub _write_first_slice_ang { 1; +############################################################################## +# +# _write_show_leader_lines() +# +# Write the element. This is for Pie/Doughnut charts. +# Other chart types only supported leader lines after Excel 2015 via an +# extension element. +# +sub _write_show_leader_lines { + + my $self = shift; + my $val = 1; + + my @attributes = ( 'val' => $val ); + + $self->xml_empty_tag( 'c:showLeaderLines', @attributes ); +} + + + + __END__ diff --git a/t/regression/chart_data_labels51.t b/t/regression/chart_data_labels51.t new file mode 100644 index 00000000..1ef5c3cf --- /dev/null +++ b/t/regression/chart_data_labels51.t @@ -0,0 +1,92 @@ +############################################################################### +# +# Tests the output of Excel::Writer::XLSX against Excel generated files. +# +# Copyright 2000-2023, John McNamara, jmcnamara@cpan.org +# +# SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later +# + +use lib 't/lib'; +use TestFunctions qw(_compare_xlsx_files _is_deep_diff); +use strict; +use warnings; + +use Test::More tests => 1; + +############################################################################### +# +# Tests setup. +# +my $filename = 'chart_data_labels51.xlsx'; +my $dir = 't/regression/'; +my $got_filename = $dir . "ewx_$filename"; +my $exp_filename = $dir . 'xlsx_files/' . $filename; + +my $ignore_members = []; + +my $ignore_elements = {}; + + +############################################################################### +# +# Test the creation of a simple Excel::Writer::XLSX file. +# +use Excel::Writer::XLSX; + +my $workbook = Excel::Writer::XLSX->new( $got_filename ); +my $worksheet = $workbook->add_worksheet(); +my $chart = $workbook->add_chart( type => 'column', embedded => 1 ); + +# For testing, copy the randomly generated axis ids in the target xlsx file. +$chart->{_axis_ids} = [ 45848832, 47718784 ]; + +my $data = [ + [ 1, 2, 3, 4, 5 ], + [ 2, 4, 6, 8, 10 ], + [ 3, 6, 9, 12, 15 ], + +]; + +$worksheet->write( 'A1', $data ); + +$chart->add_series( + values => '=Sheet1!$A$1:$A$5', + data_labels => { value => 1, position => 'outside_end', leader_lines => 1 }, +); + +$chart->add_series( + values => '=Sheet1!$B$1:$B$5', + data_labels => { value => 1, position => 'inside_base' }, +); + +$chart->add_series( values => '=Sheet1!$C$1:$C$5' ); + +$worksheet->insert_chart( 'E9', $chart ); + +$workbook->close(); + + +############################################################################### +# +# Compare the generated and existing Excel files. +# + +my ( $got, $expected, $caption ) = _compare_xlsx_files( + + $got_filename, + $exp_filename, + $ignore_members, + $ignore_elements, +); + +_is_deep_diff( $got, $expected, $caption ); + + +############################################################################### +# +# Cleanup. +# +unlink $got_filename; + +__END__ diff --git a/t/regression/xlsx_files/chart_data_labels51.xlsx b/t/regression/xlsx_files/chart_data_labels51.xlsx new file mode 100644 index 00000000..9f6934f4 Binary files /dev/null and b/t/regression/xlsx_files/chart_data_labels51.xlsx differ