2014-10-21 108 views
0

我有與PHP導出Excel Zend框架

$filename = realpath($filename); 
    $handle = fopen($filename, "w"); 

    $cols = array(); 

    fputcsv($handle,$cols, "\t"); 

    $table = array($_POST); 

    foreach ($table as $row){ 
     fputcsv($handle, $row, "\t"); 
    } 

    fclose($handle); 

    $this->_helper->layout->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(); 

    $this->getResponse()->setRawHeader("Content-Type: application/vnd.ms-excel; charset=UTF-8") 
     ->setRawHeader("Content-Disposition: attachment; filename=excel.xls") 
     ->setRawHeader("Content-Transfer-Encoding: binary") 
     ->setRawHeader("Expires: 0") 
     ->setRawHeader("Cache-Control: must-revalidate, post-check=0, pre-check=0") 
     ->setRawHeader("Pragma: public") 
     ->setRawHeader("Content-Length: " . filesize($filename)) 
     ->sendResponse(); 

導出Excel文件有了這個代碼,我得到一個excel文件有問題,但數據都在列A(EXCEL) 我怎樣才能獲得正確的格式?變量$表如下所示:

//編輯 的var_dump($ _ POST)看起來像

<tr><th>Name</th><th>Surname</th></tr> 
<tr><td>Mike</td><td>Dirnt</td></tr> 
+0

你需要PHPExcel,只是整合它ZF2 – ZloyPotroh 2014-10-21 22:45:55

回答

0

這裏的問題是,你實際上是在創建一個CSV文件,而不是一個XLS文件。他們是非常不同的東西。它與內容類型設置爲文本/ CSV,而不是保存爲.csv:

$this->getResponse()->setRawHeader("Content-Type: text/csv; charset=UTF-8") 
    ->setRawHeader("Content-Disposition: attachment; filename=excel.csv") 
    ->setRawHeader(....... 

它仍然會在Excel中打開!

+0

對不起,情況並沒有改變:( – Italiano 2014-10-22 09:30:46

+0

然後你將需要提供一些示例數據。你能做到'的var_dump($ _ POST)'? – rjdown 2014-10-22 09:32:37

+0

好的我已經編輯了.. – Italiano 2014-10-22 09:58:27

0

請跟隨下面的代碼與您的數據它將在zend上工作。 也請替換您的控制器類。

Class ExportExcelController extends Zend_Controller_Action{ 

public function exportexcelAction() 
{ 
set_time_limit(0); 

$model = new Default_Model_SomeModel(); 
$data = $model->getData(); 

$filename = APPLICATION_PATH . "/tmp/excel-" . date("m-d-Y") . ".xls"; 

$realPath = realpath($filename); 

if (false === $realPath) 
{ 
touch($filename); 
chmod($filename, 0777); 
} 

$filename = realpath($filename); 
$handle = fopen($filename, "w"); 
$finalData = array(); 
foreach ($data AS $row) 
{ 
$finalData[] = array(
utf8_decode($row["col1"]), // For chars with accents. 
utf8_decode($row["col2"]), 
utf8_decode($row["col3"]) 
); 
} 

foreach ($finalData AS $finalRow) 
{ 
fputcsv($handle, $finalRow, "\t"); 
} 

fclose($handle); 

$this->_helper->layout->disableLayout(); 
$this->_helper->viewRenderer->setNoRender(); 

$this->getResponse()->setRawHeader("Content-Type: application/vnd.ms-excel; charset=UTF-8") 
->setRawHeader("Content-Disposition: attachment; filename=excel.xls") 
->setRawHeader("Content-Transfer-Encoding: binary") 
->setRawHeader("Expires: 0") 
->setRawHeader("Cache-Control: must-revalidate, post-check=0, pre-check=0") 
->setRawHeader("Pragma: public") 
->setRawHeader("Content-Length: " . filesize($filename)) 
->sendResponse(); 

readfile($filename); unlink($filename); exit(); 
} 

}