如何在Yii2 Framework中集成PHPExcel?

时间:2017-03-13 10:07:20

标签: php yii2 phpexcel

我想捕获html表单字段数据并将其保存在.xlsx文件中。我环顾四周找到PHPExcel,但无法弄清楚如何将它集成到Yii2。有人能告诉我如何整合。我想在我的控制器中使用这样的东西:

require('../PHPExcel.php');
$objPHPExcel = new PHPExcel;
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,  "Excel2007");
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="file.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');`

4 个答案:

答案 0 :(得分:3)

代码中的

替换了这一行:

$objPHPExcel = new PHPExcel;

用这个:

$objPHPExcel = new \PHPExcel();

还要编辑$objWriter

$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

并且理解这里的基本思想是示例:

          $objPHPExcel = new \PHPExcel();

          $sheet=0;

          $objPHPExcel->setActiveSheetIndex($sheet);
          $foos = [
                    ['firstname'=>'Jane',
                    'lastname'=>'pat'],
                    ['firstname'=>'Jane',
                    'lastname'=>'Jones'],
                    ['firstname'=>'Jane',
                    'lastname'=>'Doe'],
            ];

        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);

        $objPHPExcel->getActiveSheet()->setTitle('xxx')                     
         ->setCellValue('A1', 'Firstname')
         ->setCellValue('B1', 'Lastname');

     $row=2;

            foreach ($foos as $foo) {  

                $objPHPExcel->getActiveSheet()->setCellValue('A'.$row,$foo['firstname']); 
                $objPHPExcel->getActiveSheet()->setCellValue('B'.$row,$foo['lastname']);
                $row++ ;
            }

    header('Content-Type: application/vnd.ms-excel');
    $filename = "MyExcelReport_".date("d-m-Y-His").".xls";
    header('Content-Disposition: attachment;filename='.$filename .' ');
    header('Cache-Control: max-age=0');
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');       

答案 1 :(得分:2)

使用composer将PHPExcel添加到项目中。然后在require('@ vendor / ...')中使用@vendor前缀来访问特定包

答案 2 :(得分:0)

通过使用composer安装phpexcel,将phpexcel添加到您的供应商目录。下一步使用它$objPHPExcel = new \PHPExcel();
希望能帮助到你。

答案 3 :(得分:0)

这个模块最初对我有用。但是后来我添加了 Yii2 并花了很长时间寻找解决问题的方法。对于那些找到这个话题的人,就像我所做的那样,并将 Yii2 添加到 Yii1 中,我会留下这个解决方案。

对我来说首先帮助了这个。

<!doctype HTML>
<html>
  <body>
    <p id="GameScore">Score: 0</p>
    <button>Start Game!</button>
    <input id="userInput" type="text">
  </body>
</html>

当我添加 Yii2 时我改变了

            spl_autoload_unregister(['YiiBase', 'autoload']);
            require_once Yii::app()->params['rootPath'] . '/PHPExcel/Classes/PHPExcel.php';
            spl_autoload_register(['YiiBase', 'autoload']);

下次使用用户7702308

            spl_autoload_unregister(['Yii', 'autoload']);
            spl_autoload_unregister(['YiiBase', 'autoload']);
            require_once Yii::app()->params['rootPath'] . '/PHPExcel/Classes/PHPExcel.php';
            spl_autoload_register(['YiiBase', 'autoload']);
            spl_autoload_register(['Yii', 'autoload']);