Yii включить PHP Excel - PullRequest
       26

Yii включить PHP Excel

0 голосов
/ 22 марта 2012

Я пытаюсь включить 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();, но с ошибкой: include(PHPExcel.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in Z:\home\yii.local\www\framework\YiiBase.php(418)

Ответы [ 3 ]

4 голосов
/ 27 июня 2012

попробуйте это, у меня это работает.

  • Копирование файлов.Скопируйте все файлы PHPExcel в ROOT \ protected \ vendors \ PHPExcel.Эта папка PHPExcel является папкой Classes, переименованной.Вот так:
ROOT\protected\vendors\PHPExcel\
                                PHPExcel.php
                                PHPExcel\...
                                         all files php
  • Загрузите предложения PHPExcel.Измените файл ROOT \ index.php.Вы измените способ запуска приложения yii.
    $app = Yii::createWebApplication($config);
    // adding PHPExcel autoloader
    Yii::import('application.vendors.*');
    require_once "PHPExcel/PHPExcel.php";
    require_once "PHPExcel/PHPExcel/Autoloader.php";
    Yii::registerAutoloader(array('PHPExcel_Autoloader','Load'), true);
    $app->run();
  • Проверьте свой PHPExcel.Создать действие в любом контроллере
    public function actionExcel(){
        $objPHPExcel = new 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"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
    }
1 голос
/ 30 мая 2014

Попробуйте это:

        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')); 
1 голос
/ 04 апреля 2012

Видя ваш другой вопрос, я думаю, вы нашли ответ. Увы ... вы должны использовать импорт в конфигурации, а не компоненты Примерно так:

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

Вы также должны поместить phpexcel в папку с названием vendors, а не extensions. Это стороннее программное обеспечение, которое не распространяется на Yii.

Здесь также есть руководство, которое работает с отключением автозагрузки Yii вместо отключения автозагрузки PHPExcel. http://www.yiiframework.com/wiki/101/how-to-use-phpexcel-external-library-with-yii/

...