电子表格是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__;
答案 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)