Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHPExcel库从excel中获取数据_Php_Date_Phpexcel - Fatal编程技术网

如何使用PHPExcel库从excel中获取数据

如何使用PHPExcel库从excel中获取数据,php,date,phpexcel,Php,Date,Phpexcel,我正在尝试使用PHPExcel从excel获取日期。但我没有得到日期,我得到的字符串值不是1970年的秒数 我试过的代码是 $InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue()); 试用 $cell = $excel->getActiveSheet()->getCell('B' . $i); $InvDate= $cell->getValue(); if(PHPExcel_

我正在尝试使用PHPExcel从excel获取日期。但我没有得到日期,我得到的字符串值不是1970年的秒数

我试过的代码是

$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());
试用

$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if(PHPExcel_Shared_Date::isDateTime($cell)) {
     $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
}
附言


@DiegoDD:应该提到$format是日期的理想格式。e、 g:

 $InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
p.p.S。 2019 请看answer@gabriel lupu,以及新版PhpOffice

对于日期,getValue()应返回一个浮点值,即该日期/时间的Excel序列化时间戳值。。。我怀疑是你的trim()把事情搞砸了。实际值是自1900年1月1日(或1904年1月1日,取决于电子表格使用的日历)起的天数

调用getFormattedValue()或getCalculatedValue()而不是getValue()应根据单元格的numberformatmask返回格式化为人类可读字符串的日期


或者,Sergey的解决方案测试单元格是否具有日期/时间编号FormatMask,并调用适当的帮助器方法将Excel序列化的时间戳转换为unix时间戳,然后使用普通PHP日期函数根据$format的值将其格式化为人类可读。在新版本的库中,有一个类似的助手方法PHPExcel_Shared_Date::ExcelToPHPObject(),该方法将Excel序列化的时间戳转换为PHP DateTime对象,处理此问题的函数是,因此新的代码格式应为:

$cell=$excel->getActiveSheet()->getCell('B'.$i);
$InvDate=$cell->getValue();
if(PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)){
$InvDate=PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($InvDate);
}

您可以通过以下方式获取字符串形式的单元格值(以及日期值):

$sheet = $objPHPExcel->getActiveSheet();
$lastRow = $sheet->getHighestRow();
$lastColumn = $sheet->getHighestColumn();

$rows = $sheet->rangetoArray('A2:'.$lastColumn . $lastRow, NULL, True, True, False);
foreach ($rows as $row => $cols) {
    foreach($cols as $col => $cell) {
        echo trim($cell).'<br>'; // Gives the value as string
    }
}
$sheet=$objPHPExcel->getActiveSheet();
$lastRow=$sheet->getHighestRow();
$lastColumn=$sheet->getHighestColumn();
$rows=$sheet->rangetoArray('A2:'.$lastColumn.$lastRow,NULL,True,True,False);
foreach($row=>$cols的行){
foreach($cols作为$col=>$cell){
echo trim($cell)。“
”;//以字符串形式给出值 } }

如果我两个月前能找到这个,就试试这个吧!谢谢感谢它在过去几天中的出色搜索,应该提到$format是日期的理想格式。e、 g.
$InvDate=date($format=“Y-m-d”,PHPExcel_Shared_date::ExcelToPHP($InvDate))非常感谢!你为我节省了很多时间:)只要提醒一下引用其他手机的人;第一个$InvDate需要是$cell->getCalculatedValue();那样的话。
$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
$InvDate= PHPExcel_Shared_Date::ExcelToPHPObject($InvDate)->format('Y-m-d H:i:s');