【问题标题】:Change date format during conversion from xlsx to csv with PHPExcel使用 PHPExcel 从 xlsx 转换为 csv 期间更改日期格式
【发布时间】:2018-10-10 19:19:32
【问题描述】:

我正在使用 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/2018”的日期,我一直得到“12-20-18”。

编辑:

建议的问题答案副本如何在特定单元格上设置格式。在我的情况下,格式已经设置,但它们不能正常工作。

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

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

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

【问题讨论】:

标签: php excel phpexcel


【解决方案1】:

我正在寻找一种方法来为所有日期单元格设置格式代码,而无需遍历所有单元格。我从来没有找到那个解决方案。这是我最终使用的。

$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 );

【讨论】:

  • 您可以将自己的答案标记为已接受。有用。谢谢
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2020-10-27
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多