1

スプレッドシートは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__; 
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

何よりもファイルパスの問題のように聞こえます。parse 関数に絶対パスを指定してみましたか? 例: $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 に答える