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

私は実際にこの拡張機能を自分のプロジェクトの 1 つに使用しました。これは私がしたことです:

コントローラーの1つにこれを追加します

     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 ファイルが作成されます。この拡張子を使用して、他のファイル形式にエクスポートすることもできます。

この例では、テーブルからすべてのレコードをエクスポートしますが、部分的な結果のみまたは 1 行のみを返すメソッドを作成できます。動作はほぼ同じようにCGridView機能し、リレーション、行のカスタム値などを使用できます。

この情報のほとんどは、拡張機能のページにもあります

于 2013-01-22T06:00:52.403 に答える