Wrap actual file loading in protected methods, while just providing a stub `load()` method in the BaseReader abstract. This is to allow a wrapper in the file loader logic across all Readers, with a try/catch block that can be used to handle special loader settings. (#2620)

This commit is contained in:
Mark Baker 2022-02-23 21:31:57 +01:00 committed by GitHub
parent 16953e27d8
commit 579145eb3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 35 additions and 47 deletions

View File

@ -2,9 +2,11 @@
namespace PhpOffice\PhpSpreadsheet\Reader;
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner;
use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
abstract class BaseReader implements IReader
{
@ -144,25 +146,41 @@ abstract class BaseReader implements IReader
}
}
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
throw new PhpSpreadsheetException('Reader classes must implement their own loadSpreadsheetFromFile() method');
}
/**
* Loads Spreadsheet from file.
*/
public function load(string $filename, int $flags = 0): Spreadsheet
{
$this->processFlags($flags);
try {
return $this->loadSpreadsheetFromFile($filename);
} catch (ReaderException $e) {
throw $e;
}
}
/**
* Open file for reading.
*
* @param string $filename
*/
protected function openFile($filename): void
protected function openFile(string $filename): void
{
$fileHandle = false;
if ($filename) {
File::assertFile($filename);
// Open file
$fileHandle = fopen($filename, 'rb');
} else {
$fileHandle = false;
}
if ($fileHandle !== false) {
$this->fileHandle = $fileHandle;
} else {
if ($fileHandle === false) {
throw new ReaderException('Could not open file ' . $filename . ' for reading.');
}
$this->fileHandle = $fileHandle;
}
}

View File

@ -236,13 +236,9 @@ class Csv extends BaseReader
/**
* Loads Spreadsheet from file.
*
* @return Spreadsheet
*/
public function load(string $filename, int $flags = 0)
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
$this->processFlags($flags);
// Create new Spreadsheet
$spreadsheet = new Spreadsheet();

View File

@ -227,13 +227,9 @@ class Gnumeric extends BaseReader
/**
* Loads Spreadsheet from file.
*
* @return Spreadsheet
*/
public function load(string $filename, int $flags = 0)
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
$this->processFlags($flags);
// Create new Spreadsheet
$spreadsheet = new Spreadsheet();
$spreadsheet->removeSheetByIndex(0);

View File

@ -19,7 +19,6 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Throwable;
/** PhpSpreadsheet root directory */
class Html extends BaseReader
{
/**
@ -201,13 +200,9 @@ class Html extends BaseReader
/**
* Loads Spreadsheet from file.
*
* @return Spreadsheet
*/
public function load(string $filename, int $flags = 0)
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
$this->processFlags($flags);
// Create new Spreadsheet
$spreadsheet = new Spreadsheet();

View File

@ -217,13 +217,9 @@ class Ods extends BaseReader
/**
* Loads PhpSpreadsheet from file.
*
* @return Spreadsheet
*/
public function load(string $filename, int $flags = 0)
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
$this->processFlags($flags);
// Create new Spreadsheet
$spreadsheet = new Spreadsheet();

View File

@ -191,13 +191,9 @@ class Slk extends BaseReader
/**
* Loads PhpSpreadsheet from file.
*
* @return Spreadsheet
*/
public function load(string $filename, int $flags = 0)
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
$this->processFlags($flags);
// Create new Spreadsheet
$spreadsheet = new Spreadsheet();

View File

@ -620,13 +620,9 @@ class Xls extends BaseReader
/**
* Loads PhpSpreadsheet from file.
*
* @return Spreadsheet
*/
public function load(string $filename, int $flags = 0)
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
$this->processFlags($flags);
// Read the OLE file
$this->loadOLE($filename);

View File

@ -384,10 +384,9 @@ class Xlsx extends BaseReader
/**
* Loads Spreadsheet from file.
*/
public function load(string $filename, int $flags = 0): Spreadsheet
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
File::assertFile($filename, self::INITIAL_FILE);
$this->processFlags($flags);
// Initialisations
$excel = new Spreadsheet();

View File

@ -231,13 +231,9 @@ class Xml extends BaseReader
/**
* Loads Spreadsheet from file.
*
* @return Spreadsheet
*/
public function load(string $filename, int $flags = 0)
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
{
$this->processFlags($flags);
// Create new Spreadsheet
$spreadsheet = new Spreadsheet();
$spreadsheet->removeSheetByIndex(0);

View File

@ -7,7 +7,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PHPUnit\Framework\TestCase;
class CalclationFunctionListTest extends TestCase
class CalculationFunctionListTest extends TestCase
{
/**
* @var string