导出Excel Zend框架
问题描述:
我有与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>
答
这里的问题是,你实际上是在创建一个CSV文件,而不是一个XLS文件。他们是非常不同的东西。它与内容类型设置为文本/ CSV,而不是保存为.csv:
$this->getResponse()->setRawHeader("Content-Type: text/csv; charset=UTF-8")
->setRawHeader("Content-Disposition: attachment; filename=excel.csv")
->setRawHeader(.......
它仍然会在Excel中打开!
答
请跟随下面的代码与您的数据它将在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();
}
}
你需要PHPExcel,只是整合它ZF2 – ZloyPotroh 2014-10-21 22:45:55