代码之家  ›  专栏  ›  技术社区  ›  zzapper

为什么Perl的电子表格::ParseExcel从不从$Parser->Parse(“test.xls”)返回?

  •  1
  • zzapper  · 技术社区  · 14 年前

    电子表格与Excel97-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 回复  |  直到 14 年前
        1
  •  4
  •   brian d foy JRFerguson    14 年前

    你用最新的吗 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 .

        2
  •  3
  •   jmcnamara    14 年前

    我是电子表格::ParseExcel的维护者。

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

    新版本也有 error() and error_code() 报告分析错误的方法。

    厕所。

        3
  •  1
  •   zzapper    14 年前

    一旦我发现我正试图使用一种不精确的方法,这要归功于使用eval(Alexandr Ciornii推荐的方法)。

    什么对我有用

    $workbook = Spreadsheet::ParseExcel::Workbook->Parse('test.xls');
    
        4
  •  0
  •   DoctorLouie    14 年前

    听起来更像是文件路径问题。你试过给解析函数一个绝对路径吗?示例:$parser->parse(“/usr/local/www/host/htdocs/test.xls”);

        5
  •  0
  •   Kaoru    14 年前

    如果它真的永远不会回来,那么它一定会陷入某种无限循环中。尝试使用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
    

    如果您发现存在某种无限循环问题,那么将其作为bug提交到 http://rt.cpan.org (具体来说,这里: https://rt.cpan.org/Public/Dist/Display.html?Name=Spreadsheet-ParseExcel )