首页 > 后端开发 > php教程 > 使用PHPExcel读取Excel文件时会读出乱码

使用PHPExcel读取Excel文件时会读出乱码

WBOY
发布: 2016-06-23 13:49:41
原创
2017 人浏览过

这是我读取文件的代码:

		require_once dirname(__FILE__) . "/PHPExcel/Classes/PHPExcel.php";		$PHPReader = new PHPExcel_Reader_Excel2007();		if (!$PHPReader->canRead($filePath)) {			$PHPReader = new PHPExcel_Reader_Excel5();			if (!$PHPReader->canRead($filePath)) {				echo "no file";				die;			}		}		$PHPExcel = $PHPReader->load($filePath);		$sheetCount = $PHPExcel->getSheetCount();		$sheetNames = $PHPExcel->getSheetNames();		for ($SheetID = 0; $SheetID < $sheetCount; $SheetID++) {			$name = $sheetNames[$SheetID];			$currentSheet = $PHPExcel->getSheetByName($name);			$allColumn = $currentSheet->getHighestColumn();			$allRow = $currentSheet->getHighestRow();			$drive = new DriveCommand();			$data = array();			for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {				for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {					$val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65, $currentRow)->getValue();					//$objExcel[$name][$currentRow - 1][ord($currentColumn) - 65] = $val;					$data[$currentRow][] = $val;				}			}			if ($name == "产品信息") $name = "product";			else if ($name == "行业") $name = "industry";			else if ($name == "集团信息"){				continue;				 $name = "bloc";				var_dump($data);				die;			}			else if ($name == "客户信息")			{				var_dump($data);				die;				$name = "customer";			}			else if ($name == "业务员信息") $name = "employeer";			else continue;			$drive->actionUpload($name, $data);		}
登录后复制

这是截图:

读取的内容前一部分没有问题,后面的也没有问题,但是中间这部分会变成这个样子。


回复讨论(解决方案)

没有看到乱码
截图中的是你 var_dump 的结果

Excel文件中的数据都是正常的,但是在读取的时候中间会有一部分读取出类似于“ (12) { ["_name":protected]=> string(6) "宋体" ["_size":protected]=> int(12) ["_bold":protected]=> bool(false) ["_italic":protected]=> bool(false) ["_superScript":protected]=> bool(false) ["_subScript":protected]=> bool(false) ["_underline":protected]=> string(4) "none" ["_strikethrough":protected]=> bool(false) ["_color":protected]=> object(PHPExcel_Style_Color)#3006 (4) { ["_argb":protected]=> string(8) "FF000000" ["_parentPropertyName":protected]=> NULL ["_isSupervisor":protected]=> bool(false) ["_parent":protected]=> NULL } ”这样的数据。正常的数据输出应该是 [2]=> array(13) { [0]=> string(6) "B01001" [1]=> string(6) "超市" [2]=> string(12) "百佳超市" [3]=> string(6) "广东" [4]=> string(6) "广州" [5]=> string(21) "广州中华广场店" [6]=> string(51) "广州越秀区中山三路228号中华广场三层" [7]=> NULL [8]=> NULL [9]=> NULL [10]=> NULL [11]=> float(2735) [12]=> string(6) "caoshi" } [3]=> array(13) { [0]=> string(6) "B01002" [1]=> string(6) "超市" [2]=> string(12) "百佳超市"  这种格式。

我也有时候会碰到乱码,有时候又是好的,估计是微软excel问题。

没有看到乱码
截图中的是你 var_dump 的结果


Excel文件中的数据都是正常的,但是在读取的时候中间会有一部分读取出类似于“(12) { ["_name":protected]=> string(6) "宋体" ["_size":protected]=> int(12) ["_bold":protected]=> bool(false) ["_italic":protected]=> bool(false) ["_superScript":protected]=> bool(false) ["_subScript":protected]=> bool(false) ["_underline":protected]=> string(4) "none" ["_strikethrough":protected]=> bool(false) ["_color":protected]=> object(PHPExcel_Style_Color)#3006 (4) { ["_argb":protected]=> string(8) "FF000000" ["_parentPropertyName":protected]=> NULL ["_isSupervisor":protected]=> bool(false) ["_parent":protected]=> NULL } ”这样的数据。正常的数据输出应该是[2]=> array(13) { [0]=> string(6) "B01001" [1]=> string(6) "超市" [2]=> string(12) "百佳超市" [3]=> string(6) "广东" [4]=> string(6) "广州" [5]=> string(21) "广州中华广场店" [6]=> string(51) "广州越秀区中山三路228号中华广场三层" [7]=> NULL [8]=> NULL [9]=> NULL [10]=> NULL [11]=> float(2735) [12]=> string(6) "caoshi" } [3]=> array(13) { [0]=> string(6) "B01002" [1]=> string(6) "超市" [2]=> string(12) "百佳超市"  这种格式。

我也有时候会碰到乱码,有时候又是好的,估计是微软excel问题。


是的,读取的前一部分内容还是正常的,后面也是正常的,但是中间就会有一部分读出像图片里那样。

问题已经解决了。是因为读取单个cell的内容,读取的结果可能是object类型,也可能是string类型,加上一个判断,修改下类型就好了。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板