文件为xlsx,列格式为日期MM 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
}
}
}
}
} 发布于 2015-08-12 22:45:13
分析文件有几个问题..。它没有在微软的OpenXMLSDK2.0生产力工具MS下进行清晰的验证。
初始问题(在PHPExcel中应该触发加载程序错误)是SheetView缩放标度,它应该是最小值1。这个问题可以通过编辑Classes/PHPExcel/Worksheet/SheetView.php和修改setZoomScaleNormal()方法来“绕过”,以避免在提供的参数值超出范围时抛出异常。
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使用内置数字格式的检查:
// if ((int)$xf["numFmtId"] < 164) {
// $numFmt = PHPExcel_Style_NumberFormat::builtInFormatCode((int)$xf["numFmtId"]);
// }或
if ((int)$xf["numFmtId"] < 164 &&
PHPExcel_Style_NumberFormat::builtInFormatCodeIndex((int)$xf["numFmtId"]) !== false) {
$numFmt = PHPExcel_Style_NumberFormat::builtInFormatCode((int)$xf["numFmtId"]);
}字体大小定义也存在问题,但这些问题不会阻止文件加载
https://stackoverflow.com/questions/31951085
复制相似问题