Preface
    Using the latest PHPOfficePhpSpreadsheet in a CakePHP3 application is relatively easy, 
    A simple composer command like composer require phpoffice/phpspreadsheet does the trick in a few seconds and then 
    you ready to go.
    All of as Cake uses end up with a PHPExcelComponent that we either borrow or devise ourselves, 
    so we can make our users ... happy by giving them the beloved excel files.
    The problem with using PHPOffice/PhpSpreadsheet inside a CakePHP2 application is that CakePHP2 does not support namespaces
    and so the App::import() is not able to load all the required classes correctly.
This simple howto lists all the steps that I followed in order to make things work, with the help of this question at stackoverflow and this blog post from Mark.
The Steps
- Download the latest version from here.
-  Extract the zip file and rename the srcfolder (inside Phpspreadsheet-develop) toPhpOffice
-  Go to your Cake2 project and move/copy this new PhpOfficefolder inside yourAPP/Vendorsfolder
-  
        While you are there, create another folder named Psr(inside yourAPP/Vendors) and an other folder namedSimpleCacheinsidePsr. (You will know why in a minute)
- PhpSpreadsheet refferences the Fig-Simple cache library that we also have to install manually. Go to the php-fig/simple-cache page and download the required zip file (name is simple-cache-master.zip).
- 
        Unzip that in a temprary directory and move all three files from the srcfolder toAPP/Vendors/Psr/SimpleCache.
- 
        Open your APP/Config/bootstrap.phpfile and place the following code at the end./** * Configure the autoloader */ spl_autoload_register( function($class) { foreach(App::path('Vendor') as $base) { $path = $base . str_replace('\\', DS, $class) . '.php'; if (file_exists($path)) return include $path; } }, true);
- 
        That's it. If you want to use the Spreadsheet class, all you have to do is place a 
        use PhpOffice\PhpSpreadsheet\Spreadsheet;statement at the top of your file and then any reference like_xls = new Spreadsheet();will work just fine.
A few afterwords
    What we actually accomplished here is that we instructed the php class loader to search for any class 
    it does not know about inside a speciffic sub folder of our APP/Vendors. This subfolder structure, must confirm 
    to the exact package name of the class. Hence we created the PhpOffice/PhpSpreadsheet and Psr/SimpleCache
    subfolders. Using this technique we may add any additional library into our CakePHP2 application provided that
    we keep this naming standard. My setup was a CentOS 6.10 web server with PHP 5.6.37 (from Remi).
Once again, CakePHP3 and composer can make this job extremely easier, so unless you really have to, do not go into all this fass ;)
 
 
