到csv我有线条一批Excel文件一样阅读日期通过Perl的
1/13/04 21
我想将它们转换为.csv,但发现该行被转换成
36537,21
事实证明,这是excel存储规则的一个副作用。 Excel应该将日期存储为自1900年1月1日以来的日期。按照该规则,这是错误的整数,对应于2001年1月12日和2004年1月13日(即1/13/04
表示的日期)。
- Excel究竟是怎么犯这个错误的?
- 我怎样才能得到原始的未格式化的值,在这里避开转换?
这是代码的草图:
my $xlsparser = Spreadsheet::ParseExcel->new();
my $xlsbook = $xlsparser->Parse('xls_test.xls');
my $xls = $xlsbook->{Worksheet}[0];
my $csv = '';
# then a loop over rows and columns with...
my $cell = $xls->get_cell($row, $col);
$cellcon = $cell->unformatted();
$csv .= $cellcon;
如果我的阐述不够清晰,或者您不能重现该问题,这里是一个最小数据集和脚本重现这对我来说:
https://dl.dropboxusercontent.com/u/58760/softwareGrr/xls_example.pl https://dl.dropboxusercontent.com/u/58760/softwareGrr/junk.xls
我无法重现。 '01/13/04'在Excel中被转换为'37999'。你使用什么版本? – Degustaf 2014-11-14 20:56:46
对于我在做的事情,我不应该使用Excel;一切都在Perl(版本5.16.3,Win x64,Spreadsheet :: ParseExcel包的0.65版本)中。我正在看的文件根据其元数据采用Excel 97-2003格式。我会看看我是否可以从(机密)文件中摘录一个日期并看到相同的结果(在这种情况下,我将把它放在Dropbox上)。 – Frank 2014-11-14 21:14:29
@Degustaf我添加了一个指向我的计算机上重现问题的文件的链接。 – Frank 2014-11-14 21:25:58