16

我需要PHPExcel与一个Symfony2项目一起使用。任何人都知道如何正确设置项目以使用该库?我应该把它放在供应商目录中吗?配置文件等应该改变什么?

4

6 回答 6

14

实际上,要正确执行此操作,您需要执行以下步骤:

  • 编辑您的deps文件并从PHPExcel
[PHPExcel]
git=http://github.com/PHPOffice/PHPExcel.git
target=/phpexcel
version=origin/master
  • 运行php bin/vendors install以安装所有缺少的依赖项(PHPExcel在我们的例子中)

  • 更新前缀部分app/autoload.php

$loader->registerPrefixes(array(
    // ...
    'PHPExcel'         => __DIR__.'/../vendor/phpexcel/Classes',
));
  • 完毕。现在,您可以在包的控制器中使用它(代码基于PHPExcel来自的示例Tests/01simple-download-xls.php):
<?php
namespace Demo\MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use PHPExcel;
use PHPExcel_IOFactory;

class DemoController extends Controller
{
   public function demoAction()
   { 
       $response = new Response();

       // Create new PHPExcel object
       $objPHPExcel = new PHPExcel();

       // Set document properties
       $objPHPExcel->getProperties()->setCreator("Me")
                   ->setLastModifiedBy("Someone")
                   ->setTitle("My first demo")
                   ->setSubject("Demo Document");
       // Add some data
       $objPHPExcel->setActiveSheetIndex(0)
                   ->setCellValue('A1', 'Hello')
                   ->setCellValue('B2', 'world!')
                   ->setCellValue('C1', 'Hello')
                   ->setCellValue('D2', 'world!');
       // Set active sheet index to the first sheet
       $objPHPExcel->setActiveSheetIndex(0);

       // Redirect output to a client’s web browser (Excel5)
       $response->headers->set('Content-Type', 'application/vnd.ms-excel');
       $response->headers->set('Content-Disposition', 'attachment;filename="demo.xls"');
       $response->headers->set('Cache-Control', 'max-age=0');
       $response->prepare();
       $response->sendHeaders();
       $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
       $objWriter->save('php://output');
       exit();
   }
}
于 2012-11-04T19:31:51.003 回答
11
  1. 将库复制到您的供应商目录。
  2. 在引导文件中配置自动加载器:

    $loader->registerPrefixes(array(
        // Swift, Twig etc.
        'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel'
    ));
    
  3. 就这样。

于 2011-06-19T18:15:31.933 回答
10

实际上最好的解决方案是使用https://github.com/liuggio/ExcelBundle。我尝试使用@Crozin 的解决方案,但仍然收到有关 IOFactory::createWriter 的错误。希望这会有所帮助,西蒙娜

于 2012-04-18T09:00:27.087 回答
7

从 Symfony 2.3 开始,您现在可以这样做:

...
"require": {
    ...
    "phpoffice/phpexcel": "dev-master"
    ...
},
...

然后只需运行composer update,依赖项将自动解决。

或者,composer require phpoffice/phpexcel:dev-master如果您不想弄乱composer.json文件,也可以这样做。

于 2014-06-04T18:58:26.200 回答
5

如果您使用 composer 来管理您的项目,您只需更改 composer.json 文件:

"autoload": {
    "psr-4": {
        "": "src/",
        "": "vendor/phpoffice/phpexcel/Classes/"
    },
    "classmap": [
        "app/AppKernel.php",
        "app/AppCache.php"
    ]
},

然后加

use PHPExcel;
use PHPExcel_IOFactory;

到您的控制器文件,您可以像这样使用 PHPExcel:

$objPHPExcel = new PHPExcel();

希望能帮助到你。

于 2017-06-01T02:28:47.913 回答
2

使用 composer(从 Symfony2.1 开始)真的很简单,你只需要修改composer.json.
您不再需要注册命名空间!

只有两点需要注意:

  1. 参考github标签,我只找到了一个package类型 的解决方案
  2. 当更改 composer.json 中与类自动加载内容相关的内容时,您必须删除目录中的整个vendor目录

这是相关链接:使用 PHPExcel 与 composer 和 Symfony2.2

于 2013-04-25T12:40:10.007 回答