为什么我不能使用Perl的Spreadsheet :: WriteExcel将图表添加到Excel电子表格中

当使用Spreadsheet :: WriteExcel在电子表格中创build图表时,它创build的文件不断出现读错误

Excel在“Report.xls”中发现不可读的内容

并问我是否要恢复它。 我已经解决了代码中的问题行是我实际插入图表的地方

$chartworksheet->insert_chart(0, 0, $linegraph, 10, 10); 

如果我注释掉这一行,数据是好的(当然,没有图表)。 其余的相关代码如下(这里没有定义的variables是在代码的前面定义的,比如$lastrow )。

 printf("Creating\n"); my $chartworksheet = $workbook->add_worksheet('Graph'); my $linegraph = $workbook->add_chart(type => 'line', embedded => 1); $linegraph->add_series(values => '=Data!$D$2:$D$lastrow', name => 'Column1'); $linegraph->add_series(values => '=Data!$E$2:$E$lastrow', name => 'Column2'); $linegraph->add_series(values => '=Data!$G$2:$G$lastrow', name => 'Column3'); $linegraph->add_series(values => '=Data!$H$2:$H$lastrow', name => 'Column4'); $linegraph->set_x_axis(name => 'x-axis'); $linegraph->set_y_axis(name => 'y-axis'); $linegraph->set_title(name => 'title'); $linegraph->set_legend(position => 'bottom'); $chartworksheet->activate(); $chartworksheet->insert_chart(0, 0, $linegraph, 10, 10); printf("Finished\n"); 

我在这里完全失败,我找不到任何答案。 请帮助!

看一下expression式:

 '=Data!$D$2:$D$lastrow' 

Spreadsheet::WriteExcel$lastrow约定,还是从脚本中插入到stringexpression式中的variables? 如果这是你的var,那么这个代码可能不会做你想要的内部单引号,你可能想要使用类似的东西

 '=Data!$D$2:$D' . $lastrow "=Data!\$D\$2:\$D:$lastrow" sprintf('=Data!$D2:$D%d',$lastrow) 

这个问题,正如mobrule正确指出的那样,是你在串串上使用了单引号,而$lastrow没有插入。

使用xl_range_formula()实用程序函数以编程方式生成图表系列string时,可以完全避免这些types的问题。

 $chart->add_series( categories => xl_range_formula( 'Sheet1', 1, 9, 0, 0 ), values => xl_range_formula( 'Sheet1', 1, 9, 1, 1 ), ); # Which is the same as: $chart->add_series( categories => '=Sheet1!$A$2:$A$10', values => '=Sheet1!$B$2:$B$10', ); 

有关更多详细信息,请参阅WriteExcel文档的以下部分: 使用单元格范围 。