2011-08-11 137 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");