'PHPSpreadsheet - How Do I Use Auto Migration Tool

I'm a long time reader, but new to asking questions. Please correct me if I have somehow asked incorrectly.

Intro

We are upgrading our servers from PHP 5.4 to PHP 7.2 and one of the libraries that is not fully compatible with the new version of PHP is PHPExcel. So, we are upgrading to PHPSpreadsheet as well. A lot of our projects use PHPExcel in different ways, so if I can get the Auto Migrate tool to work, it would be a huge time save for me even if it misses some things.

The instructions to use the tool are found here: https://phpspreadsheet.readthedocs.io/en/develop/topics/migration-from-PHPExcel/

And they simply say to use the following command after installing via Composer (which I've done):

cd /project/to/migrate/src
/project/to/migrate/vendor/phpoffice/phpspreadsheet/bin/migrate-from-phpexcel

Problem

I am able to execute the migrator fine, but it only scans files inside the "vendor/phpoffice/phpspreadsheet" directory. It does not scan any files inside my project at all.


How do I get the migration script to scan my projects files, and not it's own files?


Local Environment

  1. Windows 10
  2. Latest XAMPP
  3. PHP 7.2.11

How I Am Running It

cd C:\path\to\project\that\uses\phpexcel
php vendor\phpoffice\phpspreadsheet\bin\migrate-from-phpexcel

How I have Tried To Solve So Far

  1. Running the exact command on the instructions page (ends up running two commands, second one is an invalid command)
  2. Moving "migrate-from-phpexcel" to my project root and running it there
  3. Editing "migrate-from-phpexcel" after moving to project root and pointing to the Bootstrap.php file (Runs, but only inside the library itself. Same problem)


Solution 1:[1]

I don't know how, or from where, you ran the 2nd command but that command traversed my whole project and made what looks like appropriate conversions. I ran it from project root while I was IN my IDE (PhpStorm, using its 'Run Command' tool). I ran the same command you did, like this:

 php vendor\phpoffice\phpspreadsheet\bin\migrate-from-phpexcel  

After confirming "yes", I saw it traverse the directory, changing various files but skipping its OWN files. When I tested my script, I encountered a warning about 'a non-numeric value' from one of its modules (Coordinate.php on line 312 & line 313). I did some research on the warning but couldn't find anything to address it except people blaming PHP 7.1** (I'm running 7.2.*). So I suppressed the warning and my spreadsheet was created exactly as I specified. Here is my first statement in my 'create excel' script:

 error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING); 

The only other "manual" change I had to make was changing the file format of the 'createWriter' from 'Excel2007' to 'Xlsx' -- exactly as it states in the docs. A more complicated spreadsheet may require more manual work, but probably not as much as someone above indicated.

Solution 2:[2]

In case it helps someone else: while updating a legacy project that was using PhpExcel v1.8.2, running rector on the codebase failed on most of the files that needed to be processed, with the error:

[ERROR] Could not process "test.php" file, due to:                                                
         "Analyze error: "PHPExcel_Writer_Exception (Unable to load PDF Rendering library) thrown while looking 
         for class PHPExcel_Writer_PDF_DomPDF.". Include your files in "$parameters->set(Option::AUTOLOAD_PATHS,
         [...]);" in "rector.php" config.                                                                       
         See https://github.com/rectorphp/rector#configuration". 

To get around this, I followed suggestions here: https://github.com/rectorphp/rector/issues/6418#issuecomment-882923495 and commented out lines in the PhpExcel install itself - the lines containing throw new PHPExcel_Writer_Exception('Unable to load PDF Rendering library'); in files DomPDF.php, mPDF.php, tcPDF.php in Classes/PHPExcel/Writer/PDF/

Solution 3:[3]

2022+ Automated Upgrade Approach

Discalimer: I wrote a tool that handles automated migration from CLI called Rector, so people don't have to upgrade PHP code manually anymore. It's free, open-source, on GitHub.


The offical migration tool only fixes class names. There are 24 more cases, that needs to be changed, lLike mentioned "'Excel2007' to 'Xlsx'".

We needed to upgrade huge PHP project and manual changes would take too much time and could stuck us for weeks. Instead, we made an upgrade set with all 25 cases, that changed code for us:


In 4 steps ?

1. Install Rector to your PHP project

composer install rector/rector --dev

2. Create rector.php config

vendor/bin/rector init

3. Add the spreadsheet set:

use Rector\PHPOffice\Set\PHPOfficeSetList;
use Rector\Config\RectorConfig;

return static function (RectorConfig $rectorConfig) {
    $rectorConfig->sets([PHPOfficeSetList::PHPEXCEL_TO_PHPSPREADSHEET]);
};

4. Run Rector on your code

# to see diff with no changes
vendor/bin/rector process src --dry-run


# to make changes happen
vendor/bin/rector process src

If you want to read more, we wrote a short post about it

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 pilotfryer
Solution 3