fiftythr Ответов: 2

Преобразование Php из 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");
}

Заранее спасибо.

Что я уже пробовал:

Я попытался поиграть с Делиметром и корпусом, но безрезультатно.
$writer->setDelimiter(",");
$writer->setEnclosure("");

2 Ответов

Рейтинг:
2

Richard MacCutchan

Время (и даты) хранятся в Excel в виде чисел с плавающей запятой, поэтому вам нужно будет преобразовать их в соответствующие значения. Видеть Даты И Время В Excel[^].


Рейтинг:
1

Patrice T

Просто: Excel обрабатывает время в часах и минутах как долю дня.
1 день кодируется как 1 в excel, вы только что сказали Excel отформатировать значение как hh:mm.
Таким образом, 1 день-это 24 часа, или 1440 минут, или 8640 секунд.
Так что 0.1 в сутки =&ГТ; 144 минуты =&ГТ; 2 часа и 24 минуты.

Если вы хотите преобразовать доли дней в Excel в часы и минуты в CSV, вам нужно преобразовать это значение самостоятельно.