2017-08-05 64 views
1

我想將XLS文件轉換爲CSV,除1列外,一切正常。PHPExcel從XLS轉換爲CSV破壞數據

Duration (min., sec.) 
2:24 
4:20 
4:20 
4:20 
3:54 

輸出爲:

Duration(min., sec.) 
0.1 
0.180555556 
0.180555556 
0.180555556 
0.1625 

這裏是一個執行轉換功能:

function convertXLStoCSV($infile, $outfile) // the function that converts the file 
{ 
    $fileType = PHPExcel_IOFactory::identify($infile); 
    $objReader = PHPExcel_IOFactory::createReader($fileType); 
    $objReader->setReadDataOnly(true); 
    $objPHPExcel = $objReader->load($infile); 

    $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV'); 
    $writer->setDelimiter(","); 
    //$writer->setEnclosure(""); 
    //$writer->save("test123.csv"); 
    foreach ($objPHPExcel->getWorksheetIterator() as $workSheetIndex => $worksheet) { 
     $objPHPExcel->setActiveSheetIndex($workSheetIndex); 
     $writer->setSheetIndex($workSheetIndex); 
     $writer->save('converted/' . $outfile ."_" . $worksheet->getTitle() . ".csv"); 
} 

我在做什麼錯了,我怎樣才能得到所需的輸出?先謝謝你。

回答

2

因爲你設置

$objReader->setReadDataOnly(true); 

你特靈PHPExcel不會從xls文件

這包括數字格式掩碼是唯一區別於讀取任何的格式化信息MS Excel文件中日期/時間值的浮點數。

如果您也加載格式化信息,PHPExcel可以識別單元格值應該是日期,並相應地設置格式,否則它只能將其顯示爲浮點數。

所以,不要告訴PHPExcel只加載數據,讓它加載格式信息以及

+0

修復它,非常感謝!我添加了這一行,認爲它會阻止程序讀取空行。 – Adrianb

2

輸出不是'錯誤',它只是以不同的格式存儲數字。

它在做什麼是乘以60分鐘,然後加上秒數,然後除以1440(24小時* 60分鐘)。所以它只是一天的一小部分,而不是秒數,這通常是格式。

若要將十進制轉換回所需的時間,乘以1440,然後執行整數除以60得到分鐘數,並使用mod 60得到秒數。

+0

感謝您的時間,馬克·貝克的答案的伎倆我。但我會記住你的解決方案也是一個邏輯問題。 – Adrianb