用的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);}publicfunction 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<100; $i++) printf("%s %s\n", $i, $c++);
利用這個特性,你的程式可寫作
$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<100; $i++) printf("%s %s\n", $i, $c++);
利用這個特性,你的程式可寫作
$span = "A"; foreach($rows as $keyName=>$value){// 列寫入 $j = $span; $objActSheet->setCellValueExplicit($j.$column, $value); $span++; }
多謝指點!