首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >phpexcel PHPExcel_Shared_Date::isDateTime不工作

phpexcel PHPExcel_Shared_Date::isDateTime不工作
EN

Stack Overflow用户
提问于 2015-08-11 20:11:24
回答 1查看 3.8K关注 0票数 0

文件为xlsx,列格式为日期MM YYYY。

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

PHPExcel_Shared_Date::isDateTime只是没有工作,也不知道原因。这些数据保存在数据库中,并显示如下数字:

41137 41618 42206 42076 41137 42206 41137 41988

我的代码:

代码语言:javascript
复制
$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
                }
            }
        }
    }   
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-12 22:45:13

分析文件有几个问题..。它没有在微软的OpenXMLSDK2.0生产力工具MS下进行清晰的验证。

初始问题(在PHPExcel中应该触发加载程序错误)是SheetView缩放标度,它应该是最小值1。这个问题可以通过编辑Classes/PHPExcel/Worksheet/SheetView.php和修改setZoomScaleNormal()方法来“绕过”,以避免在提供的参数值超出范围时抛出异常。

代码语言:javascript
复制
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;
}

第二个问题是,自定义数字格式的is范围为100-118,但164以下的所有格式is都被记录为保留给Microsoft使用。Excel本身显然更宽容地违反了其记录在案的规则。

您可以通过入侵Classes/PHPExcel/Reader/Excel2007.php文件并修改第512行周围的load()方法来解决这个问题,方法是注释掉告诉PHPExcel使用内置数字格式的检查:

代码语言:javascript
复制
//  if ((int)$xf["numFmtId"] < 164) {
//      $numFmt = PHPExcel_Style_NumberFormat::builtInFormatCode((int)$xf["numFmtId"]);
//  }

代码语言:javascript
复制
if ((int)$xf["numFmtId"] < 164 &&
    PHPExcel_Style_NumberFormat::builtInFormatCodeIndex((int)$xf["numFmtId"]) !== false) {
    $numFmt = PHPExcel_Style_NumberFormat::builtInFormatCode((int)$xf["numFmtId"]);
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31951085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档