1

该电子表格与 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__; 
4

5 回答 5

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 文件,请在错误跟踪器中报告错误。

于 2010-02-03T11:40:59.027 回答
3

我是 Spreadsheet::ParseExcel 的维护者。

parse() 方法仅在更新的版本中可用。建议升级以获取最新的错误修复。

较新的版本也有error() 和 error_code()方法来报告解析错误。

约翰。

于 2010-02-03T16:15:39.707 回答
1

一旦我发现我正在尝试使用不存在的方法,这要归功于使用 eval (如 alexandr-ciornii 推荐的那样)

什么对我有用

$workbook = Spreadsheet::ParseExcel::Workbook->Parse('test.xls');
于 2010-02-03T12:37:16.073 回答
0

听起来更像是文件路径问题。您是否尝试过为解析函数提供绝对路径?示例: $parser->parse('/usr/local/www/host/htdocs/test.xls');

于 2010-02-03T11:34:35.440 回答
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 )

于 2010-02-03T12:00:03.323 回答