工作中进行excel的时候遇到了两个问题,
1.excel表中列值过大,由于没有进行特殊处理,程序没法正常运行;
2.列值中含有日期格式的文本,不能正确读取;
所以通过网络搜索,并解决了问题,记录一下,以备后用:
解决方法:
/****知识点总结*****
1.列数值过大,可以通过 PHPExcel_Cell::columnIndexFromString($column),获取最大列的数值
2.针对表格中有日期的,可以通过PHPExcel_Shared_Date::ExcelToPHP($value) 进行格式化,
如获取一个日期值,可如下面语句进行获取:
$date = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue()));
*******************/
<?php //PHPExcel类获取地址 https://github.com/PHPOffice/PHPExcel //引入PHPExcel类文件 include_once './PHPExcel.php'; //读取的excel文件 $excelFile = './test.xlsx'; /**实例化读取excel文件类,根据excel版本进行不同获取,下面是不同方式*/ /*** //Excel5方式 $objReader = new PHPExcel_Reader_Excel5(); $objReader = PHPExcel_IOFactory::createWriter('Excel5'); //Excel2007方式 $objReader = new PHPExcel_Reader_Excel2007(); $objReader = PHPExcel_IOFactory::createWriter('Excel2007'); ***/ //由于我的文件是07版本,所以使用Excel2007方式 $objReader = PHPExcel_IOFactory::createReader('Excel2007'); //载入excel文件 $objPHPExcel = $objReader->load($excelFile); //读取excel的第一个工作表 $sheet = $objPHPExcel->getSheet(0); //取得总行数 $highestRow = $sheet->getHighestRow(); //取得总列数 $highestColumm = $sheet->getHighestColumn(); //获取最大列值字母对应的数值 $highestColummNum = PHPExcel_Cell::columnIndexFromString($highestColumm); if (!$highestRow || !$highestColumm) { exit('表中无数据'); } //获取表格值进行存储 $dataExcel = array(); $i = 0; //如果列值过大,进行计算, if ($highestColummNum > 26) { //循环读取每个单元格的数据 for ($row = 2; $row <= $highestRow; $row++) {//行数是以第2行开始 for ($column = 'A'; PHPExcel_Cell::columnIndexFromString($column) <= $highestColummNum; $column++) {//列数是以A列开始 if ($column == 'E') {//假设第E列是日期 $dataExcel[$i][] = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue())); } else { $dataExcel[$i][] = $sheet->getCell($column.$row)->getValue(); } } $i++; } } else { //循环读取每个单元格的数据 for ($row = 2; $row <= $highestRow; $row++) {//行数是以第2行开始 for ($column = 'A';$column <= $highestColumm; $column++) {//列数是以A列开始 if ($column == 'E') {//假设第E列是日期 $dataExcel[$i][] = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue())); } else { $dataExcel[$i][] = $sheet->getCell($column.$row)->getValue(); } } $i++; } } if (!$dataExcel) { exit('未获取任何数据'); } print_r($dataExcel); exit; /****知识点总结***** 1.列数值过大,可以通过 PHPExcel_Cell::columnIndexFromString($column),获取最大列的数值 2.针对表格中有日期的,可以通过PHPExcel_Shared_Date::ExcelToPHP($value) 进行格式化, 如获取一个日期值,可如下面语句进行获取: $date = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($column.$row)->getValue())); *******************/ ?>