2013-12-09 135 views
2

我一直在搜索如何將mysql表導出爲csv或excel文件。我看到了一些步驟,我跟着他們。有沒有辦法如何使用codeigniter將mysql表導出到csv或excel文件?如何在CODEIGNITER中使用phpExcel將mysql表導出爲csv或excel文件

我試過這個PHPExcel。但它似乎不適合我。

function index() 
{ 
    $query = $this->db->get('filter_result'); 

    if(!$query) 
     return false; 

    // Starting the PHPExcel library 
    $this->load->library('PHPExcel'); 
    $this->load->library('PHPExcel/IOFactory'); 

    $objPHPExcel = new PHPExcel(); 
    $objPHPExcel->getProperties()->setTitle("export")->setDescription("none"); 

    $objPHPExcel->setActiveSheetIndex(0); 

    // Field names in the first row 
    $fields = $query->list_fields(); 
    $col = 0; 
    foreach ($fields as $field) 
    { 
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, 1, $field); 
     $col++; 
    } 

    // Fetching the table data 
    $row = 2; 
    foreach($query->result() as $data) 
    { 
     $col = 0; 
     foreach ($fields as $field) 
     { 
      $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $data->$field); 
      $col++; 
     } 

     $row++; 
    } 

    $objPHPExcel->setActiveSheetIndex(0); 

    $objWriter = IOFactory::createWriter($objPHPExcel, 'Excel5'); 

    // Sending headers to force the user to download the file 
    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="Products_'.date('dMy').'.xls"'); 
    header('Cache-Control: max-age=0'); 

    $objWriter->save('php://output'); 
} 
+1

什麼呢 「似乎沒有工作給我。」手段? – tomexsans

+1

如果您只想開始將事情轉儲到csv文件,只需打開php:// temp或某物的文件句柄,就可以使用fputcsv()直到完成數據,然後將該文件發送給瀏覽器適當的標題。 – Zarathuztra

+1

你可以參考這個網站。 http://www.ahowto.net/php/easily-integrateload-phpexcel-into-codeigniter-framework – lighter

回答

5

這是我使用的代碼。

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 
class excel{ 

function to_excel($array, $filename) { 
    header('Content-Disposition: attachment; filename='.$filename.'.xls'); 
    header('Content-type: application/force-download'); 
    header('Content-Transfer-Encoding: binary'); 
    header('Pragma: public'); 
    print "\xEF\xBB\xBF"; // UTF-8 BOM 
    $h = array(); 
    foreach($array->result_array() as $row){ 
     foreach($row as $key=>$val){ 
      if(!in_array($key, $h)){ 
       $h[] = $key; 
      } 
     } 
    } 
    echo '<table><tr>'; 
    foreach($h as $key) { 
     $key = ucwords($key); 
     echo '<th>'.$key.'</th>'; 
    } 
    echo '</tr>'; 

    foreach($array->result_array() as $row){ 
     echo '<tr>'; 
     foreach($row as $val) 
      $this->writeRow($val); 
    } 
    echo '</tr>'; 
    echo '</table>'; 


} 

function writeRow($val) { 
    echo '<td>'.$val.'</td>';    
} 

} 
?> 

使用此代碼創建一個庫,將其稱爲:

public function brandExcel() { 
    $this->load->library('excel'); 
    $result = $this->config_model->getBrandsForExcel(); 
    $this->excel->to_excel($result, 'brands-excel'); 
} 
3

我發現efenacigiray的代碼工作對我來說,但我不得不刪除代碼「 - > result_array()」

使用代碼點火器版本:2.1.4

(本來寫了這個作爲一個評論,但我沒有足夠的代表還)

5

efenacigiray的回答很好,但是我得到了一個奇怪的錯誤,因爲xls的格式與指定格式不同,所以我只是創建了另一個函數,而且效果很好。

class excel { 

    function create_excel($array) { 
     // Create new PHPExcel object 
     $objPHPExcel = new PHPExcel(); 

     // Set document properties 
     $objPHPExcel->getProperties()->setCreator("Maarten Balliauw") 
                ->setLastModifiedBy("Maarten Balliauw") 
                ->setTitle("Office 2007 XLSX Test Document") 
                ->setSubject("Office 2007 XLSX Test Document") 
                ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") 
                ->setKeywords("office 2007 openxml php") 
                ->setCategory("Test result file"); 

     //'id,name,contact_name,email,email2,mobile,mobile2,website,country,city,address,postal_code,info' 
     // Add some data 
     $objPHPExcel->setActiveSheetIndex(0) 
          ->setCellValue('A1', 'Id') 
          ->setCellValue('B1', 'name!') 
          ->setCellValue('C1', 'contact_name') 
          ->setCellValue('D1', 'email') 
          ->setCellValue('K1', 'address') 
          ->setCellValue('L1', 'postal_code'); 
     $i = 2; 
     foreach($array as $row){ 
       $objPHPExcel->setActiveSheetIndex(0) 
          ->setCellValue('A'.$i, $row['id']) 
          ->setCellValue('B'.$i, $row['name']) 
          ->setCellValue('C'.$i, $row['contact_name']) 
          ->setCellValue('D'.$i, $row['email']) 
          ->setCellValue('K'.$i, $row['address']) 
          ->setCellValue('L'.$i, $row['postal_code']); 
       $i++; 
     } 

     // Miscellaneous glyphs, UTF-8 
     //   $objPHPExcel->setActiveSheetIndex(0) 
     //       ->setCellValue('A4', 'Miscellaneous glyphs') 
     //       ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç'); 

     // Rename worksheet 
     $objPHPExcel->getActiveSheet()->setTitle('Probable Clients'); 


     // Set active sheet index to the first sheet, so Excel opens this as the first sheet 
     $objPHPExcel->setActiveSheetIndex(0); 


     // Redirect output to a client’s web browser (Excel5) 
     header('Content-Type: application/vnd.ms-excel'); 
     header('Content-Disposition: attachment;filename="probClients.xls"'); 
     header('Cache-Control: max-age=0'); 
     // If you're serving to IE 9, then the following may be needed 
     header('Cache-Control: max-age=1'); 

     // If you're serving to IE over SSL, then the following may be needed 
     header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
     header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
     header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
     header ('Pragma: public'); // HTTP/1.0 

     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
     $objWriter->save('php://output'); 
    } 
} 
0

對我來說。

print "\xEF\xBB\xBF"; // UTF-8 BOM <- this line cuased an error 

刪除此行並使用

echo '<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />'; 

這個元標記代替。

由於efenacigiray

相關問題