我有以下代码:
my $workbook = Excel::Writer::XLSX->new( 'a_simple.xlsx' );
my $worksheet = $workbook->add_worksheet();
my @chart_performance1 = $workbook->add_chart( type => 'column', embedded => 1 );
my $no_of_titles = 3;
for ( my $no_of = 0; $no_of < $no_of_titles; $no_of++ ) {
$chart_performance1[ $no_of ]->add_series(
name => $chart_heading[ 0 ],
categories => [ 'Sheet1', $array_game_titles[ $no_of ] , $row_range_max , 0, 0 ],
values => [ 'Sheet1', $array_game_titles[ $no_of ] , $row_range_max , 1, 1 ],
);
}
当我运行它时,我收到错误:
Can't call method "add_series" on an undefined value
为什么?
答案 0 :(得分:3)
这一行
my @chart_performance1 = $workbook->add_chart( type => 'column', embedded => 1 );
看起来不对。 add_chart
方法返回单个Excel::Writer::XLSX::Chart
对象,因此结果通常分配给标量,而不是数组。目前还不清楚你在问什么,但是如果你想创建一个绘制三个系列数据的图表,那么你想要更像的东西:
my $chart = $workbook->add_chart( type => 'column', embedded => 1 );
...
for ( my $no_of = 0; $no_of < $no_of_titles; $no_of++ ) {
$chart->add_series( ... );
}
答案 1 :(得分:0)
得到我的答案,只需要声明数组而不是在同一个实例中使用add_chart方法声明和定义数组“chart_performance”。由于add_chart方法返回单个对象,我收到错误。感谢BTW的帮助。
my $workbook = Excel::Writer::XLSX->new( 'a_simple.xlsx' );
my $worksheet = $workbook->add_worksheet();
my @chart_performance;
my $no_of_titles = 3;
for ( my $no_of = 0; $no_of < $no_of_titles; $no_of++ ) {
$chart_performance[ $no_of ] = $workbook->add_chart( type => 'column', embedded => 1);
$chart_performance[ $no_of ]->add_series(
name => $chart_heading[ 0 ],
categories => [ 'Sheet1', $array_row[ $no_of ], $array_col[ $no_of ], 0, 0 ],
values => [ 'Sheet1', $array_row[ $no_of ], $array_col[ $no_of ], 1, 1 ],
);
}