2011-08-11 6 views
0

Quand j'extraire le texte à partir d'un fichier Excel, il vient comme Win32::OLE::Variant=SCALAR(0x1214f94). Comment puis-je convertir en une variable Perl? Lorsque je tente d'utiliser la fonction de valeur est juste imprime @data = @{$dataHash{$header}};Conversion Win32 :: OLE :: Variant à Perl variable?

my ($refs,$rows,$header) = &extract; 

my %dataHash = %{$refs}; 
print "Keys:",keys %dataHash,"\n"; 
my @headers = @{$header}; 

my @test = @{$dataHash{'Date'}}; 

foreach my $scalar (@test){ 
    print $scalar; 
} 

foreach my $header (@headers){ 
    print "Checking Header: $header\n"; 

    @data = @{$dataHash{$header}}; 

    print $data; 
    foreach my $scalar (@data){ 
     print FH "$scalar\n"; 
    } 
} 

MISE À JOUR:

Tout ce que je devais faire était entrer use Win32::OLE::Variant et Win32::OLE::Variant=SCALAR(0x1214f94) est devenu une réponse lisible.

Répondre

1

En règle générale, lorsque vous obtenez une valeur telle que SCALAR(0x1214f94), vous imprimez une référence/adresse, pas une valeur. Vous pouvez déréférencer en ajoutant un signe dollar devant la variable:

$a = \$b; 
$b = 1; 
print $a; # prints something like SCALAR(0x1214f94) 
print $$a; # prints 1 
1

Dans ce cas, ce que vous obtenez est l'objet Win32::OLE::Variant, qui est souvent retourné de OLE appels lorsque le type plus complexe que le texte est nécessaire. Voir les méthodes énumérées à la page liée et choisissez appropriée pour obtenir la représentation perl.

Par exemple, lorsque vous avez une date dans l'objet Variant, vous pouvez l'obtenir sous forme de chaîne comme ceci:

my $string = $date->Date("yyyy-MM-dd"); 
Questions connexes