| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace PhpOffice\PhpSpreadsheetTests\Reader\Xml;
- use DateTimeZone;
- use PhpOffice\PhpSpreadsheet\Reader\Xml;
- use PhpOffice\PhpSpreadsheet\Settings;
- use PhpOffice\PhpSpreadsheet\Shared\Date;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PHPUnit\Framework\TestCase;
- class XmlLoadTest extends TestCase
- {
- /** @var ?Spreadsheet */
- private $spreadsheet;
- /** @var string */
- private $locale;
- protected function setUp(): void
- {
- $this->locale = Settings::getLocale();
- }
- protected function tearDown(): void
- {
- if ($this->spreadsheet !== null) {
- $this->spreadsheet->disconnectWorksheets();
- $this->spreadsheet = null;
- }
- Settings::setLocale($this->locale);
- }
- public function testLoadEnglish(): void
- {
- $this->xtestLoad();
- }
- public function testLoadFrench(): void
- {
- Settings::setLocale('fr');
- $this->xtestLoad();
- }
- public function xtestLoad(): void
- {
- $filename = __DIR__
- . '/../../../..'
- . '/samples/templates/excel2003.xml';
- $reader = new Xml();
- $this->spreadsheet = $spreadsheet = $reader->load($filename);
- self::assertEquals(2, $spreadsheet->getSheetCount());
- $sheet = $spreadsheet->getSheet(1);
- self::assertEquals('Report Data', $sheet->getTitle());
- self::assertEquals('BCD', $sheet->getCell('A4')->getValue());
- $props = $spreadsheet->getProperties();
- self::assertEquals('Mark Baker', $props->getCreator());
- $creationDate = $props->getCreated();
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
- self::assertEquals('2010-09-02T20:48:39Z', $result);
- $creationDate = $props->getModified();
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
- self::assertEquals('2010-09-03T21:48:39Z', $result);
- self::assertEquals('AbCd1234', $props->getCustomPropertyValue('my_API_Token'));
- self::assertEquals('2', $props->getCustomPropertyValue('myאInt'));
- $creationDate = $props->getCustomPropertyValue('my_API_Token_Expiry');
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
- self::assertEquals('2019-01-31T07:00:00Z', $result);
- $sheet = $spreadsheet->getSheet(0);
- self::assertEquals('Sample Data', $sheet->getTitle());
- self::assertEquals('Test String 1', $sheet->getCell('A1')->getValue());
- self::assertEquals('Test with (") in string', $sheet->getCell('A4')->getValue());
- self::assertEquals(22269, $sheet->getCell('A10')->getValue());
- self::assertEquals('dd/mm/yyyy', $sheet->getCell('A10')->getStyle()->getNumberFormat()->getFormatCode());
- self::assertEquals('19/12/1960', $sheet->getCell('A10')->getFormattedValue());
- self::assertEquals(1.5, $sheet->getCell('A11')->getValue());
- self::assertEquals('# ?0/??0', $sheet->getCell('A11')->getStyle()->getNumberFormat()->getFormatCode());
- // Same pattern, same value, different display in Gnumeric vs Excel
- //self::assertEquals('1 1/2', $sheet->getCell('A11')->getFormattedValue());
- self::assertEquals('hh":"mm":"ss', $sheet->getCell('A13')->getStyle()->getNumberFormat()->getFormatCode());
- self::assertEquals('02:30:00', $sheet->getCell('A13')->getFormattedValue());
- self::assertEquals('d/m/yy hh":"mm', $sheet->getCell('A15')->getStyle()->getNumberFormat()->getFormatCode());
- self::assertEquals('19/12/60 01:30', $sheet->getCell('A15')->getFormattedValue());
- self::assertEquals('=B1+C1', $sheet->getCell('H1')->getValue());
- self::assertEquals('=E2&F2', $sheet->getCell('J2')->getValue());
- self::assertEquals('=SUM(C1:C4)', $sheet->getCell('I5')->getValue());
- // property not yet supported
- //self::assertFalse($sheet->getRowDimension(30)->getVisible());
- $hyperlink = $sheet->getCell('A21');
- self::assertEquals('PhpSpreadsheet', $hyperlink->getValue());
- self::assertEquals('https://github.com/PHPOffice/PhpSpreadsheet', $hyperlink->getHyperlink()->getUrl());
- }
- public function testLoadFilter(): void
- {
- $filename = __DIR__
- . '/../../../..'
- . '/samples/templates/excel2003.xml';
- $reader = new Xml();
- $filter = new XmlFilter();
- $reader->setReadFilter($filter);
- $this->spreadsheet = $spreadsheet = $reader->load($filename);
- self::assertEquals(2, $spreadsheet->getSheetCount());
- $sheet = $spreadsheet->getSheet(1);
- self::assertEquals('Report Data', $sheet->getTitle());
- self::assertEquals('', $sheet->getCell('A4')->getValue());
- $props = $spreadsheet->getProperties();
- self::assertEquals('Mark Baker', $props->getCreator());
- }
- public function testLoadSelectedSheets(): void
- {
- $filename = __DIR__
- . '/../../../..'
- . '/samples/templates/excel2003.xml';
- $reader = new Xml();
- $reader->setLoadSheetsOnly(['Unknown Sheet', 'Report Data']);
- $this->spreadsheet = $spreadsheet = $reader->load($filename);
- self::assertEquals(1, $spreadsheet->getSheetCount());
- $sheet = $spreadsheet->getSheet(0);
- self::assertEquals('Report Data', $sheet->getTitle());
- self::assertEquals('Third Heading', $sheet->getCell('C2')->getValue());
- }
- public function testLoadUnusableSample(): void
- {
- // Sample spreadsheet is not readable by Excel.
- // But PhpSpreadsheet can load it.
- $filename = __DIR__
- . '/../../../..'
- . '/samples/templates/excel2003.short.bad.xml';
- $reader = new Xml();
- $this->spreadsheet = $spreadsheet = $reader->load($filename);
- self::assertEquals(1, $spreadsheet->getSheetCount());
- $sheet = $spreadsheet->getSheet(0);
- self::assertEquals('Sample Data', $sheet->getTitle());
- }
- }
|