mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-15 12:36:32 +00:00
Merge branch 'master' into powerkiki
This commit is contained in:
@@ -450,12 +450,9 @@ class Cell
|
||||
*/
|
||||
public function setDataType($dataType): self
|
||||
{
|
||||
if ($dataType == DataType::TYPE_STRING2) {
|
||||
$dataType = DataType::TYPE_STRING;
|
||||
}
|
||||
$this->dataType = $dataType;
|
||||
$this->setValueExplicit($this->value, $dataType);
|
||||
|
||||
return $this->updateInCollection();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -39,6 +39,7 @@ abstract class BaseReader implements IReader
|
||||
/**
|
||||
* Restrict which sheets should be loaded?
|
||||
* This property holds an array of worksheet names to be loaded. If null, then all worksheets will be loaded.
|
||||
* This property is ignored for Csv, Html, and Slk.
|
||||
*
|
||||
* @var null|string[]
|
||||
*/
|
||||
@@ -200,4 +201,39 @@ abstract class BaseReader implements IReader
|
||||
|
||||
$this->fileHandle = $fileHandle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns).
|
||||
*
|
||||
* @param string $filename
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function listWorksheetInfo($filename)
|
||||
{
|
||||
throw new PhpSpreadsheetException('Reader classes must implement their own listWorksheetInfo() method');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns names of the worksheets from a file,
|
||||
* possibly without parsing the whole file to a Spreadsheet object.
|
||||
* Readers will often have a more efficient method with which
|
||||
* they can override this method.
|
||||
*
|
||||
* @param string $filename
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function listWorksheetNames($filename)
|
||||
{
|
||||
$returnArray = [];
|
||||
$info = $this->listWorksheetInfo($filename);
|
||||
foreach ($info as $infoArray) {
|
||||
if (isset($infoArray['worksheetName'])) {
|
||||
$returnArray[] = $infoArray['worksheetName'];
|
||||
}
|
||||
}
|
||||
|
||||
return $returnArray;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
||||
|
||||
class Csv extends BaseReader
|
||||
{
|
||||
@@ -98,6 +99,9 @@ class Csv extends BaseReader
|
||||
/** @var bool */
|
||||
private $preserveNullString = false;
|
||||
|
||||
/** @var bool */
|
||||
private $sheetNameIsFileName = false;
|
||||
|
||||
/**
|
||||
* Create a new CSV Reader instance.
|
||||
*/
|
||||
@@ -212,8 +216,12 @@ class Csv extends BaseReader
|
||||
|
||||
/**
|
||||
* Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns).
|
||||
*
|
||||
* @param string $filename
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function listWorksheetInfo(string $filename): array
|
||||
public function listWorksheetInfo($filename)
|
||||
{
|
||||
// Open file
|
||||
$this->openFileOrMemory($filename);
|
||||
@@ -373,6 +381,9 @@ class Csv extends BaseReader
|
||||
$spreadsheet->createSheet();
|
||||
}
|
||||
$sheet = $spreadsheet->setActiveSheetIndex($this->sheetIndex);
|
||||
if ($this->sheetNameIsFileName) {
|
||||
$sheet->setTitle(substr(basename($filename, '.csv'), 0, Worksheet::SHEET_TITLE_MAXIMUM_LENGTH));
|
||||
}
|
||||
|
||||
// Set our starting row based on whether we're in contiguous mode or not
|
||||
$currentRow = 1;
|
||||
@@ -635,4 +646,11 @@ class Csv extends BaseReader
|
||||
{
|
||||
return $this->preserveNullString;
|
||||
}
|
||||
|
||||
public function setSheetNameIsFileName(bool $sheetNameIsFileName): self
|
||||
{
|
||||
$this->sheetNameIsFileName = $sheetNameIsFileName;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1164,4 +1164,29 @@ class Html extends BaseReader
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns).
|
||||
*
|
||||
* @param string $filename
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function listWorksheetInfo($filename)
|
||||
{
|
||||
$info = [];
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$this->loadIntoExisting($filename, $spreadsheet);
|
||||
foreach ($spreadsheet->getAllSheets() as $sheet) {
|
||||
$newEntry = ['worksheetName' => $sheet->getTitle()];
|
||||
$newEntry['lastColumnLetter'] = $sheet->getHighestDataColumn();
|
||||
$newEntry['lastColumnIndex'] = Coordinate::columnIndexFromString($sheet->getHighestDataColumn()) - 1;
|
||||
$newEntry['totalRows'] = $sheet->getHighestDataRow();
|
||||
$newEntry['totalColumns'] = $newEntry['lastColumnIndex'] + 1;
|
||||
$info[] = $newEntry;
|
||||
}
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
|
||||
return $info;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,6 +234,7 @@ class Ods extends BaseReader
|
||||
{
|
||||
// Create new Spreadsheet
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$spreadsheet->removeSheetByIndex(0);
|
||||
|
||||
// Load into this instance
|
||||
return $this->loadIntoExisting($filename, $spreadsheet);
|
||||
@@ -335,9 +336,7 @@ class Ods extends BaseReader
|
||||
$worksheetStyleName = $worksheetDataSet->getAttributeNS($tableNs, 'style-name');
|
||||
|
||||
// Create sheet
|
||||
if ($worksheetID > 0) {
|
||||
$spreadsheet->createSheet(); // First sheet is added by default
|
||||
}
|
||||
$spreadsheet->createSheet();
|
||||
$spreadsheet->setActiveSheetIndex($worksheetID);
|
||||
|
||||
if ($worksheetName || is_numeric($worksheetName)) {
|
||||
|
||||
@@ -165,7 +165,7 @@ class Slk extends BaseReader
|
||||
|
||||
break;
|
||||
case 'Y':
|
||||
$rowIndex = substr($rowDatum, 1);
|
||||
$rowIndex = (int) substr($rowDatum, 1);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -416,6 +416,9 @@ class Xls extends BaseReader
|
||||
*/
|
||||
private $baseCell;
|
||||
|
||||
/** @var bool */
|
||||
private $activeSheetSet = false;
|
||||
|
||||
/**
|
||||
* Create a new Xls Reader instance.
|
||||
*/
|
||||
@@ -820,6 +823,7 @@ class Xls extends BaseReader
|
||||
}
|
||||
|
||||
// Parse the individual sheets
|
||||
$this->activeSheetSet = false;
|
||||
foreach ($this->sheets as $sheet) {
|
||||
if ($sheet['sheetType'] != 0x00) {
|
||||
// 0x00: Worksheet, 0x02: Chart, 0x06: Visual Basic module
|
||||
@@ -1231,6 +1235,9 @@ class Xls extends BaseReader
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($this->activeSheetSet === false) {
|
||||
$this->spreadsheet->setActiveSheetIndex(0);
|
||||
}
|
||||
|
||||
// add the named ranges (defined names)
|
||||
foreach ($this->definedname as $definedName) {
|
||||
@@ -4389,6 +4396,7 @@ class Xls extends BaseReader
|
||||
$isActive = (bool) ((0x0400 & $options) >> 10);
|
||||
if ($isActive) {
|
||||
$this->spreadsheet->setActiveSheetIndex($this->spreadsheet->getIndex($this->phpSheet));
|
||||
$this->activeSheetSet = true;
|
||||
}
|
||||
|
||||
// bit: 11; mask: 0x0800; 0 = normal view, 1 = page break view
|
||||
|
||||
@@ -19,9 +19,6 @@ class WorkbookView
|
||||
*/
|
||||
public function viewSettings(SimpleXMLElement $xmlWorkbook, $mainNS, array $mapSheetId, bool $readDataOnly): void
|
||||
{
|
||||
if ($this->spreadsheet->getSheetCount() == 0) {
|
||||
$this->spreadsheet->createSheet();
|
||||
}
|
||||
// Default active sheet index to the first loaded worksheet from the file
|
||||
$this->spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Cell;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
||||
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class DataType2Test extends TestCase
|
||||
{
|
||||
public function testSetDataType(): void
|
||||
{
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$sheet->getCell('A1')->setValue(28.1);
|
||||
self::assertSame(28.1, $sheet->getCell('A1')->getValue());
|
||||
self::assertSame('28.1', (string) $sheet->getCell('A1'));
|
||||
$sheet->getCell('A1')->setDataType(DataType::TYPE_STRING);
|
||||
self::assertSame('28.1', $sheet->getCell('A1')->getValue());
|
||||
$sheet->getCell('A1')->setDataType(DataType::TYPE_NUMERIC);
|
||||
self::assertSame(28.1, $sheet->getCell('A1')->getValue());
|
||||
$sheet->getCell('A1')->setDataType(DataType::TYPE_STRING2);
|
||||
self::assertSame('28.1', $sheet->getCell('A1')->getValue());
|
||||
$sheet->getCell('A1')->setDataType(DataType::TYPE_INLINE);
|
||||
self::assertSame('28.1', $sheet->getCell('A1')->getValue());
|
||||
$sheet->getCell('A1')->setDataType(DataType::TYPE_BOOL);
|
||||
self::assertTrue($sheet->getCell('A1')->getValue());
|
||||
$sheet->getCell('A1')->setDataType(DataType::TYPE_NUMERIC);
|
||||
self::assertSame(1, $sheet->getCell('A1')->getValue());
|
||||
|
||||
$sheet->getCell('A2')->setValue('X');
|
||||
|
||||
try {
|
||||
$sheet->getCell('A2')->setDataType(DataType::TYPE_NUMERIC);
|
||||
} catch (PhpSpreadsheetException $e) {
|
||||
self::assertSame('Invalid numeric value for datatype Numeric', $e->getMessage());
|
||||
}
|
||||
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
@@ -12,9 +12,4 @@ class BaseNoLoad extends BaseReader
|
||||
{
|
||||
return $filename !== '';
|
||||
}
|
||||
|
||||
public function loadxxx(string $filename): void
|
||||
{
|
||||
$this->loadSpreadsheetFromFile($filename);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,14 @@ class BaseNoLoadTest extends TestCase
|
||||
$this->expectException(SpreadsheetException::class);
|
||||
$this->expectExceptionMessage('Reader classes must implement their own loadSpreadsheetFromFile() method');
|
||||
$reader = new BaseNoLoad();
|
||||
$reader->loadxxx('unknown.file');
|
||||
$reader->load('unknown.file');
|
||||
}
|
||||
|
||||
public function testBaseNoLoadInfo(): void
|
||||
{
|
||||
$this->expectException(SpreadsheetException::class);
|
||||
$this->expectExceptionMessage('Reader classes must implement their own listWorksheetInfo() method');
|
||||
$reader = new BaseNoLoad();
|
||||
$reader->listWorksheetInfo('unknown.file');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,12 +29,14 @@ class CsvCallbackTest extends TestCase
|
||||
$spreadsheet = $reader->load($filename);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertEquals('Å', $sheet->getCell('A1')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function callbackSetFallbackEncoding(Csv $reader): void
|
||||
{
|
||||
$reader->setFallbackEncoding('ISO-8859-2');
|
||||
$reader->setInputEncoding(Csv::GUESS_ENCODING);
|
||||
$reader->setSheetNameIsFileName(true);
|
||||
$reader->setEscapeCharacter('');
|
||||
}
|
||||
|
||||
@@ -47,6 +49,7 @@ class CsvCallbackTest extends TestCase
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertEquals('premičre', $sheet->getCell('A1')->getValue());
|
||||
self::assertEquals('sixičme', $sheet->getCell('C2')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testIOFactory(): void
|
||||
@@ -57,6 +60,7 @@ class CsvCallbackTest extends TestCase
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertEquals('premičre', $sheet->getCell('A1')->getValue());
|
||||
self::assertEquals('sixičme', $sheet->getCell('C2')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testNonFallbackEncoding(): void
|
||||
@@ -68,6 +72,7 @@ class CsvCallbackTest extends TestCase
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertEquals('première', $sheet->getCell('A1')->getValue());
|
||||
self::assertEquals('sixième', $sheet->getCell('C2')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testDefaultEscape(): void
|
||||
@@ -78,6 +83,7 @@ class CsvCallbackTest extends TestCase
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
// this is not how Excel views the file
|
||||
self::assertEquals('a\"hello', $sheet->getCell('A1')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testBetterEscape(): void
|
||||
@@ -88,5 +94,7 @@ class CsvCallbackTest extends TestCase
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
// this is how Excel views the file
|
||||
self::assertEquals('a\"hello;hello;hello;\"', $sheet->getCell('A1')->getValue());
|
||||
self::assertSame('escape', $sheet->getTitle(), 'callback set sheet title to use file name rather than default');
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,13 @@ class CsvEncodingTest extends TestCase
|
||||
$reader = new Csv();
|
||||
$reader->setInputEncoding($encoding);
|
||||
$info = $reader->listWorksheetInfo($filename);
|
||||
self::assertEquals('Worksheet', $info[0]['worksheetName']);
|
||||
self::assertEquals('B', $info[0]['lastColumnLetter']);
|
||||
self::assertEquals(1, $info[0]['lastColumnIndex']);
|
||||
self::assertEquals(2, $info[0]['totalRows']);
|
||||
self::assertEquals(2, $info[0]['totalColumns']);
|
||||
self::assertCount(1, $info);
|
||||
self::assertSame('Worksheet', $info[0]['worksheetName']);
|
||||
self::assertSame('B', $info[0]['lastColumnLetter']);
|
||||
self::assertSame(1, $info[0]['lastColumnIndex']);
|
||||
self::assertSame(2, $info[0]['totalRows']);
|
||||
self::assertSame(2, $info[0]['totalColumns']);
|
||||
self::assertSame(['Worksheet'], $reader->listWorksheetNames($filename));
|
||||
}
|
||||
|
||||
public static function providerEncodings(): array
|
||||
@@ -74,6 +76,9 @@ class CsvEncodingTest extends TestCase
|
||||
$filename = 'tests/data/Reader/CSV/premiere.utf16le.csv';
|
||||
$reader = new Csv();
|
||||
$reader->setInputEncoding(Csv::guessEncoding($filename));
|
||||
$names = $reader->listWorksheetNames($filename);
|
||||
// Following ignored, just make sure it's executable.
|
||||
$reader->setLoadSheetsOnly([$names[0]]);
|
||||
$spreadsheet = $reader->load($filename);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertEquals('𐐀', $sheet->getCell('A3')->getValue());
|
||||
|
||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Gnumeric;
|
||||
|
||||
use DateTimeZone;
|
||||
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Gnumeric;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\Date;
|
||||
@@ -172,6 +173,16 @@ class GnumericLoadTest extends TestCase
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testLoadNoSelectedSheets(): void
|
||||
{
|
||||
$this->expectException(PhpSpreadsheetException::class);
|
||||
$this->expectExceptionMessage('You tried to set a sheet active by the out of bounds index');
|
||||
$filename = 'samples/templates/GnumericTest.gnumeric';
|
||||
$reader = new Gnumeric();
|
||||
$reader->setLoadSheetsOnly(['Unknown Sheet', 'xReport Data']);
|
||||
$reader->load($filename);
|
||||
}
|
||||
|
||||
public function testLoadNotGnumeric(): void
|
||||
{
|
||||
$this->expectException(ReaderException::class);
|
||||
|
||||
@@ -16,6 +16,7 @@ class Issue2942Test extends TestCase
|
||||
$spreadsheet = $reader->loadFromString($content);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertSame('éàâèî', $sheet->getCell('A1')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testLoadFromFile(): void
|
||||
@@ -34,5 +35,30 @@ class Issue2942Test extends TestCase
|
||||
self::assertSame('അആ', $sheet->getCell('B3')->getValue());
|
||||
self::assertSame('กขฃ', $sheet->getCell('C3')->getValue());
|
||||
self::assertSame('✀✐✠', $sheet->getCell('D3')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testInfo(): void
|
||||
{
|
||||
$file = 'tests/data/Reader/HTML/utf8chars.charset.html';
|
||||
$reader = new Html();
|
||||
$info = $reader->listWorksheetInfo($file);
|
||||
self::assertCount(1, $info);
|
||||
$info0 = $info[0];
|
||||
self::assertSame('Test Utf-8 characters voilà', $info0['worksheetName']);
|
||||
self::assertSame('D', $info0['lastColumnLetter']);
|
||||
self::assertSame(3, $info0['lastColumnIndex']);
|
||||
self::assertSame(7, $info0['totalRows']);
|
||||
self::assertSame(4, $info0['totalColumns']);
|
||||
$names = $reader->listWorksheetNames($file);
|
||||
self::assertCount(1, $names);
|
||||
self::assertSame('Test Utf-8 characters voilà', $names[0]);
|
||||
|
||||
// Following ignored, just make sure it's executable.
|
||||
$reader->setLoadSheetsOnly([$names[0]]);
|
||||
$spreadsheet = $reader->load($file);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertSame('✀✐✠', $sheet->getCell('D3')->getValue());
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Ods;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
||||
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Ods;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
@@ -71,7 +72,9 @@ class OdsTest extends TestCase
|
||||
public function testLoadOneWorksheet(): void
|
||||
{
|
||||
$reader = new Ods();
|
||||
$reader->setLoadSheetsOnly(['Sheet1']);
|
||||
//$reader->setLoadSheetsOnly(['Sheet1']);
|
||||
$names = $reader->listWorksheetNames(self::ODS_DATA_FILE);
|
||||
$reader->setLoadSheetsOnly([$names[0]]);
|
||||
$spreadsheet = $reader->load(self::ODS_DATA_FILE);
|
||||
|
||||
self::assertEquals(1, $spreadsheet->getSheetCount());
|
||||
@@ -92,6 +95,15 @@ class OdsTest extends TestCase
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testLoadNoSelectedWorksheet(): void
|
||||
{
|
||||
$this->expectException(PhpSpreadsheetException::class);
|
||||
$this->expectExceptionMessage('You tried to set a sheet active by the out of bounds index');
|
||||
$reader = new Ods();
|
||||
$reader->setLoadSheetsOnly(['xSecond Sheet']);
|
||||
$reader->load(self::ODS_DATA_FILE);
|
||||
}
|
||||
|
||||
public function testLoadBadFile(): void
|
||||
{
|
||||
$this->expectException(ReaderException::class);
|
||||
|
||||
@@ -35,12 +35,14 @@ class SlkTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
$reader = new Slk();
|
||||
$workSheetInfo = $reader->listWorkSheetInfo(self::$testbook);
|
||||
self::assertCount(1, $workSheetInfo);
|
||||
$info0 = $workSheetInfo[0];
|
||||
self::assertEquals('SylkTest', $info0['worksheetName']);
|
||||
self::assertEquals('J', $info0['lastColumnLetter']);
|
||||
self::assertEquals(9, $info0['lastColumnIndex']);
|
||||
self::assertEquals(18, $info0['totalRows']);
|
||||
self::assertEquals(10, $info0['totalColumns']);
|
||||
self::assertSame('SylkTest', $info0['worksheetName']);
|
||||
self::assertSame('J', $info0['lastColumnLetter']);
|
||||
self::assertSame(9, $info0['lastColumnIndex']);
|
||||
self::assertSame(18, $info0['totalRows']);
|
||||
self::assertSame(10, $info0['totalColumns']);
|
||||
self::assertSame(['SylkTest'], $reader->listWorksheetNames(self::$testbook));
|
||||
}
|
||||
|
||||
public function testBadFileName(): void
|
||||
@@ -160,6 +162,9 @@ class SlkTest extends \PHPUnit\Framework\TestCase
|
||||
. '/123456789a123456789b123456789c12345.slk';
|
||||
file_put_contents($this->filename, $contents);
|
||||
$reader = new Slk();
|
||||
$names = $reader->listWorksheetNames($this->filename);
|
||||
// Following ignored, just make sure it's executable.
|
||||
$reader->setLoadSheetsOnly([$names[0]]);
|
||||
$spreadsheet = $reader->load($this->filename);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertEquals('123456789a123456789b123456789c1', $sheet->getTitle());
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xls;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xls;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class LoadSheetsOnlyTest extends TestCase
|
||||
{
|
||||
/** @var ?Spreadsheet */
|
||||
private $spreadsheet;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $testbook = 'tests/data/Reader/XLS/HiddenSheet.xls';
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
if ($this->spreadsheet !== null) {
|
||||
$this->spreadsheet->disconnectWorksheets();
|
||||
$this->spreadsheet = null;
|
||||
}
|
||||
}
|
||||
|
||||
public function testLoadSheet1Only(): void
|
||||
{
|
||||
$filename = self::$testbook;
|
||||
$reader = new Xls();
|
||||
//$reader->setLoadSheetsOnly(['Sheet1']);
|
||||
$names = $reader->listWorksheetNames($filename);
|
||||
$reader->setLoadSheetsOnly([$names[0]]);
|
||||
$this->spreadsheet = $reader->load($filename);
|
||||
self::assertSame(1, $this->spreadsheet->getSheetCount());
|
||||
self::assertSame('Sheet1', $this->spreadsheet->getActiveSheet()->getTitle());
|
||||
}
|
||||
|
||||
public function testLoadSheet2Only(): void
|
||||
{
|
||||
$filename = self::$testbook;
|
||||
$reader = new Xls();
|
||||
$reader->setLoadSheetsOnly(['Sheet2']);
|
||||
$this->spreadsheet = $reader->load($filename);
|
||||
self::assertSame(1, $this->spreadsheet->getSheetCount());
|
||||
self::assertSame('Sheet2', $this->spreadsheet->getActiveSheet()->getTitle());
|
||||
}
|
||||
|
||||
public function testLoadNoSheet(): void
|
||||
{
|
||||
$this->expectException(PhpSpreadsheetException::class);
|
||||
$this->expectExceptionMessage('You tried to set a sheet active by the out of bounds index');
|
||||
$filename = self::$testbook;
|
||||
$reader = new Xls();
|
||||
$reader->setLoadSheetsOnly(['Sheet3']);
|
||||
$reader->load($filename);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class LoadSheetsOnlyTest extends TestCase
|
||||
{
|
||||
/** @var ?Spreadsheet */
|
||||
private $spreadsheet;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $testbook = 'tests/data/Reader/XLSX/HiddenSheet.xlsx';
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
if ($this->spreadsheet !== null) {
|
||||
$this->spreadsheet->disconnectWorksheets();
|
||||
$this->spreadsheet = null;
|
||||
}
|
||||
}
|
||||
|
||||
public function testLoadSheet1Only(): void
|
||||
{
|
||||
$filename = self::$testbook;
|
||||
$reader = new Xlsx();
|
||||
//$reader->setLoadSheetsOnly(['Sheet1']);
|
||||
$names = $reader->listWorksheetNames($filename);
|
||||
$reader->setLoadSheetsOnly([$names[0]]);
|
||||
$this->spreadsheet = $reader->load($filename);
|
||||
self::assertSame(1, $this->spreadsheet->getSheetCount());
|
||||
self::assertSame('Sheet1', $this->spreadsheet->getActiveSheet()->getTitle());
|
||||
}
|
||||
|
||||
public function testLoadSheet2Only(): void
|
||||
{
|
||||
$filename = self::$testbook;
|
||||
$reader = new Xlsx();
|
||||
$reader->setLoadSheetsOnly(['Sheet2']);
|
||||
$this->spreadsheet = $reader->load($filename);
|
||||
self::assertSame(1, $this->spreadsheet->getSheetCount());
|
||||
self::assertSame('Sheet2', $this->spreadsheet->getActiveSheet()->getTitle());
|
||||
}
|
||||
|
||||
public function testLoadNoSheet(): void
|
||||
{
|
||||
$this->expectException(PhpSpreadsheetException::class);
|
||||
$this->expectExceptionMessage('You tried to set a sheet active by the out of bounds index');
|
||||
$filename = self::$testbook;
|
||||
$reader = new Xlsx();
|
||||
$reader->setLoadSheetsOnly(['Sheet3']);
|
||||
$reader->load($filename);
|
||||
}
|
||||
|
||||
public function testLoadMultipleSheets(): void
|
||||
{
|
||||
$filename = 'tests/data/Reader/XLSX/threesheets.xlsx';
|
||||
$reader = new Xlsx();
|
||||
$reader->setLoadSheetsOnly(['Sheet3', 'Sheet1']);
|
||||
$spreadsheet = $this->spreadsheet = $reader->load($filename);
|
||||
self::assertSame(2, $spreadsheet->getSheetCount());
|
||||
$sheet = $spreadsheet->getSheetByNameOrThrow('Sheet1');
|
||||
self::assertSame('First', $sheet->getCell('A1')->getValue());
|
||||
$sheet = $spreadsheet->getSheetByNameOrThrow('Sheet3');
|
||||
self::assertSame('Third', $sheet->getCell('A1')->getValue());
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xml;
|
||||
|
||||
use DateTimeZone;
|
||||
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xml;
|
||||
use PhpOffice\PhpSpreadsheet\Settings;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\Date;
|
||||
@@ -128,6 +129,18 @@ class XmlLoadTest extends TestCase
|
||||
self::assertEquals('Third Heading', $sheet->getCell('C2')->getValue());
|
||||
}
|
||||
|
||||
public function testLoadNoSelectedSheets(): void
|
||||
{
|
||||
$this->expectException(PhpSpreadsheetException::class);
|
||||
$this->expectExceptionMessage('You tried to set a sheet active by the out of bounds index');
|
||||
$filename = __DIR__
|
||||
. '/../../../..'
|
||||
. '/samples/templates/excel2003.xml';
|
||||
$reader = new Xml();
|
||||
$reader->setLoadSheetsOnly(['Unknown Sheet', 'xReport Data']);
|
||||
$this->spreadsheet = $reader->load($filename);
|
||||
}
|
||||
|
||||
public function testLoadUnusableSample(): void
|
||||
{
|
||||
// Sample spreadsheet is not readable by Excel.
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
|
||||
|
||||
class Issue3711Test extends AbstractFunctional
|
||||
{
|
||||
public function testIssue3711(): void
|
||||
{
|
||||
// Issue 3711 - float being used as index in StringTable.
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$sheet->getCell('A1')->setValue('21.5');
|
||||
self::assertSame(21.5, $sheet->getCell('A1')->getValue());
|
||||
$sheet->getCell('A1')->setDataType(DataType::TYPE_STRING);
|
||||
$sheet->getCell('A2')->setValue('21');
|
||||
self::assertSame(21, $sheet->getCell('A2')->getValue());
|
||||
$sheet->getCell('A2')->setDataType(DataType::TYPE_STRING);
|
||||
|
||||
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
$rsheet = $reloadedSpreadsheet->getActiveSheet();
|
||||
self::assertSame('21.5', $rsheet->getCell('A1')->getValue());
|
||||
self::assertSame('21', $rsheet->getCell('A2')->getValue());
|
||||
$reloadedSpreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='UTF-8'>
|
||||
<title>Test Utf-8 characters voilà</title>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>éàâèî</td><!-- Latin1 -->
|
||||
<td>αβγδε</td><!-- Greek -->
|
||||
</tr>
|
||||
<tr>
|
||||
<td>𐐁𐐂𐐃 & だけち</td><!-- Osmanya (not in BMP) and Hiragana -->
|
||||
<td>אבגדה</td><!-- Hebrew -->
|
||||
<td>𪔀𪔁𪔂</td><!-- CJK Unified Ideographs Extension B (not in BMP) -->
|
||||
</tr>
|
||||
<tr>
|
||||
<td>᠐᠑᠒</td><!-- Mongolian -->
|
||||
<td>അആ</td><!-- Malayalam -->
|
||||
<td>กขฃ</td><!-- Thai -->
|
||||
<td>✀✐✠</td><!-- Dingbats -->
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>second table</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>third table</td>
|
||||
<td>second cell</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Reference in New Issue
Block a user