Почему Perl Spreadsheet :: ParseExcel никогда не возвращается из $ parser-> parse ('test.xls')? - PullRequest
1 голос
/ 03 февраля 2010

Электронная таблица совместима с 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 ]

4 голосов
/ 03 февраля 2010

Используете ли вы последнюю электронную таблицу :: 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 .

3 голосов
/ 03 февраля 2010

Я поддерживаю Spreadsheet :: ParseExcel.

Метод parse () доступен только в более поздних версиях.Обновление рекомендуется для получения последних исправлений ошибок.

В более новых версиях также есть методы error () и error_code () для сообщения об ошибках анализа.

Джон.

1 голос
/ 03 февраля 2010

Однажды я обнаружил, что пытался использовать несуществующий метод благодаря использованию eval (согласно рекомендации alexandr-ciornii)

Что сработало для меня

$workbook = Spreadsheet::ParseExcel::Workbook->Parse('test.xls');
0 голосов
/ 03 февраля 2010

Если он действительно никогда не возвращается, значит, он застревает в каком-то бесконечном цикле. Попробуйте запустить скрипт в командной строке с помощью отладчика Perl.

~$ perl -d my_script.pl

Обратите внимание, что сценарии CGI также могут быть прочитаны таким образом, и что они принимают аргументы командной строки в форме KEY = VAL, например, так:

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

Отладчик perl сообщит вам список команд, которые он принимает, если вы наберете 'h', но наиболее важные из них:

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)

0 голосов
/ 03 февраля 2010

Похоже, проблема пути к файлу больше всего на свете. Вы пытались дать функции разбора абсолютный путь? Пример: $ parser-> parse ('/ usr / local / www / host / htdocs / test.xls');

...