phpExcel xls到csv转换正在将日期更改为原始日期

phpExcel xls到csv转换正在将日期更改为原始日期,php,phpexcel,Php,Phpexcel,我使用phpExcel将xls文件转换为csv的功能是将日期字段中的值更改为raw。如何避免这种情况发生 功能如下所示 function convertXLStoCSV($infile,$outfile) { $fileType = PHPExcel_IOFactory::identify($infile); $objReader = PHPExcel_IOFactory::createReader($fileType); $objReader->setReadD

我使用phpExcel将xls文件转换为csv的功能是将日期字段中的值更改为raw。如何避免这种情况发生

功能如下所示

function convertXLStoCSV($infile,$outfile)
{
    $fileType = PHPExcel_IOFactory::identify($infile);
    $objReader = PHPExcel_IOFactory::createReader($fileType);

    $objReader->setReadDataOnly(true);   
    $objPHPExcel = $objReader->load($infile);    

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
    $objWriter->save($outfile);
}
xls文件中的日期格式为:2017年1月16日00:00:00
输出csv文件的日期格式为:42751.0104166667

我尝试在文件/Classes/PHPExcel/Style/NumberFormat.php中进行更改

        self::$_builtInFormats[22] = 'm/d/yy h:mm'; 
        changed to 
        self::$_builtInFormats[22] = 'mm.dd.yyyy hh:mm:ss';
但这并不是魔术

你的问题是

$objReader->setReadDataOnly(true);  
它明确地告诉PHPExcel将单元格数据作为原始数据读取,而不使用任何样式信息(例如数字格式屏蔽)


只需注释掉那句话

谢谢,注释这句话没有帮助。输出仍然是相同的,这是非常奇怪的,因为CSV编写器被显式设置为预先计算所有公式,并使用为每个单元格定义的数字格式掩码格式化输出;所以它当然不应该输出原始的datetimestamp值,我只是仔细检查了代码以确认。。。所以我不明白你是怎么得到原始价值的你是对的。如果我在转换前保存excel工作表,它会工作。但是,当我保存它时,会更改所有其他字段的小数位数。这是我未触及的文件注释$objReader->setReadDataOnly(true);正在删除所有其他字段的小数位数显示的小数位数也取决于应用于单元格的格式掩码,没有格式掩码(setReadDataOnly为true时不加载),则PHP将使用数据类型整数作为加载为整数的值,然后应将其显示为整数;但是从文件加载的浮点值应该基于php.ini的精度设置进行渲染