2011-08-11 63 views
0

当我从excel文件中提取文本时,它的格式为Win32::OLE::Variant=SCALAR(0x1214f94)。我如何将其转换为Perl变量?当我尝试使用值函数只是打印@data = @{$dataHash{$header}};将Win32 :: OLE :: Variant转换为perl变量?

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"; 
    } 
} 

UPDATE:

所有我需要做的就是进入use Win32::OLE::VariantWin32::OLE::Variant=SCALAR(0x1214f94)成为可读的答案。

回答

1

作为一般规则,当您得到一个值如SCALAR(0x1214f94)时,您正在打印参考/地址而不是值。您可以通过取消引用在变量前面添加一个美元符号:

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

在这种情况下,你越来越是Win32::OLE::Variant对象,也往往是从OLE返回需要更复杂的类型不是文本时调用。请参阅链接页面中列出的方法,并选择适当的方式获取perl表示。

例如,当你在Variant对象的日期,你可以把它作为字符串是这样的:

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