【问题标题】:Converting Win32::OLE::Variant to perl variable?将 Win32::OLE::Variant 转换为 perl 变量?
【发布时间】:2013-07-06 08:06:12
【问题描述】:

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

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

更新:

我只需要输入use Win32::OLE::VariantWin32::OLE::Variant=SCALAR(0x1214f94) 就变成了可读的答案。

【问题讨论】:

    标签: perl win32ole


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在这种情况下,您得到的是Win32::OLE::Variant 对象,当需要比文本更复杂的类型时,它通常会从 OLE 调用中返回。查看链接页面中列出的方法并选择适当的方法来获取 perl 表示。

      例如,当您在 Variant 对象中有一个日期时,您可以将其作为字符串获取,如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 2014-07-08
        相关资源
        最近更新 更多