Perl 读excel常规方法遇到一date格式的cell,结果总是显示Variant(SCALARxxxxx)一堆东东,郁闷不已。
上网一搜,发现Excel的date方式比较特殊,需要不走寻常路。。。
废话不说了,贴代码了。。。其实就是一老外先驱的经验。。。
<code>
use strict;
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::Variant;
use Win32::OLE::NLS qw(:LOCALE :DATE);
$Win32::OLE::Warn = 2; # Throw Errors, Coder must catch them
my $Excel = Win32::OLE-> GetActiveObject('Excel.Application')
|| Win32::OLE-> new('Excel.Application', 'Quit');
my $file = 'variant.xls';
my $Book = $Excel-> Workbooks->Open($file);
my $Sheet = $Book-> Worksheets("Sheet1");
my $date = Variant(VT_DATE, $Sheet-> Range("a1")->{Value});
print "$date/n";
print $date-> Date(DATE_LONGDATE), "/n";
print $date-> Date("ddd',' MMM dd yy"), "/n";
</code>
关于上面的variant,google一下:
Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public 或 Static等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据。
可以直接看API 定义,下面的链接不敢保证有效...:
http://msdn.microsoft.com/en-us/library/documentformat.openxml.varianttypes.variant%28office.14%29.aspx