String value binder (#901)
* Document calculation caching; and how to disable it and how to flush the cache * Quoted text for string values beginning with `=`, so that they are still treated as strings and not as formulae * Warning about assigning cells to variables * Further warning about assigning cells to variables * getCell() with a second argument * Added String Value Binder, and a Reader example demonstrating how to use it * Ensure value is a string before binding * Sample file for String Value Binder * PHPCS moaning about order or use statements * Order of annotations, that PHPStorm determined, isn't what phpcs says it should be
This commit is contained in:
parent
58a5172b8f
commit
c9dc1e6130
|
@ -34,6 +34,13 @@ $spreadsheet->getActiveSheet()
|
||||||
->setValue('Some value');
|
->setValue('Some value');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Creating a new Cell
|
||||||
|
|
||||||
|
If you make a call to `getCell()`, and the cell doesn't already exist, then
|
||||||
|
PhpSpreadsheet will (by default) create the cell for you. If you don't want
|
||||||
|
to create a new cell, then you can pass a second argument of false, and then
|
||||||
|
`getCell()` will return a null if the cell doesn't exist.
|
||||||
|
|
||||||
### BEWARE: Cells assigned to variables as a Detached Reference
|
### BEWARE: Cells assigned to variables as a Detached Reference
|
||||||
|
|
||||||
As an "in-memory" model, PHPSpreadsheet can be very demanding of memory,
|
As an "in-memory" model, PHPSpreadsheet can be very demanding of memory,
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Cell\Cell;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder;
|
||||||
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||||
|
|
||||||
|
require __DIR__ . '/../Header.php';
|
||||||
|
|
||||||
|
Cell::setValueBinder(new StringValueBinder());
|
||||||
|
|
||||||
|
$inputFileType = 'Csv';
|
||||||
|
$inputFileName = __DIR__ . '/sampleData/longIntegers.csv';
|
||||||
|
|
||||||
|
$reader = IOFactory::createReader($inputFileType);
|
||||||
|
$helper->log('Loading file ' . pathinfo($inputFileName, PATHINFO_BASENAME) . ' into WorkSheet #1 using IOFactory with a defined reader type of ' . $inputFileType);
|
||||||
|
|
||||||
|
$spreadsheet = $reader->load($inputFileName);
|
||||||
|
$spreadsheet->getActiveSheet()->setTitle(pathinfo($inputFileName, PATHINFO_BASENAME));
|
||||||
|
|
||||||
|
$helper->log($spreadsheet->getSheetCount() . ' worksheet' . (($spreadsheet->getSheetCount() == 1) ? '' : 's') . ' loaded');
|
||||||
|
$loadedSheetNames = $spreadsheet->getSheetNames();
|
||||||
|
foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
|
||||||
|
$helper->log('<b>Worksheet #' . $sheetIndex . ' -> ' . $loadedSheetName . ' (Formatted)</b>');
|
||||||
|
$spreadsheet->setActiveSheetIndexByName($loadedSheetName);
|
||||||
|
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
|
||||||
|
var_dump($sheetData);
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
"Column 1","Column 2"
|
||||||
|
123456789012345678901234,234567890123456789012345
|
||||||
|
345678901234567890123456,456789012345678901234567
|
||||||
|
567890123456789012345678,678901234567890123456789
|
||||||
|
789012345678901234567890,890123456789012345678901
|
||||||
|
901234567890123456789012,012345678901234567890123
|
|
|
@ -16,6 +16,8 @@ class AdvancedValueBinder extends DefaultValueBinder implements IValueBinder
|
||||||
* @param Cell $cell Cell to bind value to
|
* @param Cell $cell Cell to bind value to
|
||||||
* @param mixed $value Value to bind in cell
|
* @param mixed $value Value to bind in cell
|
||||||
*
|
*
|
||||||
|
* @throws \PhpOffice\PhpSpreadsheet\Exception
|
||||||
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function bindValue(Cell $cell, $value = null)
|
public function bindValue(Cell $cell, $value = null)
|
||||||
|
|
|
@ -14,6 +14,8 @@ class DefaultValueBinder implements IValueBinder
|
||||||
* @param Cell $cell Cell to bind value to
|
* @param Cell $cell Cell to bind value to
|
||||||
* @param mixed $value Value to bind in cell
|
* @param mixed $value Value to bind in cell
|
||||||
*
|
*
|
||||||
|
* @throws \PhpOffice\PhpSpreadsheet\Exception
|
||||||
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function bindValue(Cell $cell, $value)
|
public function bindValue(Cell $cell, $value)
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpSpreadsheet\Cell;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
|
||||||
|
|
||||||
|
class StringValueBinder implements IValueBinder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Bind value to a cell.
|
||||||
|
*
|
||||||
|
* @param Cell $cell Cell to bind value to
|
||||||
|
* @param mixed $value Value to bind in cell
|
||||||
|
*
|
||||||
|
* @throws \PhpOffice\PhpSpreadsheet\Exception
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function bindValue(Cell $cell, $value)
|
||||||
|
{
|
||||||
|
// sanitize UTF-8 strings
|
||||||
|
if (is_string($value)) {
|
||||||
|
$value = StringHelper::sanitizeUTF8($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cell->setValueExplicit((string) $value, DataType::TYPE_STRING);
|
||||||
|
|
||||||
|
// Done!
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue