2014-10-21 109 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(); 
} 

}