2010-02-03 7 views
1

La feuille de calcul est Excel 97-2003 compatible et autorisations 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__; 

Répondre

4

Utilisez-vous les dernières Spreadsheet::ParseExcel? La version actuelle est 0.57. Je vois que vous exécutez cela en tant que CGI.

Pouvez-vous l'exécuter à partir de la ligne de commande (localement, avec le même fichier de test) et vérifier s'il y a un message d'erreur?

Essayez également d'utiliser eval (en cours d'exécution de la ligne de commande est encore mieux) et vérifier si l'analyseur $ est défini:

print '$parser is undef<br>' unless defined $parser; 
eval { 
    my $workbook = $parser->parse('test.xls'); 
}; 
print "Error message from eval: [email protected]<br>"; 

Essayez un autre fichier Excel.

Si l'erreur est toujours inconnue et avec un fichier Excel spécifique, signaler un bogue dans bug tracker.

+1

blush: - Message d'erreur de eval: Impossible de localiser la méthode d'objet "parse" par paquet "Spreadsheet :: ParseExcel" à ... grâce – zzapper

0

Sonne comme un problème de chemin de fichier plus que tout. Avez-vous essayé de donner à la fonction d'analyse un chemin absolu? Exemple: $ parser-> parse ('/ usr/local/www/host/htdocs/test.xls');

0

S'il ne revient jamais vraiment, il doit être bloqué dans une sorte de boucle infinie. Essayez d'exécuter votre script sur la ligne de commande à l'aide du débogueur Perl.

~$ perl -d my_script.pl 

Notez que les scripts CGI peuvent également être lus de cette façon, et qu'ils acceptent les arguments de ligne de commande sous la forme KEY = VAL comme si

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

Le débogueur Perl vous indiquera une liste de il accepte les commandes si vous tapez « h », mais les plus importants sont:

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 

Si vous trouvez qu'il ya une sorte de problème de boucle infinie, puis le soumettre comme un bug sur http://rt.cpan.org (specificially, ici: https://rt.cpan.org/Public/Dist/Display.html?Name=Spreadsheet-ParseExcel)

1

Une fois que j'ai trouvé que je cherchais à utiliser une méthode Inexistant grâce à l'utilisation de eval (tel que recommandé par alexandr-ciornii)

Qu'est-ce que le travail pour moi

$workbook = Spreadsheet::ParseExcel::Workbook->Parse('test.xls'); 
+0

La page CPAN ne dit pas parse Parse, donc ce n'est pas ta faute. –

3

I suis le mainteneur de Spreadsheet :: ParseExcel.

La méthode parse() est uniquement disponible dans les versions plus récentes. Une mise à niveau est recommandée pour récupérer les dernières corrections de bogues.

Les versions plus récentes ont également des méthodes error() and error_code() pour signaler les erreurs d'analyse.

John.

Questions connexes