Rumah > pembangunan bahagian belakang > tutorial php > PHPExcel导到excel报错

PHPExcel导到excel报错

WBOY
Lepaskan: 2016-06-23 13:30:43
asal
1359 orang telah melayarinya

用的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);	}
Salin selepas log masuk

怀疑是导出字段太多了,导出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;	}
Salin selepas log masuk

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

这就不对了!
当 $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;}
Salin selepas log masuk
Salin selepas log masuk

好在 php 还保留了 C 语言的一些特性,可以很简单的做这个计算
$c = 'A';for($i=0; $i<100; $i++) printf("%s %s\n", $i, $c++);
Salin selepas log masuk
Salin selepas log masuk


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

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

这就不对了!
当 $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;}
Salin selepas log masuk
Salin selepas log masuk

好在 php 还保留了 C 语言的一些特性,可以很简单的做这个计算
$c = 'A';for($i=0; $i<100; $i++) printf("%s %s\n", $i, $c++);
Salin selepas log masuk
Salin selepas log masuk


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


多谢指点!
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan