2015-07-21 2 views
1

У меня есть этот контроллер, который передает мои данные из базы данных в библиотеку PHPExcel.PHPExcel: Ошибка CodeIgniter на выходе

https://arjunphp.com/how-to-use-phpexcel-with-codeigniter/

это мой контроллер:

public function downloadTournamentData() { 
    $this->load->model("Tournament"); 

    $var_data = array(); 

    $var_data['tournament'] = $this->Tournament->getTournamentData(); 

    $this->load->library('excel'); 

    $this->excel->setActiveSheetIndex(0); 

    $this->excel->getActiveSheet()->setTitle('test'); 

    $this->excel->getActiveSheet()->setCellValue('A1', 'member_username'); 
    $this->excel->getActiveSheet()->setCellValue('B1', 'member_name'); 
    $this->excel->getActiveSheet()->setCellValue('C1', 'member_phone'); 
    $this->excel->getActiveSheet()->setCellValue('D1', 'member_email'); 
    $this->excel->getActiveSheet()->setCellValue('E1', 'member_idcard'); 
    $this->excel->getActiveSheet()->setCellValue('F1', 'Date_created'); 
    $this->excel->getActiveSheet()->setCellValue('G1', 'team_name'); 
    $this->excel->getActiveSheet()->setCellValue('H1', 'warnet_name'); 
    $this->excel->getActiveSheet()->setCellValue('I1', 'warnet_cp'); 
    $this->excel->getActiveSheet()->setCellValue('J1', 'warnet_phone'); 
    $this->excel->getActiveSheet()->setCellValue('K1', 'region_name'); 
    $this->excel->getActiveSheet()->setCellValue('L1', 'City'); 


    $cell_inc = 2; 
    foreach($var_data['tournament'] as $k => $v) { 
     $this->excel->getActiveSheet()->setCellValue('A'.$cell_inc, $v['member_username']); 
     $this->excel->getActiveSheet()->setCellValue('B'.$cell_inc, $v['member_name']); 
     $this->excel->getActiveSheet()->setCellValue('C'.$cell_inc, $v['member_phone']); 
     $this->excel->getActiveSheet()->setCellValue('D'.$cell_inc, $v['member_email']); 
     $this->excel->getActiveSheet()->setCellValue('E'.$cell_inc, $v['member_idcard']); 
     $this->excel->getActiveSheet()->setCellValue('F'.$cell_inc, $v['Date_created']); 
     $this->excel->getActiveSheet()->setCellValue('G'.$cell_inc, $v['team_name']); 
     $this->excel->getActiveSheet()->setCellValue('H'.$cell_inc, $v['warnet_name']); 
     $this->excel->getActiveSheet()->setCellValue('I'.$cell_inc, $v['warnet_cp']); 
     $this->excel->getActiveSheet()->setCellValue('J'.$cell_inc, $v['warnet_phone']); 
     $this->excel->getActiveSheet()->setCellValue('K'.$cell_inc, $v['region_name']); 
     $this->excel->getActiveSheet()->setCellValue('L'.$cell_inc, $v['City']); 

     $cell_inc++; 
    } 

    date_default_timezone_set("Asia/Jakarta"); 

    $this_date = date("Y-m-d"); 

    $filename='pb_turnamen_data-'.$this_date.'.xls'; //save our workbook as this file name 
    header('Content-Type: application/vnd.ms-excel; charset=UTF-8'); //mime type 
    header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name 
    header('Cache-Control: max-age=0'); //no cache 

    //save it to Excel5 format (excel 2003 .XLS file), change this to 'Excel2007' (and adjust the filename extension, also the header mime type) 
    //if you want to save it as .XLSX Excel 2007 format 
    $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5'); 
    //force user to download the Excel file without writing it to server's HD 
    $objWriter->save('php://output'); 
} 

Это загрузить файл Excel. Проблема только в том, что данные перепутаны, и все это неправильно.

Screenshot of downloaded excel file

Почему это происходит? Что-то не так с моим контроллером?

Просьба предоставить решение ...

+0

ли это побудило вас выбрать набор символов при открытии его в Excel? Попробуйте установить символ, установленный в UTF-8, пока он открывается, чтобы преуспеть. –

+0

Если вы отправляете электронную таблицу непосредственно в браузер, то не должно быть абсолютно никакого дополнительного выхода, генерируемого где-либо внутри вашего кода или каркасом –

+0

@DishaV. : no, это не заставляет меня устанавливать кодировку. Ошибка: «Формат файла и расширение« xxx.xls »не совпадают ...» – godheaper

ответ

2

Добавить ob_end_clean(); после $ objWriter = PHPExcel_IOFactory :: createWriter ($ this-> excel, 'Excel5');

окончательный код

$objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5'); 
ob_end_clean(); 
$objWriter->save('php://output');