2013-07-10 58 views
3

我正在使用Perl模塊Spreadsheet :: XLSX解析Excel電子表格。部分數據是這樣的:使用Excel :: XLSX解析Perl中的電子表格

Time  A1  A2  A3  
    0m14m35  0.12 0.13 0.14 
    0m29m35  0.15 0.16 0.17 

下面是部分代碼:

foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) { 

    foreach my $col ($sheet->{MinCol} .. $sheet->{MaxCol}) { 

     my $cell = $sheet->{Cells}[$row][$col]; 
     my $val = $cell->{Val} || ""; 
    } 
} 

的問題是,時間值轉換成浮點數:

'0m14m35' becomes: 0.0101273148148148 
'0m29m35' becomes: 0.0205439814814815 

我怎樣才能保持時間字符串是一個字符串?

謝謝! L.

回答

8

$cell->{Val}是未格式化的值(與$cell->unformatted()相同)。嘗試獲得$cell->value()(與$cell-{_Value}相同),這是格式化的值;

Excel將日期存儲爲浮點數,因此如果要格式化這些日期,可以使用Spreadsheet :: ParseExcel :: Utility中的ExcelFmt()函數,並且您將要使用未格式化的值作爲參數之一該功能。你甚至可以得到格式參數$cell->get_format()

+0

謝謝,但現在我得到一個格式化的浮點數!從調試器:$ cell - > {Val} = 0.0101273148148148; $ cell-> value()= 0.01 – LKramer

+0

@LKramer - 抱歉,正在查看列。答案已更新。 – runrig

+0

這樣做,非常感謝! – LKramer

相關問題