web-dev-qa-db-ja.com

Symfony2でPHPExcelを正しく使用する方法

PHPExcelSymfony2プロジェクトで使用する必要があります。ライブラリを使用するためにプロジェクトを正しく設定する方法を知っている人はいますか?ベンダーディレクトリに配置する必要がありますか?設定ファイルなどで何を変更する必要がありますか?

16
YakobeYak

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();

それが役に立てば幸い。

5
PengWei

実際、それを正しく行うには、次の手順に従う必要があります。

  • 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',
));
  • 完了。これで、バンドルのコントローラーで使用できます(Tests/01simple-download-xls.phpPHPExcelの例に基づくコード):
<?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();
   }
}
14
gakhov
  1. ライブラリをベンダーディレクトリにコピーします。
  2. bootstrapファイルでオートローダーを構成します:

    $loader->registerPrefixes(array(
        // Swift, Twig etc.
        'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel'
    ));
    
  3. それで全部です。

11
Crozin

実際に最善の解決策は、 https://github.com/liuggio/ExcelBundle を使用することです。 @Crozinのソリューションを使おうとしましたが、IOFactory :: createWriterに関するエラーが発生していました。これがお役に立てば幸いです、シモーネ

10
linuxatico

Symfony 2.3以降、これを実行できるようになりました。

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

次に、composer updateを実行するだけで、依存関係が自動的に解決されます。

または、composer require phpoffice/phpexcel:dev-masterファイルをいじりたくない場合は、composer.jsonを実行できます。

7
sjagr

composer(Symfony2.1以降))を使用すると、非常に簡単で、composer.jsonを変更するだけで済みます。
名前空間を登録する必要はもうありません!

注意すべき点は2つだけです。

  1. githubタグを参照してください。packageタイプのソリューションしか見つかりませんでした。
  2. クラスの自動読み込みに関連するcomposer.jsonの何かを変更するときは、vendorディレクトリのディレクトリ全体を削除する必要があります

関連するリンクは次のとおりです。 PHPExcelをcomposer and Symfony2.2 で使用)

2
timaschew