2010-02-23 40 views
1

當使用Spreadsheet::WriteExcel創建電子表格中的圖表添加到我的Excel電子表格,它創建的文件保持想出一個錯誤讀取爲什麼我不能圖表Perl的電子表格:: WriteExcel

Excel中發現「Report.xls」中無法讀取的內容

並詢問我是否想恢復它。我已經工作了,這個問題行代碼是我確實插入圖表,與

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

如果我註釋掉這一行,該數據是好的(當然,沒有圖表)。其餘的相關代碼如下所示(這裏沒有定義的變量在代碼的早期定義,如$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"); 

我在這裏完全損失,我找不到任何答案。請幫助!

+1

總是試圖展示一個完整的工作程序來顯示行爲。以這種方式幫助你更容易。 :) – 2010-02-23 21:56:33

+0

感謝您的提示。我認爲其餘的代碼工作正常,所以它只會混亂我的帖子,但我會記住,以後的帖子:) – ryantmer 2010-02-23 22:33:23

回答

4

望着表情:

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

$lastrow一些約定Spreadsheet::WriteExcel或者是從腳本變量被插值到字符串表達式?如果這是你的變種,那麼這段代碼可能不會做你想做單引號裏面的東西,你可能想使用類似

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

你先生(或女士),是一個天才。 '$ lastrow'確實是一個早先定義的變量。我最初認爲這個問題是出現在其中的一個問題,但不知何故排除了......謝謝! =) – ryantmer 2010-02-23 18:14:01

1

的問題,因爲mobrule正確地指出,是你使用的是單系列字符串中的引號和$lastrow不會被插值。

使用xl_range_formula()實用程序函數以編程方式生成圖表系列字符串時,可以完全避免這些類型的問題。

$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文檔的以下部分了解詳情:Working with Cell Ranges

相關問題