从 XLS 转换为 CSV 的 PHPExcel 会破坏数据
PHPExcel converting from XLS to CSV destroys data
我想将 XLS 文件转换为 CSV,除 1 列外一切正常。
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");
}
我做错了什么,我怎样才能得到想要的输出?提前谢谢你。
输出不是 'wrong' 它只是以不同的格式存储数字。
它所做的是将分钟数乘以 60,再加上秒数,然后除以 1440(24 小时 * 60 分钟)。所以它是一天的一小部分,而不是秒数,这是通常的格式。
要将小数转换回您想要的时间,请乘以 1440,然后用整数除以 60 得到分钟数,mod60 得到秒数。
因为你正在设置
$objReader->setReadDataOnly(true);
你告诉 PHPExcel 不要从 xls 文件中读取任何格式信息
这包括数字格式掩码,它是唯一区分浮点数和 MS Excel 文件中的 date/time 值的东西。
如果你也加载格式信息,那么PHPExcel可以识别单元格值应该是日期,并相应地格式化它,否则它只能显示为一个浮点数。
所以不要告诉PHPExcel只加载数据,让它也加载格式信息
我想将 XLS 文件转换为 CSV,除 1 列外一切正常。
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");
}
我做错了什么,我怎样才能得到想要的输出?提前谢谢你。
输出不是 'wrong' 它只是以不同的格式存储数字。
它所做的是将分钟数乘以 60,再加上秒数,然后除以 1440(24 小时 * 60 分钟)。所以它是一天的一小部分,而不是秒数,这是通常的格式。
要将小数转换回您想要的时间,请乘以 1440,然后用整数除以 60 得到分钟数,mod60 得到秒数。
因为你正在设置
$objReader->setReadDataOnly(true);
你告诉 PHPExcel 不要从 xls 文件中读取任何格式信息
这包括数字格式掩码,它是唯一区分浮点数和 MS Excel 文件中的 date/time 值的东西。
如果你也加载格式信息,那么PHPExcel可以识别单元格值应该是日期,并相应地格式化它,否则它只能显示为一个浮点数。
所以不要告诉PHPExcel只加载数据,让它也加载格式信息