Php 导出Excel Zend框架
我在从php导出excel文件时遇到问题Php 导出Excel Zend框架,php,jquery,html,excel,zend-framework,Php,Jquery,Html,Excel,Zend Framework,我在从php导出excel文件时遇到问题 $filename = realpath($filename); $handle = fopen($filename, "w"); $cols = array(); fputcsv($handle,$cols, "\t"); $table = array($_POST); foreach ($table as $row){ fputcsv($handle, $row, "\t" );
$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文件,但数据都在Aexcel列中
如何获得正确的格式?变量$table如下所示:
//编辑
var\u dump$\u POST看起来像
<tr><th>Name</th><th>Surname</th></tr>
<tr><td>Mike</td><td>Dirnt</td></tr>
这里的问题是,您实际上是在创建CSV文件,而不是XLS文件。它们是非常不同的东西。将其另存为.csv,内容类型改为text/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,只需将其集成到zf2Sorry,情况不会改变:然后您需要提供一些示例数据。你能做var_dump$_POST吗?如果这是你的var_dump的输出,那么有些事情是非常错误的。首先需要从表格单元格中提取值。如果你不确定怎么做,最好再问一个问题。