| 1441 |
ariadna |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
namespace PhpOffice\PhpSpreadsheet\Calculation\Engineering;
|
|
|
4 |
|
|
|
5 |
use PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
|
|
|
6 |
use PhpOffice\PhpSpreadsheet\Calculation\Exception;
|
|
|
7 |
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
|
|
|
8 |
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
|
|
|
9 |
|
|
|
10 |
abstract class ConvertBase
|
|
|
11 |
{
|
|
|
12 |
use ArrayEnabled;
|
|
|
13 |
|
|
|
14 |
protected static function validateValue(mixed $value): string
|
|
|
15 |
{
|
|
|
16 |
if (is_bool($value)) {
|
|
|
17 |
if (Functions::getCompatibilityMode() !== Functions::COMPATIBILITY_OPENOFFICE) {
|
|
|
18 |
throw new Exception(ExcelError::VALUE());
|
|
|
19 |
}
|
|
|
20 |
$value = (int) $value;
|
|
|
21 |
}
|
|
|
22 |
|
|
|
23 |
if (is_numeric($value)) {
|
|
|
24 |
if (Functions::getCompatibilityMode() == Functions::COMPATIBILITY_GNUMERIC) {
|
|
|
25 |
$value = floor((float) $value);
|
|
|
26 |
}
|
|
|
27 |
}
|
|
|
28 |
|
|
|
29 |
return strtoupper((string) $value);
|
|
|
30 |
}
|
|
|
31 |
|
|
|
32 |
protected static function validatePlaces(mixed $places = null): ?int
|
|
|
33 |
{
|
|
|
34 |
if ($places === null) {
|
|
|
35 |
return $places;
|
|
|
36 |
}
|
|
|
37 |
|
|
|
38 |
if (is_numeric($places)) {
|
|
|
39 |
if ($places < 0 || $places > 10) {
|
|
|
40 |
throw new Exception(ExcelError::NAN());
|
|
|
41 |
}
|
|
|
42 |
|
|
|
43 |
return (int) $places;
|
|
|
44 |
}
|
|
|
45 |
|
|
|
46 |
throw new Exception(ExcelError::VALUE());
|
|
|
47 |
}
|
|
|
48 |
|
|
|
49 |
/**
|
|
|
50 |
* Formats a number base string value with leading zeroes.
|
|
|
51 |
*
|
|
|
52 |
* @param string $value The "number" to pad
|
|
|
53 |
* @param ?int $places The length that we want to pad this value
|
|
|
54 |
*
|
|
|
55 |
* @return string The padded "number"
|
|
|
56 |
*/
|
|
|
57 |
protected static function nbrConversionFormat(string $value, ?int $places): string
|
|
|
58 |
{
|
|
|
59 |
if ($places !== null) {
|
|
|
60 |
if (strlen($value) <= $places) {
|
|
|
61 |
return substr(str_pad($value, $places, '0', STR_PAD_LEFT), -10);
|
|
|
62 |
}
|
|
|
63 |
|
|
|
64 |
return ExcelError::NAN();
|
|
|
65 |
}
|
|
|
66 |
|
|
|
67 |
return substr($value, -10);
|
|
|
68 |
}
|
|
|
69 |
}
|