VLookupTest.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\LookupRef;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PHPUnit\Framework\TestCase;
  6. class VLookupTest extends TestCase
  7. {
  8. /**
  9. * @dataProvider providerVLOOKUP
  10. *
  11. * @param mixed $expectedResult
  12. * @param mixed $value
  13. * @param mixed $table
  14. * @param mixed $index
  15. */
  16. public function testVLOOKUP($expectedResult, $value, $table, $index, ?bool $lookup = null): void
  17. {
  18. $spreadsheet = new Spreadsheet();
  19. $sheet = $spreadsheet->getActiveSheet();
  20. if (is_array($table)) {
  21. $sheet->fromArray($table);
  22. $dimension = $sheet->calculateWorksheetDimension();
  23. } else {
  24. $sheet->getCell('A1')->setValue($table);
  25. $dimension = 'A1';
  26. }
  27. if ($lookup === null) {
  28. $lastarg = '';
  29. } else {
  30. $lastarg = $lookup ? ',TRUE' : ',FALSE';
  31. }
  32. $sheet->getCell('Z98')->setValue($value);
  33. $sheet->getCell('Z97')->setValue($index);
  34. $sheet->getCell('Z99')->setValue("=VLOOKUP(Z98,$dimension,Z97$lastarg)");
  35. $result = $sheet->getCell('Z99')->getCalculatedValue();
  36. self::assertEquals($expectedResult, $result);
  37. $spreadsheet->disconnectWorksheets();
  38. }
  39. public function providerVLOOKUP(): array
  40. {
  41. return require 'tests/data/Calculation/LookupRef/VLOOKUP.php';
  42. }
  43. /**
  44. * @dataProvider providerVLookupArray
  45. */
  46. public function testVLookupArray(array $expectedResult, string $values, string $database, string $index): void
  47. {
  48. $calculation = Calculation::getInstance();
  49. $formula = "=VLOOKUP({$values}, {$database}, {$index}, false)";
  50. $result = $calculation->_calculateFormulaValue($formula);
  51. self::assertEquals($expectedResult, $result);
  52. }
  53. public function providerVLookupArray(): array
  54. {
  55. return [
  56. 'row vector' => [
  57. [[4.19, 5.77, 4.14]],
  58. '{"Orange", "Green", "Red"}',
  59. '{"Red", 4.14; "Orange", 4.19; "Yellow", 5.17; "Green", 5.77; "Blue", 6.39}',
  60. '2',
  61. ],
  62. ];
  63. }
  64. }