Yii include PHP Excel


Yii include PHP Excel

我正在尝试将PHPExcel lib包含到Yii中,将PHPExcel.php放在扩展的根目录中,靠近PHPExcel文件夹,并将该代码添加到config/main.php

 // application components
'components'=>array(
  'excel'=>array(
  'class'=>'application.extensions.PHPExcel',
),

修改/protected/extensions/PHPExcel/Autoloader.php

public static function Register() {
  $functions = spl_autoload_functions();
  foreach($functions as $function)
    spl_autoload_unregister($function);
  $functions=array_merge(array(array('PHPExcel_Autoloader', 'Load')), $functions);
  foreach($functions as $function)
    $x = spl_autoload_register($function);
  return $x;
}//     function Register()

然后,尝试创建PHPExcel对象$objPHPExcel = new PHPExcel();但有一个错误:Z:'home'yii.local'www'framework'YiiBase.php(418) 中的include(PHPExcel.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory

试试这些,对我有用。

  • 复制文件。将PHPExcel的所有文件复制到ROOT''protection''vendors''PHPExcel中。此文件夹PHPExcel是重命名的Classes文件夹。像这样:
ROOT''protection''vendors''PHPExcel''PHPExcel.phpPHPExcel ''。。。所有文件php
  • 加载类PHPExcel。修改文件ROOT''index.php。您将更改yii应用程序的运行方式
$app=Yii::createWebApplication($config);//添加PHPExcel自动加载器Yii::import('应用程序.供应商.*');require_one"PHPExcel/PHPExcel.php";require_one"PHPExcel/PHPExcel/Autoloader.php";Yii::registerAutoloader(数组('HPExcel_Autoloader','Load'),true);$app->run();
  • 测试您的PHPExcel。在任何控制器中创建操作
公共函数actionExcel(){$objPHPExcel=新的PHPExcel();$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1','Hello')->setCellValue('B2','world!')->setCellValue('C1','Hello')->setCellValue('D2','world!');$objPHPExcel->getActiveSheet()->setTitle('Simple');$objPHPExcel->setActiveSheetIndex(0);ob_end_clean();ob_start();header('Content-Type:application/vnd.ms-excel');header('Content-Disposition:attachment;filename="test.xls"');标头("缓存控制:最大年龄=0");$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');$objWriter->保存('php://output');}

看到你的另一个问题,我想你已经找到了答案。唉。。。您必须在配置中使用导入,而不是组件。类似这样的东西:

// autoloading model and component classes
'import'=>array(
    'application.models.*',
    'application.components.*',
    'application.vendors.phpexcel.classes.*',
),

您还应该将phpexcel放在一个名为vendor的文件夹中,而不是扩展。它是第三方软件,不扩展Yii。

这里还有一个指南,可以禁用Yii自动加载,而不是禁用PHPExcel自动加载。http://www.yiiframework.com/wiki/101/how-to-use-phpexcel-external-library-with-yii/

试试这个:

        spl_autoload_unregister(array('YiiBase','autoload'));             
        Yii::import('ext.phpexcel.Classes.PHPExcel', true);
        $objPHPExcel = new PHPExcel();
        $activeSheet = $objPHPExcel->getActiveSheet();
        spl_autoload_register(array('YiiBase','autoload'));