欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHPExcel导到excel报错

程序员文章站 2022-04-25 22:21:55
...
用的TP3.2+PHPExcel
报错页面:

public function outxls() {		$model = D($this->dbname);		$map = $this->_search();		if (method_exists($this, '_filter')) {			$this->_filter($map);		}		$list = $model->where($map)->field('id,status,yewujindu,fenlei,uid,juid,juname,uuid,uuname,xcrq,xingming,phone,type,introduce,introphone,daikuanpro,addtime,uname,addm,updatetime,sex,birth,marry,shenhu,shebaonianshu,shebaojishu,baoxianjiaoe')->select();	    $headArr=array('ID','进展','公司名称','下次联系','联系人','添加人','添加时间','更新时间');	    $filename='客户管理';		$this->xlsout($filename,$headArr,$list);	}

怀疑是导出字段太多了,导出26个字段都可以的,再加一个27个就报错了,是不是在哪可以改导出字段限制的?


回复讨论(解决方案)

Invalid cell coordinate 无效的单元格坐标

把你的 xlsout 方法贴出了看看!
关键是列号生成的部分

Invalid cell coordinate 无效的单元格坐标

把你的 xlsout 方法贴出了看看!
关键是列号生成的部分


public function xlsout($filename='数据表',$headArr,$list){					//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入		import("Org.Util.PHPExcel");		import("Org.Util.PHPExcel.Writer.Excel5");		import("Org.Util.PHPExcel.IOFactory.php");		$this->getExcel($filename,$headArr,$list);	}public	function getExcel($fileName,$headArr,$data){		//对数据进行检验		if(empty($data) || !is_array($data)){			die("data must be a array");		}		//检查文件名		if(empty($fileName)){			exit;		}		$date = date("Y_m_d",time());		$fileName .= "_{$date}.xls";		//创建PHPExcel对象,注意,不能少了\		$objPHPExcel = new \PHPExcel();		$objProps = $objPHPExcel->getProperties();					//设置表头		$key = ord("A");		foreach($headArr as $v){			$colum = chr($key);			$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum.'1', $v);			$key += 1;		}		$column = 2;		$objActSheet = $objPHPExcel->getActiveSheet();		//设置为文本格式		foreach($data as $key => $rows){ //行写入			$span = ord("A");			foreach($rows as $keyName=>$value){// 列写入				$j = chr($span);				$objActSheet->setCellValueExplicit($j.$column, $value);				$span++;			}			$column++;		}		$fileName = iconv("utf-8", "gb2312", $fileName);		//重命名表		// $objPHPExcel->getActiveSheet()->setTitle('test');		//设置活动单指数到第一个表,所以Excel打开这是第一个表		$objPHPExcel->setActiveSheetIndex(0);		ob_end_clean();//清除缓冲区,避免乱码		header('Content-Type: application/vnd.ms-excel');		header("Content-Disposition: attachment;filename=\"$fileName\"");		header('Cache-Control: max-age=0');		$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');		$objWriter->save('php://output'); //文件通过浏览器下载		exit;	}

           $span = ord("A");            foreach($rows as $keyName=>$value){// 列写入                $j = chr($span);                 $objActSheet->setCellValueExplicit($j.$column, $value);                $span++;            }

这就不对了!
当 $span = ord('Z')+1 的时候 chr(($span) 得到的是 [
显然是错误的,正确的应是 AA
所以需要一个这样的函数进行计算
function CellName($n) {  $r = '';  do {    $m = $n % 26;    $n = intval($n / 26);    $r = chr(65 + $m - ($r ? 1 : 0)) . $r;  }while($n > 0);  return $r;}

好在 php 还保留了 C 语言的一些特性,可以很简单的做这个计算
$c = 'A';for($i=0; $i  

利用这个特性,你的程序可写作
           $span = "A";            foreach($rows as $keyName=>$value){// 列写入                $j = $span;                 $objActSheet->setCellValueExplicit($j.$column, $value);                $span++;            }

           $span = ord("A");            foreach($rows as $keyName=>$value){// 列写入                $j = chr($span);                 $objActSheet->setCellValueExplicit($j.$column, $value);                $span++;            }

这就不对了!
当 $span = ord('Z')+1 的时候 chr(($span) 得到的是 [
显然是错误的,正确的应是 AA
所以需要一个这样的函数进行计算
function CellName($n) {  $r = '';  do {    $m = $n % 26;    $n = intval($n / 26);    $r = chr(65 + $m - ($r ? 1 : 0)) . $r;  }while($n > 0);  return $r;}

好在 php 还保留了 C 语言的一些特性,可以很简单的做这个计算
$c = 'A';for($i=0; $i   

利用这个特性,你的程序可写作
           $span = "A";            foreach($rows as $keyName=>$value){// 列写入                $j = $span;                 $objActSheet->setCellValueExplicit($j.$column, $value);                $span++;            }

多谢指点!