首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导出Excel Zend框架

导出Excel Zend框架
EN

Stack Overflow用户
提问于 2014-10-22 06:38:33
回答 2查看 4.1K关注 0票数 0

我在从php导出一个excel文件时遇到了一个问题。

代码语言:javascript
复制
    $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文件,但是数据都在A列(Excel),我怎么才能得到一个正确的格式呢?变量$table如下所示:

//编辑var_dump($_POST)如下

代码语言:javascript
复制
<tr><th>Name</th><th>Surname</th></tr>
<tr><td>Mike</td><td>Dirnt</td></tr>
EN

回答 2

Stack Overflow用户

发布于 2014-10-22 07:43:59

这里的问题是您实际创建的是CSV文件,而不是XLS文件。它们是截然不同的东西。将其另存为.csv,并将内容类型设置为文本/csv:

代码语言:javascript
复制
$this->getResponse()->setRawHeader( "Content-Type: text/csv; charset=UTF-8" )
    ->setRawHeader( "Content-Disposition: attachment; filename=excel.csv" )
    ->setRawHeader(.......

它仍将在Excel中打开!

票数 0
EN

Stack Overflow用户

发布于 2017-08-24 15:33:28

请跟随以下代码与您的数据,它将在zend上工作。另外,请替换为您的控制器类。

代码语言:javascript
复制
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();
}

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26497573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档