2017-04-01 03:36:02 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
return [
|
|
|
|
// Third argument = 0
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
2, // Input
|
|
|
|
[2, 3, 4, 3],
|
|
|
|
0,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
2, // Input
|
|
|
|
[1, 0, 4, 3],
|
|
|
|
0,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
2, // Input
|
|
|
|
[2, 0, 0, 3],
|
|
|
|
0,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
2, // Expected
|
|
|
|
0, // Input
|
|
|
|
[2, 0, 0, 3],
|
|
|
|
0,
|
|
|
|
],
|
|
|
|
|
|
|
|
// Third argument = 1
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
2, // Input
|
|
|
|
[2, 3, 4, 3],
|
|
|
|
1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
2, // Expected
|
|
|
|
2, // Input
|
|
|
|
[2, 0, 4, 3],
|
|
|
|
1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
2, // Input
|
|
|
|
[2, 0, 0, 3],
|
|
|
|
1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
4, // Expected
|
|
|
|
4, // Input
|
|
|
|
[2, 0, 0, 3],
|
|
|
|
1,
|
|
|
|
],
|
|
|
|
|
|
|
|
// Third argument = -1
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
2, // Input
|
|
|
|
[2, 0, 0, 3],
|
|
|
|
-1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
4, // Expected
|
|
|
|
2, // Input
|
|
|
|
[3, 3, 4, 5],
|
|
|
|
-1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
5, // Input
|
|
|
|
[8, 4, 3, 2],
|
|
|
|
-1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
6, // Input
|
|
|
|
[3, 5, 6, 8],
|
|
|
|
-1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
6, // Input
|
|
|
|
[8, 5, 4, 2],
|
|
|
|
-1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
4, // Input
|
|
|
|
[5, 8, 4, 2],
|
|
|
|
-1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
2, // Expected
|
|
|
|
4, // Input
|
|
|
|
[8, 8, 3, 2],
|
|
|
|
-1,
|
|
|
|
],
|
2019-03-06 21:37:06 +00:00
|
|
|
|
Fix exact MATCH on ranges with empty cells (#1520)
Fixes a bug when doing exact match on ranges with empty cells.
```php
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Row: 1, null, 4, null, 8.
$sheet->getCell('A1')->setValue(1);
$sheet->getCell('A3')->setValue(4);
$sheet->getCell('A5')->setValue(8);
$sheet->getCell('B1')->setValue('=MATCH(4, A1:A5, 1)');
// Should echo 3, but echos '#N/A'.
echo $sheet->getCell('B1')->getCalculatedValue() . PHP_EOL;
// Row: 1, null, 4, null, null.
$sheet->getCell('C1')->setValue(1);
$sheet->getCell('C3')->setValue(4);
$sheet->getCell('D1')->setValue('=MATCH(5, C1:C5, 1)');
// Should echo 3, but echos '#N/A'.
echo $sheet->getCell('D1')->getCalculatedValue() . PHP_EOL;
```
2020-06-19 18:51:46 +00:00
|
|
|
// match on ranges with empty cells
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
4, // Input
|
|
|
|
[1, null, 4, null, 8],
|
|
|
|
1,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
5, // Input
|
|
|
|
[1, null, 4, null, null],
|
|
|
|
1,
|
|
|
|
],
|
|
|
|
|
2019-03-06 21:37:06 +00:00
|
|
|
// 0s are causing errors, because things like 0 == 'x' is true. Thanks PHP!
|
|
|
|
[
|
|
|
|
3,
|
|
|
|
'x',
|
|
|
|
[[0], [0], ['x'], ['x'], ['x']],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-03-06 21:37:06 +00:00
|
|
|
],
|
2019-08-12 03:11:36 +00:00
|
|
|
[
|
|
|
|
2,
|
|
|
|
'a',
|
2019-09-20 23:04:36 +00:00
|
|
|
[false, 'a', 1],
|
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
0,
|
|
|
|
['x', true, false],
|
2019-09-20 23:04:36 +00:00
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
true,
|
|
|
|
['a', 'b', 'c'],
|
2019-09-20 23:04:36 +00:00
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
true,
|
2019-09-20 23:04:36 +00:00
|
|
|
[0, 1, 2],
|
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
true,
|
2019-09-20 23:04:36 +00:00
|
|
|
[0, 1, 2],
|
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
true,
|
2019-09-20 23:04:36 +00:00
|
|
|
[0, 1, 2],
|
|
|
|
1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
true,
|
2019-09-20 23:04:36 +00:00
|
|
|
[true, true, true],
|
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
true,
|
2019-09-20 23:04:36 +00:00
|
|
|
[true, true, true],
|
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
true,
|
2019-09-20 23:04:36 +00:00
|
|
|
[true, true, true],
|
|
|
|
1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
// lookup stops when value < searched one
|
|
|
|
[
|
|
|
|
5, // Expected
|
|
|
|
6,
|
|
|
|
[true, false, 'a', 'z', 222222, 2, 99999999],
|
2019-09-20 23:04:36 +00:00
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
// if element of same data type met and it is < than searched one #N/A - no further processing
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
6,
|
2019-09-20 23:04:36 +00:00
|
|
|
[true, false, 'a', 'z', 2, 888],
|
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
6,
|
|
|
|
['6'],
|
2019-09-20 23:04:36 +00:00
|
|
|
-1,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
// expression match
|
|
|
|
[
|
|
|
|
2, // Expected
|
|
|
|
'a?b',
|
|
|
|
['a', 'abb', 'axc'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
'a*',
|
|
|
|
['aAAAAAAA', 'as', 'az'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
'1*11*1',
|
|
|
|
['abc', 'efh', '1a11b1'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
'1*11*1',
|
|
|
|
['abc', 'efh', '1a11b1'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
2, // Expected
|
|
|
|
'a*~*c',
|
|
|
|
['aAAAAA', 'a123456*c', 'az'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
'a*123*b',
|
|
|
|
['aAAAAA', 'a123456*c', 'a99999123b'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
1, // Expected
|
|
|
|
'*',
|
|
|
|
['aAAAAA', 'a111123456*c', 'qq'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
2, // Expected
|
|
|
|
'?',
|
|
|
|
['aAAAAA', 'a', 'a99999123b'],
|
2019-09-20 23:04:36 +00:00
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
'#N/A', // Expected
|
|
|
|
'?',
|
2019-09-20 23:04:36 +00:00
|
|
|
[1, 22, 333],
|
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
'???',
|
2019-09-20 23:04:36 +00:00
|
|
|
[1, 22, 'aaa'],
|
|
|
|
0,
|
2019-08-12 03:11:36 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
3, // Expected
|
|
|
|
'*',
|
2019-09-20 23:04:36 +00:00
|
|
|
[1, 22, 'aaa'],
|
|
|
|
0,
|
2019-03-06 21:37:06 +00:00
|
|
|
],
|
2017-04-01 03:36:02 +00:00
|
|
|
];
|