文件是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
}
}
}
}
}
答案 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"]);
// }
字体大小定义也存在问题,但这些不会阻止文件加载