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:
parent
16953e27d8
commit
579145eb3c
|
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
namespace PhpOffice\PhpSpreadsheet\Reader;
|
namespace PhpOffice\PhpSpreadsheet\Reader;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||||
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
|
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
|
||||||
use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner;
|
use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner;
|
||||||
use PhpOffice\PhpSpreadsheet\Shared\File;
|
use PhpOffice\PhpSpreadsheet\Shared\File;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
|
||||||
abstract class BaseReader implements IReader
|
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.
|
* Open file for reading.
|
||||||
*
|
|
||||||
* @param string $filename
|
|
||||||
*/
|
*/
|
||||||
protected function openFile($filename): void
|
protected function openFile(string $filename): void
|
||||||
{
|
{
|
||||||
|
$fileHandle = false;
|
||||||
if ($filename) {
|
if ($filename) {
|
||||||
File::assertFile($filename);
|
File::assertFile($filename);
|
||||||
|
|
||||||
// Open file
|
// Open file
|
||||||
$fileHandle = fopen($filename, 'rb');
|
$fileHandle = fopen($filename, 'rb');
|
||||||
} else {
|
|
||||||
$fileHandle = false;
|
|
||||||
}
|
}
|
||||||
if ($fileHandle !== false) {
|
if ($fileHandle === false) {
|
||||||
$this->fileHandle = $fileHandle;
|
|
||||||
} else {
|
|
||||||
throw new ReaderException('Could not open file ' . $filename . ' for reading.');
|
throw new ReaderException('Could not open file ' . $filename . ' for reading.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->fileHandle = $fileHandle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -236,13 +236,9 @@ class Csv extends BaseReader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads Spreadsheet from file.
|
* 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
|
// Create new Spreadsheet
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -227,13 +227,9 @@ class Gnumeric extends BaseReader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads Spreadsheet from file.
|
* 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
|
// Create new Spreadsheet
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
$spreadsheet->removeSheetByIndex(0);
|
$spreadsheet->removeSheetByIndex(0);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
|
||||||
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
/** PhpSpreadsheet root directory */
|
|
||||||
class Html extends BaseReader
|
class Html extends BaseReader
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|
@ -201,13 +200,9 @@ class Html extends BaseReader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads Spreadsheet from file.
|
* 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
|
// Create new Spreadsheet
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -217,13 +217,9 @@ class Ods extends BaseReader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads PhpSpreadsheet from file.
|
* 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
|
// Create new Spreadsheet
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -191,13 +191,9 @@ class Slk extends BaseReader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads PhpSpreadsheet from file.
|
* 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
|
// Create new Spreadsheet
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -620,13 +620,9 @@ class Xls extends BaseReader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads PhpSpreadsheet from file.
|
* 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
|
// Read the OLE file
|
||||||
$this->loadOLE($filename);
|
$this->loadOLE($filename);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -384,10 +384,9 @@ class Xlsx extends BaseReader
|
||||||
/**
|
/**
|
||||||
* Loads Spreadsheet from file.
|
* 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);
|
File::assertFile($filename, self::INITIAL_FILE);
|
||||||
$this->processFlags($flags);
|
|
||||||
|
|
||||||
// Initialisations
|
// Initialisations
|
||||||
$excel = new Spreadsheet();
|
$excel = new Spreadsheet();
|
||||||
|
|
|
||||||
|
|
@ -231,13 +231,9 @@ class Xml extends BaseReader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads Spreadsheet from file.
|
* 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
|
// Create new Spreadsheet
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
$spreadsheet->removeSheetByIndex(0);
|
$spreadsheet->removeSheetByIndex(0);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions;
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
class CalclationFunctionListTest extends TestCase
|
class CalculationFunctionListTest extends TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
Loading…
Reference in New Issue