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');
|
||||
```
|
||||
|
||||
### 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
|
||||
|
||||
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 mixed $value Value to bind in cell
|
||||
*
|
||||
* @throws \PhpOffice\PhpSpreadsheet\Exception
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function bindValue(Cell $cell, $value = null)
|
||||
|
|
|
@ -14,6 +14,8 @@ class DefaultValueBinder implements IValueBinder
|
|||
* @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)
|
||||
|
|
|
@ -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