Почему Perl Spreadsheet::ParseExcel никогда не возвращается из $parser-›parse('test.xls')?

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

person zzapper    schedule 03.02.2010    source источник


Ответы (5)


Используете ли вы последнюю версию 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, сообщите об ошибке в средство отслеживания ошибок.

person Alexandr Ciornii    schedule 03.02.2010
comment
румянец: - Сообщение об ошибке от eval: не удается найти метод анализа объекта с помощью пакета Spreadsheet::ParseExcel в ... спасибо - person zzapper; 03.02.2010

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

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

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

Джон.

person jmcnamara    schedule 03.02.2010

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

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

$workbook = Spreadsheet::ParseExcel::Workbook->Parse('test.xls');
person zzapper    schedule 03.02.2010
comment
На странице cpan написано, что parse not Parse, так что это не ваша вина. - person Chris Huang-Leaver; 03.02.2010

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

person DoctorLouie    schedule 03.02.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)

person Kaoru    schedule 03.02.2010