1

我已经在应用程序文件夹中创建了 Test.xlsx文件,但我真的想给用户一个下载它的选项。
但我想生成一个临时excel 文件,该文件被传输到客户端,之后,该文件将被销毁。我也厌倦了传输运行时生成的 Test.xlsx 文件,但由于文件权限,我无法这样做,即我的 Test.xlsx 文件仅用于读取模式。

实现这一目标的最佳方法是什么?这是我到目前为止写的几行代码。

// code for excel generation from sqlDataProvider.
 $factory = new CWidgetFactory(); 
    Yii::import('ext.eexcelview.EExcelView',true);  
            $widget = $factory->createWidget($this,'EExcelView', array(
                'dataProvider'=>$dataprovider,
                'grid_mode'=>'export',
                'title'=>'Title',
                'creator'=>'TNC',
                'autoWidth'=>true,
                'filename'=>'Test.xlsx',
                'stream'=>false,

                'disablePaging'=>false,
                'exportType'=>'Excel2007',
                'columns'=>array(
                    'First_Name',
                    'Middle_Name',
                    'Last_Name',
        'showTableOnEmpty' => false,
            ));

            $widget->init();
            $widget->run();

并下载:

$filename = "Test.xlsx";
//@chmod($filename1,0777 );

header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.basename($filename));
header('Content-type: application/vnd.ms-excel', true);
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. filesize($_SERVER['DOCUMENT_ROOT'].$filename));
readfile(Yii::app()->params['secureBaseUrl'].$filename);

正如我所说,由于新生成文件的文件权限,此代码段无法正常工作。

4

1 回答 1

0

我实际上在我的一个项目中使用了这个扩展。这就是我所做的:

在您的一个控制器中添加此

     public function behaviors(){
        return array(
            'toExcel'=>array(
                'class'=>'ext.eexcelview.EExcelBehavior',
            ),
        );
    }

然后,在同一个控制器中创建一个动作,即:

    public function actionExport(){
        $model=new CLASS_NAME('search');

        $this->toExcel('CLASS_NAME',
        array(
            array(
            'name'=>'ATTRIBUTE',
            'value'=>'$data->ATTRIBUTE."adding some custom string"',
            ),               
        ),
        'Test File', // file name
        array(
            'creator' => 'Zen', // file info
            ),
        'Excel5', // file type
        );
    }

然后你应该controller/export在浏览器中调用,它会为你创建一个临时的 excel 文件。您也可以使用此扩展名导出到其他文件格式。

此示例将从表中导出每条记录,但是您可以创建一种方法来仅返回部分结果或仅返回一行。该行为的工作方式几乎完全一样CGridView,您可以使用关系、行的自定义值等。

大部分信息也可以在扩展程序的页面上找到

于 2013-01-22T06:00:52.403 回答