Php Excel视图的下载选项
我已经在应用程序文件夹中创建了Test.xlsx文件,但我确实想给用户一个下载它的选项。 但我想生成一个临时excel文件,该文件被传输到客户端,然后,该文件将被销毁。 我也很想传输运行时生成的Test.xlsx文件,但由于文件权限,我无法这样做,即我的Test.xlsx文件仅用于读取模式 实现这一目标的最佳方法是什么?以下是我迄今为止编写的几行代码Php Excel视图的下载选项,php,yii,export-to-excel,phpexcel,yii-extensions,Php,Yii,Export To Excel,Phpexcel,Yii Extensions,我已经在应用程序文件夹中创建了Test.xlsx文件,但我确实想给用户一个下载它的选项。 但我想生成一个临时excel文件,该文件被传输到客户端,然后,该文件将被销毁。 我也很想传输运行时生成的Test.xlsx文件,但由于文件权限,我无法这样做,即我的Test.xlsx文件仅用于读取模式 实现这一目标的最佳方法是什么?以下是我迄今为止编写的几行代码 // code for excel generation from sqlDataProvider. $factory = new CWidge
// 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);
正如我所说,由于新生成文件的文件权限,此代码段无法工作。我实际上在我的一个项目中使用了此扩展名。这就是我所做的: 在其中一个控制器中添加此
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完全相同,您可以使用关系、行的自定义值等
大部分信息也可以在上找到,您可以在PHP内部使用。@Örs我正在使用它,正如您在评论行中看到的,但不起作用,权限被拒绝!!我有sqlDataProvider,那么我如何处理这个数据提供者??或者型号??我不知道sqlDataProvider,但它肯定可以与CArrayProvider一起使用。您可以使用结果构建一个数组,然后使用所述数组创建一个ArrayProvider。