2017-08-05 11 views
1

XLSファイルをCSVに変換したいのですが、1列以外はすべて問題ありません。私が間違っているのは何PHPExcelからXLSをCSVに変換するとデータが破棄されます

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"); 
} 

とどのように私は、所望の出力を得ることができます:ここでは

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

は、変換を行う機能である:

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

はとして出力されていますか?前もって感謝します。

答えて

2

あなたは

$objReader->setReadDataOnly(true); 

を設定しているので、あなたは差別唯一のものである数値書式マスクが含まれていることをXLSファイルから

をフォーマット情報のいずれかを読み取ることがないPHPExcelをtelingしていますMS Excelファイルの日付/時刻値からの浮動小数点数。

フォーマット情報もロードすると、PHPExcelはセル値が日付であると認識し、それに応じてフォーマットします。それ以外の場合は浮動小数点数としてしか表示できません。あなたの時間のための

だから、だけでなく、それはフォーマット情報をロードしてみましょう、だけデータをロードするためにPHPExcelを教えていない

+0

それはそれを修正しました、ありがとう!私は、プログラムが空行を読み込まないようにすることを考えて、その行を追加しました。 – Adrianb

2

出力が「間違っていません」というのは、番号を別の形式で保存しているだけです。

何をしているかは、分単位で60分を掛け、秒数を加えて1440(24時間×60分)で割ったものです。それはしばしばフォーマットである秒数ではなく、1日の数分の1です。

小数点を必要な時間に変換するには、1440を掛けて、分数を得るには60で整数分を、秒数を得るにはmod60を行います。

+0

おかげで、マーク・ベイカーの答えは私のためにトリックをしました。しかし、私はあなたの解決策を論理問題として覚えています。 – Adrianb

関連する問題