Jak poprawnie używać PHPExcel z Symfony 2

I need to use PHPExcel z projektem Symfony2. Czy ktoś wie jak poprawnie skonfigurować projekt do korzystania z biblioteki? Czy powinienem umieścić go w katalogu dostawców? Co należy zmienić w plikach konfiguracyjnych itp?

Author: gakhov, 2011-06-19

6 answers

Jeśli używasz composer do zarządzania projektem, możesz po prostu zmienić composer.plik json:

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

Następnie dodaj

use PHPExcel;
use PHPExcel_IOFactory;

Do pliku kontrolera i możesz użyć PHPExcel w następujący sposób:

$objPHPExcel = new PHPExcel();
Mam nadzieję, że to pomoże.
 5
Author: PengWei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 02:28:47

Właściwie, aby zrobić to dobrze, musisz wykonać kolejne kroki:

  • Edytuj swój plik deps i dodaj zależność z PHPExcel
[PHPExcel]
git=http://github.com/PHPOffice/PHPExcel.git
target=/phpexcel
version=origin/master
  • Uruchom php bin/vendors install w celu zainstalowania wszystkich brakujących zależności (PHPExcel w naszym przypadku)

  • Aktualizacja sekcji prefiksy w app/autoload.php:

$loader->registerPrefixes(array(
    // ...
    'PHPExcel'         => __DIR__.'/../vendor/phpexcel/Classes',
));
  • zrobione. Teraz możesz go użyć w kontrolerze pakietu (kod oparty na przykładzie PHPExcel z 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();
   }
}
 14
Author: gakhov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-29 16:59:33
  1. Skopiuj bibliotekę do katalogu dostawców.
  2. Konfiguracja autoloadera w pliku bootstrap:

    $loader->registerPrefixes(array(
        // Swift, Twig etc.
        'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel'
    ));
    
  3. To wszystko.

 11
Author: Crozin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-02 15:00:49

Właściwie najlepszym rozwiązaniem jest użycie https://github.com/liuggio/ExcelBundle . Próbowałem użyć rozwiązania @Crozin, ale nadal otrzymywałem błąd dotyczący IOFactory:: createWriter. Mam nadzieję, że to pomoże, Simone

 10
Author: linuxatico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-18 09:00:27

Od wersji Symfony 2.3 możesz teraz to zrobić:

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

Następnie po prostu uruchom composer update i zależności zostaną rozwiązane automatycznie.

Lub możesz zrobić composer require phpoffice/phpexcel:dev-master, jeśli nie chcesz zadzierać z plikiem composer.json.

 7
Author: sjagr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-07 18:02:36

Z composerem (od Symfony2.1) jest to naprawdę proste, wystarczy tylko zmodyfikować composer.json.
Nie musisz już rejestrować przestrzeni nazw!

Tylko dwie rzeczy, aby zauważyć:

  1. odnoszą się do tagów github, znalazłem tylko soltion z typem package
  2. podczas zmiany czegoś w kompozytorze.json związany z klasą autoloading, musisz usunąć cały katalog w katalogu vendor

Oto odnośnik: użyj PHPExcel z kompozytor i Symfony2.2

 2
Author: timaschew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:24:55