Updates to documentation concerning Value Binders
Fix a couple of checks on characters at positions within a string before checking the length of the string when the offset may not exist
This commit is contained in:
parent
e8ebf11707
commit
85b9022f5b
|
|
@ -110,6 +110,11 @@ values beginning with `=` will be converted to a formula. Strings that
|
||||||
aren't numeric, or that don't begin with a leading `=` will be treated
|
aren't numeric, or that don't begin with a leading `=` will be treated
|
||||||
as genuine string values.
|
as genuine string values.
|
||||||
|
|
||||||
|
Note that a numeric string that begins with a leading zero (that isn't
|
||||||
|
immediately followed by a decimal separator) will not be converted to a
|
||||||
|
numeric, so values like phone numbers (e.g. `01615991375``will remain as
|
||||||
|
strings).
|
||||||
|
|
||||||
This "conversion" is handled by a cell "value binder", and you can write
|
This "conversion" is handled by a cell "value binder", and you can write
|
||||||
custom "value binders" to change the behaviour of these "conversions".
|
custom "value binders" to change the behaviour of these "conversions".
|
||||||
The standard PhpSpreadsheet package also provides an "advanced value
|
The standard PhpSpreadsheet package also provides an "advanced value
|
||||||
|
|
@ -138,8 +143,10 @@ Formats handled by the advanced value binder include:
|
||||||
- When strings contain a newline character (`\n`), then the cell styling is
|
- When strings contain a newline character (`\n`), then the cell styling is
|
||||||
set to wrap.
|
set to wrap.
|
||||||
|
|
||||||
You can read more about value binders later in this section of the
|
Basically, it attempts to mimic the behaviour of the MS Excel GUI.
|
||||||
documentation.
|
|
||||||
|
You can read more about value binders [later in this section of the
|
||||||
|
documentation](#using-value-binders-to-facilitate-data-entry).
|
||||||
|
|
||||||
### Setting a formula in a Cell
|
### Setting a formula in a Cell
|
||||||
|
|
||||||
|
|
@ -551,8 +558,13 @@ $spreadsheet->getActiveSheet()->setCellValue('A5', 'Date/time value:');
|
||||||
$spreadsheet->getActiveSheet()->setCellValue('B5', '21 December 1983');
|
$spreadsheet->getActiveSheet()->setCellValue('B5', '21 December 1983');
|
||||||
```
|
```
|
||||||
|
|
||||||
**Creating your own value binder is easy.** When advanced value binding
|
Alternatively, a `\PhpOffice\PhpSpreadsheet\Cell\StringValueBinder` class is available
|
||||||
is required, you can implement the
|
if you want to preserve all string content as strings. This might be appropriate if you
|
||||||
`\PhpOffice\PhpSpreadsheet\Cell\IValueBinder` interface or extend the
|
were loading a file containing values that could be interpreted as numbers (e.g. numbers
|
||||||
|
with leading zeroes such as phone numbers), but that should be retained as strings.
|
||||||
|
|
||||||
|
**Creating your own value binder is relatively straightforward.** When more specialised
|
||||||
|
value binding is required, you can implement the
|
||||||
|
`\PhpOffice\PhpSpreadsheet\Cell\IValueBinder` interface or extend the existing
|
||||||
`\PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder` or
|
`\PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder` or
|
||||||
`\PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder` classes.
|
`\PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder` classes.
|
||||||
|
|
|
||||||
|
|
@ -57,11 +57,11 @@ class DefaultValueBinder implements IValueBinder
|
||||||
return DataType::TYPE_STRING;
|
return DataType::TYPE_STRING;
|
||||||
} elseif ($value instanceof RichText) {
|
} elseif ($value instanceof RichText) {
|
||||||
return DataType::TYPE_INLINE;
|
return DataType::TYPE_INLINE;
|
||||||
} elseif (is_string($value) && $value[0] === '=' && strlen($value) > 1) {
|
} elseif (is_string($value) && strlen($value) > 1 && $value[0] === '=') {
|
||||||
return DataType::TYPE_FORMULA;
|
return DataType::TYPE_FORMULA;
|
||||||
} elseif (preg_match('/^[\+\-]?(\d+\\.?\d*|\d*\\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $value)) {
|
} elseif (preg_match('/^[\+\-]?(\d+\\.?\d*|\d*\\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $value)) {
|
||||||
$tValue = ltrim($value, '+-');
|
$tValue = ltrim($value, '+-');
|
||||||
if (is_string($value) && $tValue[0] === '0' && strlen($tValue) > 1 && $tValue[1] !== '.') {
|
if (is_string($value) && strlen($tValue) > 1 && $tValue[0] === '0' && $tValue[1] !== '.') {
|
||||||
return DataType::TYPE_STRING;
|
return DataType::TYPE_STRING;
|
||||||
} elseif ((strpos($value, '.') === false) && ($value > PHP_INT_MAX)) {
|
} elseif ((strpos($value, '.') === false) && ($value > PHP_INT_MAX)) {
|
||||||
return DataType::TYPE_STRING;
|
return DataType::TYPE_STRING;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue