到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