phpexcel PHPExcel_Shared_Date :: isDateTime无效

时间:2015-08-11 20:11:25

标签: phpexcel

文件是xlsx,列格式是日期MM-DD-YYYY

我尝试了几种不同的方法来确定该值是否为日期。

PHPExcel_Shared_Date :: isDateTime只是不起作用,不知道为什么。数据将保存在数据库中,并显示数字:

41137 41618 42206 42076 41137 42206 41137 41988

我的代码:

$inputFileType = PHPExcel_IOFactory::identify($fullFilePath);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(false);

$objPHPExcel = $objReader->load($fullFilePath);
$objPHPExcel->setActiveSheetIndex(0);

$worksheetIndex = 1;
$worksheetName = '';
$actualRows = 0;

foreach($objPHPExcel->getWorksheetIterator() as $worksheet)
{
    $lineNumber = 1;
    $worksheetName = $worksheet->getTitle();
    $columnSum = array();

    foreach($worksheet->getRowIterator() as $row)
    {
        $cellIterator = $row->getCellIterator();
        $cellIterator->setIterateOnlyExistingCells(true); // Loop all cells, even if it is not set = true else set to false

        $columnNumber = 1;

        foreach($cellIterator as $cell)
        {

            $dataValue = $cell->getCalculatedValue();
            //$dataValue = $cell->getFormattedValue();

            if(!empty($dataValue))
            {
                if(PHPExcel_Shared_Date::isDateTime($cell))
                {
                    $dataValue = date('Y-m-d H', PHPExcel_Shared_Date::ExcelToPHP($dataValue));
                }
                else
                {
                    // do something
                }
            }
        }
    }   
} 

1 个答案:

答案 0 :(得分:0)

分析文件时,存在一些问题......它没有在MS的Open XML SDK 2.0生产力工具下彻底验证。

初始问题(应该在PHPExcel中触发加载程序错误)是SheetView缩放比例,它应该是最小值1.通过编辑Classes/PHPExcel/Worksheet/SheetView.php并修改{{1}可以“绕过”此问题如果提供的参数值超出范围,则避免抛出异常的方法。

setZoomScaleNormal()

第二个问题是自定义数字格式是使用100-118范围内的ID定义的,但是低于164的所有格式ID都记录为Microsoft保留用于Microsoft。 Excel本身对于破坏其记录的规则显然更加宽容。

您可以通过检查告知PHPExcel使用内置数字格式的检查来破解public function setZoomScaleNormal($pValue = 100) { if (($pValue >= 1) || is_null($pValue)) { $this->zoomScaleNormal = $pValue; // } else { // throw new PHPExcel_Exception("Scale must be greater than or equal to 1."); } return $this; } 文件并修改第{512}行的Classes/PHPExcel/Reader/Excel2007.php方法来解决这个问题:

load()

//  if ((int)$xf["numFmtId"] < 164) {
//      $numFmt = PHPExcel_Style_NumberFormat::builtInFormatCode((int)$xf["numFmtId"]);
//  }

字体大小定义也存在问题,但这些不会阻止文件加载