Merge branch 'master' into issue3951

This commit is contained in:
oleibman
2024-03-24 17:40:54 -07:00
committed by GitHub
116 changed files with 2081 additions and 30 deletions
@@ -0,0 +1,120 @@
<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Style;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PHPUnit\Framework\TestCase;
class NumberFormatSystemDateTimeTest extends TestCase
{
private string $shortDateFormat;
private string $longDateFormat;
private string $dateTimeFormat;
private string $timeFormat;
protected function setUp(): void
{
$this->shortDateFormat = NumberFormat::getShortDateFormat();
$this->longDateFormat = NumberFormat::getLongDateFormat();
$this->dateTimeFormat = NumberFormat::getDateTimeFormat();
$this->timeFormat = NumberFormat::getTimeFormat();
}
protected function tearDown(): void
{
NumberFormat::setShortDateFormat($this->shortDateFormat);
NumberFormat::setLongDateFormat($this->longDateFormat);
NumberFormat::setDateTimeFormat($this->dateTimeFormat);
NumberFormat::setTimeFormat($this->timeFormat);
}
public function testOverrides(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$formula = '=DATEVALUE("2024-02-29")+TIMEVALUE("8:12:15 AM")';
$sheet->getCell('A1')->setValue($formula);
$sheet->getCell('A2')->setValue($formula);
$sheet->getStyle('A2')->getNumberFormat()
->setBuiltinFormatCode(14);
$sheet->getCell('A3')->setValue($formula);
$sheet->getStyle('A3')->getNumberFormat()
->setBuiltinFormatCode(15);
$sheet->getCell('A4')->setValue($formula);
$sheet->getStyle('A4')->getNumberFormat()
->setBuiltinFormatCode(22);
$sheet->getCell('A5')->setValue($formula);
$sheet->getStyle('A5')->getNumberFormat()
->setFormatCode('[$-F800]');
$sheet->getCell('A6')->setValue($formula);
$sheet->getStyle('A6')->getNumberFormat()
->setFormatCode('[$-F400]');
$sheet->getCell('A7')->setValue($formula);
$sheet->getStyle('A7')->getNumberFormat()
->setFormatCode('[$-x-sysdate]');
$sheet->getCell('A8')->setValue($formula);
$sheet->getStyle('A8')->getNumberFormat()
->setFormatCode('[$-x-systime]');
$sheet->getCell('A9')->setValue($formula);
$sheet->getStyle('A9')->getNumberFormat()
->setFormatCode('hello' . NumberFormat::FORMAT_SYSDATE_F800 . 'goodbye');
NumberFormat::setShortDateFormat('yyyy/mm/dd');
NumberFormat::setDateTimeFormat('yyyy/mm/dd hh:mm AM/PM');
NumberFormat::setLongDateFormat('dddd d mmm yyyy');
NumberFormat::setTimeFormat('h:mm');
self::assertSame('2024/02/29', $sheet->getCell('A2')->getformattedValue());
self::assertSame('2024/02/29 08:12 AM', $sheet->getCell('A4')->getformattedValue());
self::assertSame('Thursday 29 Feb 2024', $sheet->getCell('A5')->getformattedValue());
self::assertSame('8:12', $sheet->getCell('A6')->getformattedValue());
self::assertSame('Thursday 29 Feb 2024', $sheet->getCell('A7')->getformattedValue());
self::assertSame('8:12', $sheet->getCell('A8')->getformattedValue());
self::assertSame('Thursday 29 Feb 2024', $sheet->getCell('A9')->getformattedValue());
$spreadsheet->disconnectWorksheets();
}
public function testDefaults(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$formula = '=DATEVALUE("2024-02-29")+TIMEVALUE("8:12:15 AM")';
$sheet->getCell('A1')->setValue($formula);
$sheet->getCell('A2')->setValue($formula);
$sheet->getStyle('A2')->getNumberFormat()
->setBuiltinFormatCode(14);
$sheet->getCell('A3')->setValue($formula);
$sheet->getStyle('A3')->getNumberFormat()
->setBuiltinFormatCode(15);
$sheet->getCell('A4')->setValue($formula);
$sheet->getStyle('A4')->getNumberFormat()
->setBuiltinFormatCode(22);
$sheet->getCell('A5')->setValue($formula);
$sheet->getStyle('A5')->getNumberFormat()
->setFormatCode('[$-F800]');
$sheet->getCell('A6')->setValue($formula);
$sheet->getStyle('A6')->getNumberFormat()
->setFormatCode('[$-F400]');
$sheet->getCell('A7')->setValue($formula);
$sheet->getStyle('A7')->getNumberFormat()
->setFormatCode('[$-x-sysdate]');
$sheet->getCell('A8')->setValue($formula);
$sheet->getStyle('A8')->getNumberFormat()
->setFormatCode('[$-x-systime]');
$sheet->getCell('A9')->setValue($formula);
$sheet->getStyle('A9')->getNumberFormat()
->setFormatCode('hello' . NumberFormat::FORMAT_SYSDATE_F800 . 'goodbye');
self::assertSame('2/29/2024', $sheet->getCell('A2')->getformattedValue());
self::assertSame('2/29/2024 8:12', $sheet->getCell('A4')->getformattedValue());
self::assertSame('Thursday, February 29, 2024', $sheet->getCell('A5')->getformattedValue());
self::assertSame('8:12:15 AM', $sheet->getCell('A6')->getformattedValue());
self::assertSame('Thursday, February 29, 2024', $sheet->getCell('A7')->getformattedValue());
self::assertSame('8:12:15 AM', $sheet->getCell('A8')->getformattedValue());
self::assertSame('Thursday, February 29, 2024', $sheet->getCell('A9')->getformattedValue());
$spreadsheet->disconnectWorksheets();
}
}
@@ -252,6 +252,27 @@ class WorksheetTest extends TestCase
],
'A',
],
'Data includes nulls' => [
[
['A1', 'B1', 'C1', 'D1', 'E1'],
[null, 'B2', 'C2', 'D2', 'E2'],
['A3', null, 'C3', 'D3', 'E3'],
['A4', 'B4', null, 'D4', 'E4'],
['A5', 'B5', 'C5', null, 'E5'],
['A6', 'B6', 'C6', 'D6', null],
],
'B',
2,
[
['A1', 'D1', 'E1'],
[null, 'D2', 'E2'],
['A3', 'D3', 'E3'],
['A4', 'D4', 'E4'],
['A5', null, 'E5'],
['A6', 'D6', null],
],
'C',
],
];
}
@@ -384,6 +405,25 @@ class WorksheetTest extends TestCase
],
4,
],
'Data includes nulls' => [
[
['A1', 'B1', 'C1', 'D1', 'E1'],
[null, 'B2', 'C2', 'D2', 'E2'],
['A3', null, 'C3', 'D3', 'E3'],
['A4', 'B4', null, 'D4', 'E4'],
['A5', 'B5', 'C5', null, 'E5'],
['A6', 'B6', 'C6', 'D6', null],
],
1,
2,
[
['A3', null, 'C3', 'D3', 'E3'],
['A4', 'B4', null, 'D4', 'E4'],
['A5', 'B5', 'C5', null, 'E5'],
['A6', 'B6', 'C6', 'D6', null],
],
4,
],
];
}
@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Writer\Dompdf;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf;
use PHPUnit\Framework\TestCase;
class HideTest extends TestCase
{
public function testHide(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray([
['a1', 'b1', 'c1', 'd1', 'e1', 'f1'],
['a2', 'b2', 'c2', 'd2', 'e2', 'f2'],
['a3', 'b3', 'c3', 'd3', 'e3', 'f3'],
['a4', 'b4', 'c4', 'd4', 'e4', 'f4'],
['a5', 'b5', 'c5', 'd5', 'e5', 'f5'],
['a6', 'b6', 'c6', 'd6', 'e6', 'f6'],
]);
$sheet->getColumnDimension('B')->setVisible(false);
$sheet->getRowDimension(3)->setVisible(false);
$writer = new Dompdf($spreadsheet);
$html = $writer->generateHtmlAll();
self::assertStringContainsString('table.sheet0 .column1 { display:none }', $html);
self::assertStringContainsString('table.sheet0 tr.row2 { display:none; visibility:hidden }', $html);
self::assertStringContainsString('.navigation {display: none;}', $html);
$count = substr_count($html, 'display:none');
self::assertSame(3, $count);
$spreadsheet->disconnectWorksheets();
}
}
@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Html;
use PHPUnit\Framework\TestCase;
class HideTest extends TestCase
{
public function testHide(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray([
['a1', 'b1', 'c1', 'd1', 'e1', 'f1'],
['a2', 'b2', 'c2', 'd2', 'e2', 'f2'],
['a3', 'b3', 'c3', 'd3', 'e3', 'f3'],
['a4', 'b4', 'c4', 'd4', 'e4', 'f4'],
['a5', 'b5', 'c5', 'd5', 'e5', 'f5'],
['a6', 'b6', 'c6', 'd6', 'e6', 'f6'],
]);
$sheet->getColumnDimension('B')->setVisible(false);
$sheet->getRowDimension(3)->setVisible(false);
$writer = new Html($spreadsheet);
$html = $writer->generateHtmlAll();
self::assertStringContainsString('table.sheet0 .column1 { display:none }', $html);
self::assertStringContainsString('table.sheet0 tr.row2 { display:none; visibility:hidden }', $html);
self::assertStringContainsString('.navigation {display: none;}', $html);
$count = substr_count($html, 'display:none');
self::assertSame(3, $count);
$spreadsheet->disconnectWorksheets();
}
}
@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Writer\Mpdf;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
use PHPUnit\Framework\TestCase;
class HideTest extends TestCase
{
public function testHide(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray([
['a1', 'b1', 'c1', 'd1', 'e1', 'f1'],
['a2', 'b2', 'c2', 'd2', 'e2', 'f2'],
['a3', 'b3', 'c3', 'd3', 'e3', 'f3'],
['a4', 'b4', 'c4', 'd4', 'e4', 'f4'],
['a5', 'b5', 'c5', 'd5', 'e5', 'f5'],
['a6', 'b6', 'c6', 'd6', 'e6', 'f6'],
]);
$sheet->getColumnDimension('B')->setVisible(false);
$sheet->getRowDimension(3)->setVisible(false);
$writer = new Mpdf($spreadsheet);
$html = $writer->generateHtmlAll();
self::assertStringNotContainsString('a3', $html);
self::assertStringNotContainsString('b1', $html);
self::assertStringContainsString('a1', $html);
$spreadsheet->disconnectWorksheets();
}
}
@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Writer\Tcpdf;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Tcpdf;
use PHPUnit\Framework\TestCase;
class HideTest extends TestCase
{
public function testHide(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray([
['a1', 'b1', 'c1', 'd1', 'e1', 'f1'],
['a2', 'b2', 'c2', 'd2', 'e2', 'f2'],
['a3', 'b3', 'c3', 'd3', 'e3', 'f3'],
['a4', 'b4', 'c4', 'd4', 'e4', 'f4'],
['a5', 'b5', 'c5', 'd5', 'e5', 'f5'],
['a6', 'b6', 'c6', 'd6', 'e6', 'f6'],
]);
$sheet->getColumnDimension('B')->setVisible(false);
$sheet->getRowDimension(3)->setVisible(false);
$writer = new Tcpdf($spreadsheet);
$html = $writer->generateHtmlAll();
self::assertStringNotContainsString('a3', $html);
self::assertStringNotContainsString('b1', $html);
self::assertStringContainsString('a1', $html);
$spreadsheet->disconnectWorksheets();
}
}
+1
View File
@@ -81,4 +81,5 @@ return [
'no arguments' => ['exception'],
'one argument' => ['exception', 1.75],
'boolean in lieu of string' => ['TRUE', true, '@'],
'system long date format' => ['Sunday, January 1, 2012', '1-Jan-2012', '[$-x-sysdate]'],
];
+6
View File
@@ -160,4 +160,10 @@ return [
false,
'\D-00000',
],
[true, '[$-F800]'],
[true, 'hello[$-F400]goodbye'],
[false, '[$-F401]'],
[true, '[$-x-sysdate]'],
[true, '[$-x-systime]'],
[false, '[$-x-systim]'],
];