PHPExcel导到excel报错
程序员文章站
2024-02-17 17:14:16
...
用的TP3.2+PHPExcel
报错页面:
怀疑是导出字段太多了,导出26个字段都可以的,再加一个27个就报错了,是不是在哪可以改导出字段限制的?
这就不对了!
当 $span = ord('Z')+1 的时候 chr(($span) 得到的是 [
显然是错误的,正确的应是 AA
所以需要一个这样的函数进行计算
好在 php 还保留了 C 语言的一些特性,可以很简单的做这个计算
报错页面:
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++; }
多谢指点!
推荐阅读