public function check_daochu($data) { ob_end_clean(); //***這裡再加一個 $this->load->library('PHPExcel'); $this->load->library('PHPExcel/IOFactory'); $objPHPExcel = new PHPExcel(); $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); //設定表頭 $this->Excel_bt($objPHPExcel, $data['bt_data']); //匯出的類容 $this->Excel_lr($objPHPExcel, $data['data']); //設定儲存格的寬度 $objPHPExcel->getActiveSheet()->getColumnDimension('b')->setWidth(15); foreach ($data['hb_data'] as $key => $value) { //合併儲存格 $objPHPExcel->getActiveSheet()->mergeCells($key . ':' . $value); } //水平垂直置中設定 $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $fieldname = iconv('utf-8', 'gb2312', date("Y-m-d", time()) . '_' . $data['bt_data']['A1']); ob_end_clean(); header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type:application/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header('Content-Disposition:attachment;filename="' . $fieldname . '.xlsx"'); header("Content-Transfer-Encoding:binary"); $objWriter->save('php://output'); } //設定匯出標題的方法 public function Excel_bt($objPHPExcel, $bt_data) { foreach ($bt_data as $key => $value) { $objPHPExcel->getActiveSheet()->setCellValue($key, $value); } } //設定匯出的內容 public function Excel_lr($objPHPExcel, $select_data) { $i = 3; $data = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); foreach ($select_data as $key => $value) { $j = 0; foreach ($value as $k => $v) { $objPHPExcel->getActiveSheet()->setCellValue($data[$j] . $i, $v); $j++; } $i++; } }
產生EXCEL開啟檔案,報的錯誤?何解呢?(更讓人費解的是,同樣的代碼塊在另一個項目中完美運行!)
補充:自己找了問題,做了如下嘗試,但是沒一個可行的
我產生.txt
檔案,開啟時發現亂碼,於是我想到字元編碼的問題,於是在check_daochu
這個方法中,把data這個數組用iconv
函數轉換編碼,不行!
在標頭檔裡那裡加入header("Content-Type:application/vnd.ms-execl;charset=utf-8");
,不行!
把另外一個項目中相同的類庫和代碼塊都覆蓋過來,不行!
開啟.txt檔案是這樣子的
我擦、問題解決了!!!緩衝區的問題,看了這個文章才有一點明白,我明明在輸出前加了ob_end_clean
了,但是這還不夠,還要在產生excel內容前加一個ob_end_clean
,也就是在check_daochu
方法的第一行。不知道為什麼這裡還要加一個,但是問題也已經解決了。
回複內容:
public function check_daochu($data) { ob_end_clean(); //***這裡再加一個 $this->load->library('PHPExcel'); $this->load->library('PHPExcel/IOFactory'); $objPHPExcel = new PHPExcel(); $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); //設定表頭 $this->Excel_bt($objPHPExcel, $data['bt_data']); //匯出的類容 $this->Excel_lr($objPHPExcel, $data['data']); //設定儲存格的寬度 $objPHPExcel->getActiveSheet()->getColumnDimension('b')->setWidth(15); foreach ($data['hb_data'] as $key => $value) { //合併儲存格 $objPHPExcel->getActiveSheet()->mergeCells($key . ':' . $value); } //水平垂直置中設定 $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $fieldname = iconv('utf-8', 'gb2312', date("Y-m-d", time()) . '_' . $data['bt_data']['A1']); ob_end_clean(); header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type:application/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header('Content-Disposition:attachment;filename="' . $fieldname . '.xlsx"'); header("Content-Transfer-Encoding:binary"); $objWriter->save('php://output'); } //設定匯出標題的方法 public function Excel_bt($objPHPExcel, $bt_data) { foreach ($bt_data as $key => $value) { $objPHPExcel->getActiveSheet()->setCellValue($key, $value); } } //設定匯出的內容 public function Excel_lr($objPHPExcel, $select_data) { $i = 3; $data = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); foreach ($select_data as $key => $value) { $j = 0; foreach ($value as $k => $v) { $objPHPExcel->getActiveSheet()->setCellValue($data[$j] . $i, $v); $j++; } $i++; } }
產生EXCEL開啟檔案,報的錯誤?何解呢?(更讓人費解的是,同樣的代碼塊在另一個項目中完美運行!)
補充:自己找了問題,做了如下嘗試,但是沒一個可行的
我產生.txt
檔案,開啟時發現亂碼,於是我想到字元編碼的問題,於是在check_daochu
這個方法中,把data這個數組用iconv
函數轉換編碼,不行!
在標頭檔裡那裡加入header("Content-Type:application/vnd.ms-execl;charset=utf-8");
,不行!
把另外一個項目中相同的類庫和代碼塊都覆蓋過來,不行!
開啟.txt檔案是這樣子的
我擦、問題解決了!!!緩衝區的問題,看了這個文章才有一點明白,我明明在輸出前加了ob_end_clean
了,但是這還不夠,還要在產生excel內容前加一個ob_end_clean
,也就是在check_daochu
方法的第一行。不知道為什麼這裡還要加一個,但是問題也已經解決了。
猜測$objPHPExcel
需要引用傳參