学习整理在php中使用PHPExcel读取excel表列数大于Z时读取不到的解决方案

php读取excel列数大于Z时读取不到

背景

表格数据超过26列, 也就是在Z列之前没有AA列及以后的情况, 测试一直都没有问题,超过,就会获取不到数据了

解决方案

private function getExcelData()
    {
    
    
    	//获取excel文件
        $file = $_FILES['poily']['tmp_name'];
        //实例化excel处理类
        $PHPReader = new \PHPExcel_Reader_Excel2007();
        if (!$PHPReader->canRead($file)) {
    
    
            $PHPReader = new \PHPExcel_Reader_Excel5();
            if (!$PHPReader->canRead($file)) {
    
    
                return false;
            }
        }
        
        $PHPExcel = $PHPReader->load($file);
        $currentSheet = $PHPExcel->getSheet(0);//读取第一个工作表
        $allRow = $currentSheet->getHighestRow();//取得一共有多少行
        //这两段很重要
        $allColumn = $currentSheet->getHighestColumn();//取得最大的列号
        $allColumn = \PHPExcel_Cell::columnIndexFromString($allColumn);//将列数转换为数字 列数大于Z的必须转  A->1  AA->27
        
        $arr = [];

        //从第一行开始读 第一行为标题
        for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
    
    
            //从第A列开始输出
            for ($currentColumn = 0; $currentColumn < $allColumn; $currentColumn++) {
    
    
               
                //plan 1
                //$strColumn  = \PHPExcel_Cell::stringFromColumnIndex($currentColumn);//将数字转换为字母  0->A  26->AA
                //$val = $currentSheet->getCell($strColumn.$currentRow)->getValue();

                //plan 2
                $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();

                //如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出 $arr[$currentRow][]=  iconv('utf-8','gb2312', $val)."\t";

                //将每列内容读取到数组中
                $arr[$currentRow][] = trim($val);
            }
        }

        //删除全部为空的行
        foreach ($arr as $key => $vals) {
    
    
            $tmp = '';
            foreach ($vals as $v) {
    
    
                $tmp .= $v;
            }
            if (!$tmp) unset($arr[$key]);
        }

        return $arr;
    }

关键代码

PHPExcel_Cell::columnIndexFromString($allColumn)  //将列数转换为数字 列数大于Z的必须转  A->1  AA->27

猜你喜欢

转载自blog.csdn.net/guo_qiangqiang/article/details/140154687