Merge branch 'master' into #984

This commit is contained in:
oleibman
2021-05-11 14:44:33 -07:00
committed by GitHub
57 changed files with 1735 additions and 600 deletions
@@ -0,0 +1,51 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\LookupRef;
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
use PhpOffice\PhpSpreadsheet\Calculation\LookupRef;
use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PhpOffice\PhpSpreadsheet\Cell\Hyperlink;
use PHPUnit\Framework\TestCase;
class HyperlinkTest extends TestCase
{
/**
* @dataProvider providerHYPERLINK
*
* @param mixed $expectedResult
* @param null|string $linkUrl
* @param null|string $description
*/
public function testHYPERLINK($expectedResult, $linkUrl, $description): void
{
$hyperlink = new Hyperlink();
$cell = $this->getMockBuilder(Cell::class)
->onlyMethods(['getHyperlink'])
->disableOriginalConstructor()
->getMock();
$cell->method('getHyperlink')
->willReturn($hyperlink);
$result = LookupRef::HYPERLINK($linkUrl, $description, $cell);
if (!is_array($expectedResult)) {
self::assertSame($expectedResult, $result);
} else {
self::assertSame($expectedResult[1], $result);
self::assertSame($expectedResult[0], $hyperlink->getUrl());
self::assertSame($expectedResult[1], $hyperlink->getTooltip());
}
}
public function providerHYPERLINK(): array
{
return require 'tests/data/Calculation/LookupRef/HYPERLINK.php';
}
public function testHYPERLINKwithoutCell(): void
{
$result = LookupRef::HYPERLINK('https://phpspreadsheet.readthedocs.io/en/latest/', 'Read the Docs');
self::assertSame(Functions::REF(), $result);
}
}
@@ -26,4 +26,22 @@ class SumTest extends AllSetupTeardown
{
return require 'tests/data/Calculation/MathTrig/SUM.php';
}
/**
* @dataProvider providerSUMLiterals
*
* @param mixed $expectedResult
*/
public function testSUMLiterals($expectedResult, string $args): void
{
$sheet = $this->sheet;
$sheet->getCell('B1')->setValue("=SUM($args)");
$result = $sheet->getCell('B1')->getCalculatedValue();
self::assertEqualsWithDelta($expectedResult, $result, 1E-12);
}
public function providerSUMLiterals(): array
{
return require 'tests/data/Calculation/MathTrig/SUMLITERALS.php';
}
}
@@ -0,0 +1,31 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader\Gnumeric;
use PhpOffice\PhpSpreadsheet\Reader\Gnumeric;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PHPUnit\Framework\TestCase;
class AutoFilterTest extends TestCase
{
/**
* @var Spreadsheet
*/
private $spreadsheet;
protected function setUp(): void
{
$filename = 'tests/data/Reader/Gnumeric/Autofilter_Basic.gnumeric';
$reader = new Gnumeric();
$this->spreadsheet = $reader->load($filename);
}
public function testAutoFilterRange(): void
{
$worksheet = $this->spreadsheet->getActiveSheet();
$autoFilterRange = $worksheet->getAutoFilter()->getRange();
self::assertSame('A1:D57', $autoFilterRange);
}
}
@@ -115,7 +115,8 @@ class GnumericLoadTest extends TestCase
self::assertEquals(Font::UNDERLINE_DOUBLE, $sheet->getCell('A24')->getStyle()->getFont()->getUnderline());
self::assertTrue($sheet->getCell('B23')->getStyle()->getFont()->getSubScript());
self::assertTrue($sheet->getCell('B24')->getStyle()->getFont()->getSuperScript());
self::assertFalse($sheet->getRowDimension(30)->getVisible());
$rowDimension = $sheet->getRowDimension(30);
self::assertFalse($rowDimension->getVisible());
}
public function testLoadFilter(): void
@@ -0,0 +1,31 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader\Ods;
use PhpOffice\PhpSpreadsheet\Reader\Ods;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PHPUnit\Framework\TestCase;
class AutoFilterTest extends TestCase
{
/**
* @var Spreadsheet
*/
private $spreadsheet;
protected function setUp(): void
{
$filename = 'tests/data/Reader/Ods/AutoFilter.ods';
$reader = new Ods();
$this->spreadsheet = $reader->load($filename);
}
public function testAutoFilterRange(): void
{
$worksheet = $this->spreadsheet->getActiveSheet();
$autoFilterRange = $worksheet->getAutoFilter()->getRange();
self::assertSame('A1:C9', $autoFilterRange);
}
}
@@ -0,0 +1,35 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader\Ods;
use PhpOffice\PhpSpreadsheet\Reader\Ods;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PHPUnit\Framework\TestCase;
class DefinedNamesTest extends TestCase
{
/**
* @var Spreadsheet
*/
private $spreadsheet;
protected function setUp(): void
{
$filename = 'tests/data/Reader/Ods/DefinedNames.ods';
$reader = new Ods();
$this->spreadsheet = $reader->load($filename);
}
public function testDefinedNames(): void
{
$worksheet = $this->spreadsheet->getActiveSheet();
$firstDefinedNameValue = $worksheet->getCell('First')->getValue();
$secondDefinedNameValue = $worksheet->getCell('Second')->getValue();
$calculatedFormulaValue = $worksheet->getCell('B2')->getCalculatedValue();
self::assertSame(3, $firstDefinedNameValue);
self::assertSame(4, $secondDefinedNameValue);
self::assertSame(12, $calculatedFormulaValue);
}
}
@@ -1,6 +1,6 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader;
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PHPUnit\Framework\TestCase;
@@ -29,4 +29,15 @@ class DefaultFillTest extends TestCase
self::assertSame('none', $sheet->getCell('J16')->getStyle()->getFill()->getFillType());
self::assertSame('solid', $sheet->getCell('C2')->getStyle()->getFill()->getFillType());
}
public function testDefaultConditionalFill(): void
{
// default fill pattern for a conditional style where the filltype is not defined
$filename = 'tests/data/Reader/XLSX/pr2050cf-fill.xlsx';
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($filename);
$style = $spreadsheet->getActiveSheet()->getConditionalStyles('A1')[0]->getStyle();
self::assertSame('solid', $style->getFill()->getFillType());
}
}
@@ -0,0 +1,22 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PHPUnit\Framework\TestCase;
class DefaultFontTest extends TestCase
{
public function testDefaultConditionalFont(): void
{
// default fill pattern for a conditional style where the filltype is not defined
$filename = 'tests/data/Reader/XLSX/pr2050cf-fill.xlsx';
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($filename);
$style = $spreadsheet->getActiveSheet()->getConditionalStyles('A1')[0]->getStyle();
self::assertSame('9C0006', $style->getFont()->getColor()->getRGB());
self::assertNull($style->getFont()->getName());
self::assertNull($style->getFont()->getSize());
}
}
@@ -0,0 +1,49 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Writer\Csv;
use PhpOffice\PhpSpreadsheet\Reader\Csv as CsvReader;
use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Csv as CsvWriter;
use PhpOffice\PhpSpreadsheetTests\Functional;
class CsvExcelCompatibilityTest extends Functional\AbstractFunctional
{
// Excel seems to have changed with how they handle this.
// In particular, it does not recognize UTF-8 non-ASCII characters
// if a file is written with ExcelCompatibility on.
// The initial 'sep=;' line seems to confuse it, even though
// it has a BOM. The Unix "file" command also indicates a difference
// when the sep line is or is not included:
// UTF-8 Unicode (with BOM) text, with CRLF line terminators
// vs CSV text (without sep line, with or without BOM)
// So, this test has no UTF-8 yet while more research is conducted.
public function testExcelCompatibility(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', '1');
$sheet->setCellValue('B1', '2');
$sheet->setCellValue('C1', '3');
$sheet->setCellValue('A2', '4');
$sheet->setCellValue('B2', '5');
$sheet->setCellValue('C2', '6');
$writer = new CsvWriter($spreadsheet);
$writer->setExcelCompatibility(true);
self::assertSame('', $writer->getOutputEncoding());
$filename = File::temporaryFilename();
$writer->save($filename);
$reader = new CsvReader();
$spreadsheet2 = $reader->load($filename);
$contents = file_get_contents($filename);
unlink($filename);
self::assertEquals(1, $spreadsheet2->getActiveSheet()->getCell('A1')->getValue());
self::assertEquals(6, $spreadsheet2->getActiveSheet()->getCell('C2')->getValue());
self::assertStringContainsString(CsvReader::UTF8_BOM, $contents);
self::assertStringContainsString("\r\n", $contents);
self::assertStringContainsString('sep=;', $contents);
self::assertStringContainsString('"1";"2";"3"', $contents);
self::assertStringContainsString('"4";"5";"6"', $contents);
}
}
@@ -0,0 +1,33 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Writer\Ods;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class AutoFilterTest extends AbstractFunctional
{
public function testAutoFilterWriter(): void
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$dataSet = [
['Year', 'Quarter', 'Sales'],
[2020, 'Q1', 100],
[2020, 'Q2', 120],
[2020, 'Q3', 140],
[2020, 'Q4', 160],
[2021, 'Q1', 180],
[2021, 'Q2', 75],
[2021, 'Q3', 0],
[2021, 'Q4', 0],
];
$worksheet->fromArray($dataSet, null, 'A1');
$worksheet->getAutoFilter()->setRange('A1:C9');
$reloaded = $this->writeAndReload($spreadsheet, 'Ods');
self::assertSame('A1:C9', $reloaded->getActiveSheet()->getAutoFilter()->getRange());
}
}
@@ -0,0 +1,33 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Writer\Ods;
use PhpOffice\PhpSpreadsheet\NamedFormula;
use PhpOffice\PhpSpreadsheet\NamedRange;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class DefinedNamesTest extends AbstractFunctional
{
public function testDefinedNamesWriter(): void
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$dataSet = [
[7, 'x', 5],
['=', '=FORMULA'],
];
$worksheet->fromArray($dataSet, null, 'A1');
$spreadsheet->addDefinedName(new NamedRange('FIRST', $worksheet, '$A$1'));
$spreadsheet->addDefinedName(new NamedRange('SECOND', $worksheet, '$C$1'));
$spreadsheet->addDefinedName(new NamedFormula('FORMULA', $worksheet, '=FIRST*SECOND'));
$reloaded = $this->writeAndReload($spreadsheet, 'Ods');
self::assertSame(7, $reloaded->getActiveSheet()->getCell('FIRST')->getValue());
self::assertSame(5, $reloaded->getActiveSheet()->getCell('SECOND')->getValue());
self::assertSame(35, $reloaded->getActiveSheet()->getCell('B2')->getCalculatedValue());
}
}
@@ -0,0 +1,99 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xls;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class VisibilityTest extends AbstractFunctional
{
/**
* @dataProvider dataProviderRowVisibility
*/
public function testRowVisibility(array $visibleRows): void
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
foreach ($visibleRows as $row => $visibility) {
$worksheet->setCellValue("A{$row}", $row);
$worksheet->getRowDimension($row)->setVisible($visibility);
}
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xls');
$reloadedWorksheet = $reloadedSpreadsheet->getActiveSheet();
foreach ($visibleRows as $row => $visibility) {
self::assertSame($visibility, $reloadedWorksheet->getRowDimension($row)->getVisible());
}
}
public function dataProviderRowVisibility(): array
{
return [
[
[1 => true, 2 => false, 3 => false, 4 => true, 5 => true, 6 => false],
],
];
}
/**
* @dataProvider dataProviderColumnVisibility
*/
public function testColumnVisibility(array $visibleColumns): void
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
foreach ($visibleColumns as $column => $visibility) {
$worksheet->setCellValue("{$column}1", $column);
$worksheet->getColumnDimension($column)->setVisible($visibility);
}
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xls');
$reloadedWorksheet = $reloadedSpreadsheet->getActiveSheet();
foreach ($visibleColumns as $column => $visibility) {
self::assertSame($visibility, $reloadedWorksheet->getColumnDimension($column)->getVisible());
}
}
public function dataProviderColumnVisibility(): array
{
return [
[
['A' => true, 'B' => false, 'C' => false, 'D' => true, 'E' => true, 'F' => false],
],
];
}
/**
* @dataProvider dataProviderSheetVisibility
*/
public function testSheetVisibility(array $visibleSheets): void
{
$spreadsheet = new Spreadsheet();
$spreadsheet->removeSheetByIndex(0);
foreach ($visibleSheets as $sheetName => $visibility) {
$worksheet = $spreadsheet->addSheet(new Worksheet($spreadsheet, $sheetName));
$worksheet->setCellValue('A1', $sheetName);
$worksheet->setSheetState($visibility);
}
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xls');
foreach ($visibleSheets as $sheetName => $visibility) {
$reloadedWorksheet = $reloadedSpreadsheet->getSheetByName($sheetName) ?? new Worksheet();
self::assertSame($visibility, $reloadedWorksheet->getSheetState());
}
}
public function dataProviderSheetVisibility(): array
{
return [
[
[
'Worksheet 1' => Worksheet::SHEETSTATE_HIDDEN,
'Worksheet 2' => Worksheet::SHEETSTATE_VERYHIDDEN,
'Worksheet 3' => Worksheet::SHEETSTATE_VISIBLE,
],
],
];
}
}
@@ -0,0 +1,40 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as Writer;
use PHPUnit\Framework\TestCase;
class Issue2082Test extends TestCase
{
public function testBoolWrite(): void
{
// Problem writing boolean function values is detected only when
// opening spreadsheet in Excel 2007-2016. Test verifies that
// value field is written correctly for those versions.
$outputFilename = File::temporaryFilename();
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$worksheet->fromArray(['A', 'B', 'C', 'D']);
$worksheet->getCell('A2')->setValue('=A1<>"A"');
$worksheet->getCell('A3')->setValue('=A1="A"');
$worksheet->getCell('B2')->setValue('=LEFT(B1, 0)');
$worksheet->getCell('B3')->setValue('=B2=""');
$writer = new Writer($spreadsheet);
$writer->save($outputFilename);
$zipfile = "zip://$outputFilename#xl/worksheets/sheet1.xml";
$contents = file_get_contents($zipfile);
unlink($outputFilename);
if ($contents === false) {
self::fail('Unable to open file');
} else {
self::assertStringContainsString('<c r="A2" t="b"><f>A1&lt;&gt;&quot;A&quot;</f><v>0</v></c>', $contents);
self::assertStringContainsString('<c r="A3" t="b"><f>A1=&quot;A&quot;</f><v>1</v></c>', $contents);
self::assertStringContainsString('<c r="B2" t="str"><f>LEFT(B1, 0)</f><v></v></c>', $contents);
self::assertStringContainsString('<c r="B3" t="b"><f>B2=&quot;&quot;</f><v>1</v></c>', $contents);
}
}
}
@@ -0,0 +1,99 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class VisibilityTest extends AbstractFunctional
{
/**
* @dataProvider dataProviderRowVisibility
*/
public function testRowVisibility(array $visibleRows): void
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
foreach ($visibleRows as $row => $visibility) {
$worksheet->setCellValue("A{$row}", $row);
$worksheet->getRowDimension($row)->setVisible($visibility);
}
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
$reloadedWorksheet = $reloadedSpreadsheet->getActiveSheet();
foreach ($visibleRows as $row => $visibility) {
self::assertSame($visibility, $reloadedWorksheet->getRowDimension($row)->getVisible());
}
}
public function dataProviderRowVisibility(): array
{
return [
[
[1 => false, 2 => false, 3 => true, 4 => false, 5 => true, 6 => false],
],
];
}
/**
* @dataProvider dataProviderColumnVisibility
*/
public function testColumnVisibility(array $visibleColumns): void
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
foreach ($visibleColumns as $column => $visibility) {
$worksheet->setCellValue("{$column}1", $column);
$worksheet->getColumnDimension($column)->setVisible($visibility);
}
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
$reloadedWorksheet = $reloadedSpreadsheet->getActiveSheet();
foreach ($visibleColumns as $column => $visibility) {
self::assertSame($visibility, $reloadedWorksheet->getColumnDimension($column)->getVisible());
}
}
public function dataProviderColumnVisibility(): array
{
return [
[
['A' => false, 'B' => false, 'C' => true, 'D' => false, 'E' => true, 'F' => false],
],
];
}
/**
* @dataProvider dataProviderSheetVisibility
*/
public function testSheetVisibility(array $visibleSheets): void
{
$spreadsheet = new Spreadsheet();
$spreadsheet->removeSheetByIndex(0);
foreach ($visibleSheets as $sheetName => $visibility) {
$worksheet = $spreadsheet->addSheet(new Worksheet($spreadsheet, $sheetName));
$worksheet->setCellValue('A1', $sheetName);
$worksheet->setSheetState($visibility);
}
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
foreach ($visibleSheets as $sheetName => $visibility) {
$reloadedWorksheet = $reloadedSpreadsheet->getSheetByName($sheetName) ?? new Worksheet();
self::assertSame($visibility, $reloadedWorksheet->getSheetState());
}
}
public function dataProviderSheetVisibility(): array
{
return [
[
[
'Worksheet 1' => Worksheet::SHEETSTATE_HIDDEN,
'Worksheet 2' => Worksheet::SHEETSTATE_VERYHIDDEN,
'Worksheet 3' => Worksheet::SHEETSTATE_VISIBLE,
],
],
];
}
}
@@ -25,4 +25,12 @@ return [
'#VALUE!',
0, 'red', 'blue', 'green', 'brown',
],
[
'#VALUE!',
'NaN', 'red', 'blue', 'green', 'brown',
],
[
['blue', 'purple'],
3, ['red', 'orange'], ['yellow', 'green'], ['blue', 'purple'],
],
];
@@ -328,4 +328,28 @@ return [
2,
false,
],
[
0.61,
'Ed',
[
[null, 'Ann', 'Cara', 'Colin', 'Ed', 'Frank'],
['Math', 0.58, 0.90, 0.67, 0.76, 0.80],
['French', 0.61, 0.71, 0.59, 0.59, 0.76],
['Physics', 0.75, 0.45, 0.39, 0.52, 0.69],
['Bioogy', 0.39, 0.55, 0.77, 0.61, 0.45],
],
5,
false,
],
[
'Normal Weight',
23.5,
[
[null, 'Min', 0.0, 18.5, 25.0, 30.0],
['BMI', 'Max', 18.4, 24.9, 29.9, null],
[null, 'Body Type', 'Underweight', 'Normal Weight', 'Overweight', 'Obese'],
],
3,
true,
],
];
@@ -0,0 +1,26 @@
<?php
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
return [
[
['https://phpspreadsheet.readthedocs.io/en/latest/', 'https://phpspreadsheet.readthedocs.io/en/latest/'],
'https://phpspreadsheet.readthedocs.io/en/latest/',
null,
],
[
['https://phpspreadsheet.readthedocs.io/en/latest/', 'Read the Docs'],
'https://phpspreadsheet.readthedocs.io/en/latest/',
'Read the Docs',
],
[
Functions::REF(),
null,
null,
],
[
Functions::REF(),
'',
null,
],
];
+50 -13
View File
@@ -6,7 +6,7 @@ return [
// Input
[20 => ['R' => 1]],
],
[
'Negative Row' => [
'#VALUE!', // Expected
// Input
[
@@ -15,7 +15,7 @@ return [
],
-1,
],
[
'Row > matrix rows' => [
'#REF!', // Expected
// Input
[
@@ -24,7 +24,25 @@ return [
],
10,
],
[
'Row is not a number' => [
'#VALUE!', // Expected
// Input
[
20 => ['R' => 1],
21 => ['R' => 2],
],
'NaN',
],
'Row is Error' => [
'#N/A', // Expected
// Input
[
20 => ['R' => 1],
21 => ['R' => 2],
],
'#N/A',
],
'Return row 2' => [
[21 => ['R' => 2]], // Expected
// Input
[
@@ -33,7 +51,7 @@ return [
],
2,
],
[
'Return row 2 from larger matrix' => [
[21 => ['R' => 2, 'S' => 4]], // Expected
// Input
[
@@ -43,17 +61,17 @@ return [
2,
0,
],
[
'Negative Column' => [
'#VALUE!', // Expected
// Input
[
'20' => ['R' => 1, 'S' => 3],
'21' => ['R' => 2, 'S' => 4],
],
2,
0,
-1,
],
[
'Column > matrix columns' => [
'#REF!', // Expected
// Input
[
@@ -63,15 +81,25 @@ return [
2,
10,
],
[
'#REF!', // Expected
'Column is not a number' => [
'#VALUE!', // Expected
// Input
[
'20' => ['R' => 1, 'S' => 3],
'21' => ['R' => 2, 'S' => 4],
20 => ['R' => 1],
21 => ['R' => 2],
],
10,
2,
1,
'NaN',
],
'Column is Error' => [
'#N/A', // Expected
// Input
[
20 => ['R' => 1],
21 => ['R' => 2],
],
1,
'#N/A',
],
[
4, // Expected
@@ -115,6 +143,15 @@ return [
2,
1,
],
[
[1 => ['Bananas', 'Pears']],
[
['Apples', 'Lemons'],
['Bananas', 'Pears'],
],
2,
0,
],
[
3,
[
@@ -349,4 +349,35 @@ return [
],
2.0,
],
[
3.50,
'Cornflakes',
[
['Item Description', 'Price'],
['Tinned Tomatoes', 0.90],
['Tinned Tuna', 1.50],
['Cornflakes', 3.50],
['Shortcake Biscuits', 1.00],
['Toothpaste', 4.10],
['Tinned Baked Beans', 0.99],
['White Sliced Bread', 0.80],
],
2,
false,
],
[
'E',
0.52,
[
['Lower', 'Upper', 'Grade'],
[0.00, 0.44, 'F'],
[0.45, 0.54, 'E'],
[0.55, 0.64, 'D'],
[0.65, 0.74, 'C'],
[0.75, 0.84, 'B'],
[0.85, 1.00, 'A'],
],
3,
true,
],
];
+5 -1
View File
@@ -4,5 +4,9 @@ return [
[50, 5, 15, 30],
[52, 5, 15, 30, 2],
[53.1, 5.7, 15, 30, 2.4],
['#VALUE!', 5.7, 'X', 30, 2.4], // error here conflicts with SUMIF
[52.1, 5.7, '14', 30, 2.4],
[38.1, 5.7, 'X', 30, 2.4], // error if entered in formula, but not in cell
[38.1, 5.7, null, 30, 2.4],
[38.1, 5.7, false, 30, 2.4],
[39.1, 5.7, true, 30, 2.4],
];
@@ -0,0 +1,12 @@
<?php
return [
[50, '5, 15, 30'],
[52, '5, 15, 30, 2'],
[53.1, '5.7, 15, 30, 2.4'],
[52.1, '5.7, "14", 30, 2.4'],
['#VALUE!', '5.7, "X", 30, 2.4'], // error if entered in formula, but not in cell
[38.1, '5.7, , 30, 2.4'],
[38.1, '5.7, false, 30, 2.4'],
[39.1, '5.7, true, 30, 2.4'],
];
@@ -2,18 +2,33 @@
return [
['R[2]C[2]', 'O18', 16, 13],
['R18C15', '$O$18', 16, 13],
['R[-2]C[2]', 'O14', 16, 13],
['R[-2]C15', '$O14', 16, 13],
['R[2]C[-2]', 'K18', 16, 13],
['R18C[-2]', 'K$18', 16, 13],
['R[-2]C[-2]', 'K14', 16, 13],
['RC[3]', 'P16', 16, 13],
['R16C[3]', 'P$16', 16, 13],
['RC[-3]', 'J16', 16, 13],
['RC10', '$J16', 16, 13],
['R[4]C', 'M20', 16, 13],
['R[4]C13', '$M20', 16, 13],
['R[-4]C', 'M12', 16, 13],
['R12C', 'M$12', 16, 13],
['RC', 'E5', 5, 5],
['R5C5', '$E$5', 5, 5],
['R5C', 'E5', null, 5],
['R5C5', '$E5', null, 5],
['R5C', 'E$5', null, 5],
['RC5', 'E5', 5, null],
['RC5', '$E5', 5, null],
['R5C5', 'E$5', 5, null],
['R5C[2]', 'E5', null, 3],
['R5C5', '$E5', null, 3],
['R5C[2]', 'E$5', null, 3],
['R[2]C5', 'E5', 3, null],
['R5C5', '$E$5', 3, null],
['R5C[-2]', 'E5', null, 7],
['R[-2]C5', 'E5', 7, null],
];
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.