I have a project where I have successfully used Symfony's deprecated Psr4ClassLoader: https://github.com/symfony/class-loader/blob/master/Psr4ClassLoader.php
Using this classloader is great if you need to do PSR4 style autoloading.
As an example:
require_once FCPATH . 'Psr4ClassLoader.php';
$loader = new Symfony\Component\ClassLoader\Psr4ClassLoader();
$loader->addPrefix('Skunkbad\Console', FCPATH . 'vendor/skunkbad/console/src');
$loader->register();
In that example, I am using a Console class, and I get to declare the namespace, and the location of the directory that the namespace is from.
$c = new Skunkbad\Console\Console('ChromePhp');
$c->log([1,2,3,4,5]);
Now I can load the Console class, and in this case I am passing in "ChromePhp" as a constructor parameter. Then I proceed to call the log method on my console object.
In your case, since the namespaced class is PhpOffice\PhpSpreadsheet\Spreadsheet, then you'd probably do something like this:
require_once __DIR__ . '/path/to/Psr4ClassLoader.php';
$loader = new Symfony\Component\ClassLoader\Psr4ClassLoader();
$loader->addPrefix('PhpOffice\PhpSpreadsheet', FCPATH . 'vendor/phpoffice/phpspreadsheet/src');
$loader->register();
And then use it like:
$x = new PhpOffice\PhpSpreadsheet\Spreadsheet();
Please understand, I don't know the specifics of working with your Spreadsheet class, but I'm showing you how you can use it without Composer. You're probably going to have to play around with the path to the package, and perhaps the namespace itself.