PHPExcel 超长多列数据获取问题
转载声明:
本文为摘录自“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;
按照如上修改,那么就可以循环遍历到整个表格的有效单元格的数据了
以上为自己开发经验之谈,欢迎大家沟通交流