2013-01-21 64 views
1

我已經創建Test.xlsx文件在應用程序文件夾中,但我很想給用戶一個選項來下載它。
但我想生成一個臨時 excel文件被傳輸到客戶端,然後,該文件將被銷燬。 我也厭倦了傳輸運行時生成的Test.xlsx文件,但由於文件許可,我不能這樣做,那就是我的Test.xlsx文件僅適用於讀取模式。下載Excel-View選項

什麼是實現這一目標的最佳方法?以下是我迄今爲止編寫的幾行代碼。

// 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); 

正如我所說的,這個代碼段不能正常工作,由於文件新生成的文件的權限。

+0

您可以使用[文件模式(HTTP: PHP中的/php.net/manual/en/function.chmod.php)。 – adamors

+0

@Örs我正在使用它,因爲您在註釋行中看到,但沒有工作,權限被拒絕! – TNC

回答

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呢,你可以使用關係,爲行等自定義值

大多數信息可在extension's page發現以及

+0

我有sqlDataProvider,所以我該如何對待這個數據提供者?或型號? – TNC

+0

我不知道有關sqlDataProvider,但它應該肯定與CArrayProvider一起工作。你可以用你的結果構建一個數組,然後用這個數組創建一個ArrayProvider。 – adamors