Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHPExcel将xlsx转换为csv期间更改日期格式_Php_Excel_Phpexcel - Fatal编程技术网

使用PHPExcel将xlsx转换为csv期间更改日期格式

使用PHPExcel将xlsx转换为csv期间更改日期格式,php,excel,phpexcel,Php,Excel,Phpexcel,我正在使用PHPExcel将各种xls和xlsx电子表格转换为csv文件。原始电子表格有各种格式的日期,但我需要它们在csv文件中保持一致的格式 下面是转换代码的相关部分 $filePath = "fromFile.xlsx"; $csvPath = "toFile.csv"; PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP); $reader = PHPExcel_IOFactory::load( $filePath );

我正在使用PHPExcel将各种xls和xlsx电子表格转换为csv文件。原始电子表格有各种格式的日期,但我需要它们在csv文件中保持一致的格式

下面是转换代码的相关部分

$filePath = "fromFile.xlsx"; 
$csvPath = "toFile.csv";

PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);
$reader = PHPExcel_IOFactory::load( $filePath );

$writer = PHPExcel_IOFactory::createWriter( $reader, 'CSV' );
$writer->setDelimiter(",");
$writer->setEnclosure('"');
$writer->setSheetIndex(0);

$writer->save( $csvPath );
我看到原始电子表格中格式类似于mm/dd/yyyy的日期被转换为mm-dd-yy。我翻阅了文档和代码,寻找设置格式的地方,但没有找到明确的答案

我的测试文件使用excel默认的短日期格式*3/14/2012。 我在excel文件中始终得到“12-20-18”的日期,该日期在excel文件中显示为“12/20/2018”

编辑:

建议的问题答案副本如何在特定单元格上设置格式。在我的例子中,格式已经设置好了,但是它们不能正常工作

我发现这个问题是特定于“*mm/dd/yyyy”格式的。由于某些原因,当写入csv文件时,此特定格式会更改为mm dd yy

Excel的“格式单元格”对话框显示“以星号开头的日期格式响应为操作系统指定的区域日期和时间设置的更改。”


有没有比逐单元格搜索日期字段并覆盖其格式更优雅的解决方案

你可以使用这个解决方案,它适合我。 在写入CSV之前,将单元格格式化为正确的日期格式。假设在xlsx文件中,日期的列名是“F”。跳过第一行如果您使用第一行作为标题,则从第二行开始

$highestRow = $reader->setActiveSheetIndex(0)->getHighestRow(); 
            $reader->getActiveSheet()  ->getStyle('F2:F'.$highestRow) ->getNumberFormat()  ->setFormatCode('m/d/yyyy');

我在寻找一种方法,为所有日期单元格设置格式代码,而不必遍历所有单元格。我从未找到解决办法。这是我最后使用的

$filePath = "fromFile.xlsx"; 
$csvPath = "toFile.csv";

PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);
$reader = PHPExcel_IOFactory::load( $filePath );

foreach( $reader->getActiveSheet()->getRowIterator(1) as $row ){
    foreach( $row->getCellIterator() as $cell ){
        if( PHPExcel_Shared_Date::isDateTime($cell)){
            $cell->getStyle()->getNumberFormat()->setFormatCode("mm/dd/yyyy" );
        }
    }
}

$writer = PHPExcel_IOFactory::createWriter( $reader, 'CSV' );
$writer->setDelimiter(",");
$writer->setEnclosure('"');
$writer->setSheetIndex(0);

$writer->save( $csvPath );

您可以将自己的答案标记为已接受答案。它起作用了。谢谢