2011-02-01 14 views
6
foreach my $row (1..$end) 
{ 
    foreach my $col (3..27) 
    { 
    # skip empty cells 
    next unless defined 
    $worksheet->Cells($row,$col)->{'Value'}; 

    # print out the contents of a cell 
    $var = $worksheet->Cells($row,$col)->{'Value'};  
    push @dates, $var; 

    print $var; #this prints the value just fine 
    } 
} 

my %hash; 
$hash{'first'} = \@dates; 
print Dumper \%hash; #This prints object information 

私はモジュールのOLEをPerlに使用していますが、ワークシートから取得したすべての値と$ varを出力すると期待値が得られます。ハッシュそれは印刷する:PerlのData :: Dumperは値の代わりにオブジェクトを表示します

'first' => [ 
bless(do{\(my $o = 15375916)}, 'OLE::Variant'), 
bless(do{\(my $o = 15372208)}, 'OLE::Variant'), 

など。私はハッシュについて何かを理解してはいけません、なぜなら私は本当にここで困惑しているからです。 print $varはオブジェクトを文字列に変換する暗黙のOLE::Variantメソッドを呼び出している間

答えて

10

push @dates, $varは、あなたの@datesアレイにOLE::Variantオブジェクトをプッシュします。

あなたも@datesだけで基本となる文字列値ではなく、オブジェクト自体を含めたい場合は、@dates配列に入れる前に、日付オブジェクトを文字列化します

push @dates, "$var"; 

を言います。

+0

私はそれがそれのような単純なものだと思った。ありがとう! – Melissa

3

$worksheet->Cells($row,$col)->{'Value'}呼び出しによって返される値は、本質的にほとんどC/C++のオブジェクトであり、Perlはメモリ上の位置(大きな整数として表示される)によって表されるオブジェクト上のハンドルしか持ちません。基盤となるC/C++ライブラリをラップする多くのCPANモジュールは、同じように動作します(XML :: LibXMLは、そのような例にあります)。短い答えは、このオブジェクトであり、残念なことにData :: Dumperで見ることができます。それらは本質的に祝福されたスカラ参照であり、それらのすべての操作は、基礎となる参照自体の実際の値ではなくメソッドを通じて行われます。

+0

+1優れた説明;あまりにも高いレベルではなく、あまりにも低いレベルではない – daxim

関連する問題