我有一批excel文件,里面的行像
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.plhttps://dl.dropboxusercontent.com/u/58760/softwareGrr/junk.xls
3条答案
按热度按时间fxnxkyjh1#
如果你想在perl中将Excel日期序列值格式36537,21转换为时间/日期变量,那么你可以使用自己的函数来转换日期。
好好享受吧!
ar7v8xwq2#
有问题的线路是
除非有人能给出更好的解释,否则我将把这看作是一个bug。
nnsrf1az3#