PHPExcel导到excel报错

WBOY
Release: 2016-06-23 13:30:43
Original
1314 people have browsed it

用的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);	}
Copy after login

怀疑是导出字段太多了,导出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;	}
Copy after login

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

这就不对了!
当 $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;}
Copy after login
Copy after login

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


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

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

这就不对了!
当 $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;}
Copy after login
Copy after login

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


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


多谢指点!
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!