PHPExcel 超长多列数据获取问题

来源:csdn博客 分类: 文章浏览史 发布时间:2020-11-27 15:10:25 最后更新:2020-11-27 浏览:134
转载声明:
本文为摘录自“csdn博客”,版权归原作者所有。
温馨提示:
为了更好的体验,请点击原文链接进行浏览
摘录时间:
2020-11-27 15:10:25

想必大家都有过使用PHPExcel  进行excel数据读取的开发

一般来讲 导入逻辑大同小异如下:

// excel文件的路径,
$url = './Public/Upload/excel.xls';
// 读取excel文件
try {
	$inputFileType = \PHPExcel_IOFactory::identify ( $url);
	$objReader = \PHPExcel_IOFactory::createReader ( $inputFileType );
	$objReader->setReadDataOnly ( true ); // 只需要添加这个方法实现表格数据格式转换
	$objPHPExcel = $objReader->load ( $url);
} catch ( Exception $e ) {
}
// 选择第一个sheet页
$sheet = $objPHPExcel->getSheet ( 0 );
// 获取当前页的最大行数
$highestRow = $sheet->getHighestRow ();
// 获取当前页的最大列数
$highestColumn = $sheet->getHighestColumn ();
$data = array();
// 第一行一般是表头【文字类的东西,不需要可以不用管】 这里从第二行开始取读取数据
// 循环行数 获取数据
for ($rowIndex = 2; $rowIndex <= $highestRow; $rowIndex++) {
	// 从A列开始循环获取每个单元格的数据
	for ($colIndex = 'A'; $colIndex <= $highestColumn; $colIndex++) {
		// 组装单元格标识  A1  A2 
		$addr = $colIndex . $rowIndex;
		// 获取单元格内容
		$cell = $sheet->getCell($addr)->getValue();
		//富文本转换字符串
		if ($cell instanceof PHPExcel_RichText) { 
			$cell = $cell->__toString();
		}
		if(empty($cell)){
			continue ;
		}
	}
}

对于一般列数比较少(少于26列)的表格来说  这段代码还是能够执行的,但对于多于26列的表格来说 就会出现一个问题,第二层for循环获取数据时,会出现列获取不全,比如说导入的excel最大列数到CD列 ,那么就会出现只能获取到 A,B,C三列的数据  后面的列数获取不到,那肯定是第二层for循环判断的问题,修改第二层for循环的判断

变更为 

for ($colIndex = 'A'; $colIndex != $highestColumn; $colIndex++)

这样获取到的列是多了 ,但是还有一个问题 这个只能获取到CC列,CD列的数据获取不到,解决的办法就是

// 获取当前页的最大列数
$highestColumn = $sheet->getHighestColumn ();
// 最大列数+1 实际上是往后错一列
++$highestColumn;

按照如上修改,那么就可以循环遍历到整个表格的有效单元格的数据了

 

以上为自己开发经验之谈,欢迎大家沟通交流

php技术微信