为什么Perl的Spreadsheet :: ParseExcel永远不会从$ parser-> parse('test.xls')返回?

时间:2010-02-03 11:27:26

标签: perl excel parsing spreadsheet

电子表格是Excel 97-2003兼容和权限777

use strict;
use Spreadsheet::ParseExcel;
print "Content-type: text/html\n\n";   
my $parser   = Spreadsheet::ParseExcel->new();
print "<br>gets here:".__LINE__; 
my $workbook = $parser->parse('test.xls');
print "<br>never gets here:".__LINE__; 

5 个答案:

答案 0 :(得分:4)

您使用最新的Spreadsheet::ParseExcel吗?当前版本是0.57。

我看到你将其作为CGI运行。你可以从命令行运行它(在本地,使用相同的测试文件)并检查是否有任何错误消息?

还尝试使用eval(从命令行运行仍然更好)并检查是否定义了$ parser:

print '$parser is undef<br>' unless defined $parser;
eval {
  my $workbook = $parser->parse('test.xls');
};
print "Error message from eval: $@<br>";

尝试其他Excel文件。

如果错误仍然未知并且使用特定的Excel文件,则报告bug tracker中的错误。

答案 1 :(得分:3)

我是Spreadsheet :: ParseExcel的维护者。

parse()方法仅适用于更新版本。建议升级以获取最新的错误修复程序。

较新版本还有error() and error_code()种方法来报告解析错误。

约翰。

答案 2 :(得分:1)

一旦我发现因为使用eval(按照alexandr-ciornii的建议),我试图使用一种不同的方法

对我有用的是什么

$workbook = Spreadsheet::ParseExcel::Workbook->Parse('test.xls');

答案 3 :(得分:0)

听起来像文件路径问题比什么都重要。您是否尝试过将解析函数作为绝对路径?示例:$ parser-&gt; parse('/ usr / local / www / host / htdocs / test.xls');

答案 4 :(得分:0)

如果真的永远不会回来那么它必然会陷入某种无限循环。尝试使用Perl调试器在命令行上运行脚本。

~$ perl -d my_script.pl

请注意,CGI脚本也可以这种方式读取,并且它们接受KEY = VAL形式的命令行参数,如此

~$ perl -d my_cgi.cgi var=foo var2=bar bananas=delicious

如果输入'h',perl调试器会告诉你它接受的命令列表,但最重要的是:

n: go to the next line

s: step into the next line (if it is a sub, otherwise is identical to 'n')

v: view the next few lines (can be used repeatedly)

c: continue to a line or subroutine

如果您发现存在某种无限循环问题,请将其作为http://rt.cpan.org上的错误提交(特别是,此处:https://rt.cpan.org/Public/Dist/Display.html?Name=Spreadsheet-ParseExcel