update
4
vendor/phpoffice/phpspreadsheet/.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/tests export-ignore
|
||||
README.md export-ignore
|
||||
*.min.js binary
|
||||
/.github export-ignore
|
||||
10
vendor/phpoffice/phpspreadsheet/.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
/tests/codeCoverage
|
||||
/analysis
|
||||
/vendor/
|
||||
/phpunit.xml
|
||||
|
||||
## IDE support
|
||||
*.buildpath
|
||||
*.project
|
||||
/.settings
|
||||
/.idea
|
||||
183
vendor/phpoffice/phpspreadsheet/.php_cs.dist
vendored
Normal file
@@ -0,0 +1,183 @@
|
||||
<?php
|
||||
|
||||
$finder = PhpCsFixer\Finder::create()
|
||||
->exclude(['vendor', 'tests/data/Calculation'])
|
||||
->in('samples')
|
||||
->in('src')
|
||||
->in('tests/PhpSpreadsheetTests')
|
||||
;
|
||||
|
||||
return PhpCsFixer\Config::create()
|
||||
->setRiskyAllowed(true)
|
||||
->setFinder($finder)
|
||||
->setCacheFile(sys_get_temp_dir() . '/php-cs-fixer' . preg_replace('~\W~', '-', __DIR__))
|
||||
->setRules([
|
||||
'align_multiline_comment' => true,
|
||||
'array_syntax' => ['syntax' => 'short'],
|
||||
'backtick_to_shell_exec' => true,
|
||||
'binary_operator_spaces' => true,
|
||||
'blank_line_after_namespace' => true,
|
||||
'blank_line_after_opening_tag' => true,
|
||||
'blank_line_before_statement' => true,
|
||||
'braces' => true,
|
||||
'cast_spaces' => true,
|
||||
'class_attributes_separation' => ['elements' => ['method', 'property']], // const are often grouped with other related const
|
||||
'class_definition' => true,
|
||||
'class_keyword_remove' => false, // ::class keyword gives us beter support in IDE
|
||||
'combine_consecutive_issets' => true,
|
||||
'combine_consecutive_unsets' => true,
|
||||
'compact_nullable_typehint' => true,
|
||||
'concat_space' => ['spacing' => 'one'],
|
||||
'declare_equal_normalize' => true,
|
||||
'declare_strict_types' => false, // Too early to adopt strict types
|
||||
'dir_constant' => true,
|
||||
'doctrine_annotation_array_assignment' => true,
|
||||
'doctrine_annotation_braces' => true,
|
||||
'doctrine_annotation_indentation' => true,
|
||||
'doctrine_annotation_spaces' => true,
|
||||
'elseif' => true,
|
||||
'encoding' => true,
|
||||
'ereg_to_preg' => true,
|
||||
'escape_implicit_backslashes' => true,
|
||||
'explicit_indirect_variable' => false, // I feel it makes the code actually harder to read
|
||||
'explicit_string_variable' => false, // I feel it makes the code actually harder to read
|
||||
'final_internal_class' => true,
|
||||
'full_opening_tag' => true,
|
||||
'function_declaration' => true,
|
||||
'function_to_constant' => true,
|
||||
'function_typehint_space' => true,
|
||||
'general_phpdoc_annotation_remove' => false, // No use for that
|
||||
'hash_to_slash_comment' => true,
|
||||
'header_comment' => false, // We don't use common header in all our files
|
||||
'heredoc_to_nowdoc' => false, // Not sure about this one
|
||||
'include' => true,
|
||||
'increment_style' => true,
|
||||
'indentation_type' => true,
|
||||
'is_null' => ['use_yoda_style' => false],
|
||||
'linebreak_after_opening_tag' => true,
|
||||
'line_ending' => true,
|
||||
'list_syntax' => ['syntax' => 'short'],
|
||||
'lowercase_cast' => true,
|
||||
'lowercase_constants' => true,
|
||||
'lowercase_keywords' => true,
|
||||
'magic_constant_casing' => true,
|
||||
'mb_str_functions' => false, // No, too dangerous to change that
|
||||
'method_argument_space' => true,
|
||||
'method_chaining_indentation' => true,
|
||||
'method_separation' => true,
|
||||
'modernize_types_casting' => true,
|
||||
'multiline_comment_opening_closing' => true,
|
||||
'native_function_casing' => true,
|
||||
'native_function_invocation' => false, // This is risky and seems to be micro-optimization that make code uglier so not worth it, at least for now
|
||||
'new_with_braces' => true,
|
||||
'no_alias_functions' => true,
|
||||
'no_blank_lines_after_class_opening' => true,
|
||||
'no_blank_lines_after_phpdoc' => true,
|
||||
'no_blank_lines_before_namespace' => false, // we want 1 blank line before namespace
|
||||
'no_break_comment' => true,
|
||||
'no_closing_tag' => true,
|
||||
'no_empty_comment' => true,
|
||||
'no_empty_phpdoc' => true,
|
||||
'no_empty_statement' => true,
|
||||
'no_extra_blank_lines' => true,
|
||||
'no_homoglyph_names' => true,
|
||||
'no_leading_import_slash' => true,
|
||||
'no_leading_namespace_whitespace' => true,
|
||||
'no_mixed_echo_print' => true,
|
||||
'no_multiline_whitespace_around_double_arrow' => true,
|
||||
'no_multiline_whitespace_before_semicolons' => true,
|
||||
'non_printable_character' => true,
|
||||
'no_null_property_initialization' => true,
|
||||
'no_php4_constructor' => true,
|
||||
'normalize_index_brace' => true,
|
||||
'no_short_bool_cast' => true,
|
||||
'no_short_echo_tag' => true,
|
||||
'no_singleline_whitespace_before_semicolons' => true,
|
||||
'no_spaces_after_function_name' => true,
|
||||
'no_spaces_around_offset' => true,
|
||||
'no_spaces_inside_parenthesis' => true,
|
||||
'no_superfluous_elseif' => false, // Might be risky on a huge code base
|
||||
'not_operator_with_space' => false, // No we prefer to keep '!' without spaces
|
||||
'not_operator_with_successor_space' => false, // idem
|
||||
'no_trailing_comma_in_list_call' => true,
|
||||
'no_trailing_comma_in_singleline_array' => true,
|
||||
'no_trailing_whitespace_in_comment' => true,
|
||||
'no_trailing_whitespace' => true,
|
||||
'no_unneeded_control_parentheses' => true,
|
||||
'no_unneeded_curly_braces' => true,
|
||||
'no_unneeded_final_method' => true,
|
||||
'no_unreachable_default_argument_value' => true,
|
||||
'no_unused_imports' => true,
|
||||
'no_useless_else' => true,
|
||||
'no_useless_return' => true,
|
||||
'no_whitespace_before_comma_in_array' => true,
|
||||
'no_whitespace_in_blank_line' => true,
|
||||
'object_operator_without_whitespace' => true,
|
||||
'ordered_class_elements' => false, // We prefer to keep some freedom
|
||||
'ordered_imports' => true,
|
||||
'phpdoc_add_missing_param_annotation' => true,
|
||||
'phpdoc_align' => false, // Waste of time
|
||||
'phpdoc_annotation_without_dot' => true,
|
||||
'phpdoc_indent' => true,
|
||||
'phpdoc_inline_tag' => true,
|
||||
'phpdoc_no_access' => true,
|
||||
'phpdoc_no_alias_tag' => true,
|
||||
'phpdoc_no_empty_return' => true,
|
||||
'phpdoc_no_package' => true,
|
||||
'phpdoc_no_useless_inheritdoc' => true,
|
||||
'phpdoc_order' => true,
|
||||
'phpdoc_return_self_reference' => true,
|
||||
'phpdoc_scalar' => true,
|
||||
'phpdoc_separation' => true,
|
||||
'phpdoc_single_line_var_spacing' => true,
|
||||
'phpdoc_summary' => true,
|
||||
'phpdoc_to_comment' => true,
|
||||
'phpdoc_trim' => true,
|
||||
'phpdoc_types_order' => true,
|
||||
'phpdoc_types' => true,
|
||||
'phpdoc_var_without_name' => true,
|
||||
'php_unit_construct' => true,
|
||||
'php_unit_dedicate_assert' => true,
|
||||
'php_unit_expectation' => true,
|
||||
'php_unit_fqcn_annotation' => true,
|
||||
'php_unit_mock' => true,
|
||||
'php_unit_namespaced' => true,
|
||||
'php_unit_no_expectation_annotation' => true,
|
||||
'php_unit_strict' => false, // We sometime actually need assertEquals
|
||||
'php_unit_test_annotation' => true,
|
||||
'php_unit_test_class_requires_covers' => false, // We don't care as much as we should about coverage
|
||||
'pow_to_exponentiation' => false,
|
||||
'protected_to_private' => true,
|
||||
'psr0' => true,
|
||||
'psr4' => true,
|
||||
'random_api_migration' => false, // This breaks our unit tests
|
||||
'return_type_declaration' => true,
|
||||
'self_accessor' => true,
|
||||
'semicolon_after_instruction' => false, // Buggy in `samples/index.php`
|
||||
'short_scalar_cast' => true,
|
||||
'silenced_deprecation_error' => true,
|
||||
'simplified_null_return' => false, // While technically correct we prefer to be explicit when returning null
|
||||
'single_blank_line_at_eof' => true,
|
||||
'single_blank_line_before_namespace' => true,
|
||||
'single_class_element_per_statement' => true,
|
||||
'single_import_per_statement' => true,
|
||||
'single_line_after_imports' => true,
|
||||
'single_line_comment_style' => true,
|
||||
'single_quote' => true,
|
||||
'space_after_semicolon' => true,
|
||||
'standardize_not_equals' => true,
|
||||
'static_lambda' => false, // Risky if we can't guarantee nobody use `bindTo()`
|
||||
'strict_comparison' => false, // No, too dangerous to change that
|
||||
'strict_param' => false, // No, too dangerous to change that
|
||||
'switch_case_semicolon_to_colon' => true,
|
||||
'switch_case_space' => true,
|
||||
'ternary_operator_spaces' => true,
|
||||
'ternary_to_null_coalescing' => true,
|
||||
'trailing_comma_in_multiline_array' => true,
|
||||
'trim_array_spaces' => true,
|
||||
'unary_operator_spaces' => true,
|
||||
'visibility_required' => true,
|
||||
'void_return' => false, // Cannot use that with PHP 5.6
|
||||
'whitespace_after_comma_in_array' => true,
|
||||
'yoda_style' => false,
|
||||
]);
|
||||
27
vendor/phpoffice/phpspreadsheet/.scrutinizer.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
checks:
|
||||
php: true
|
||||
|
||||
coding_style:
|
||||
php:
|
||||
spaces:
|
||||
before_parentheses:
|
||||
closure_definition: true
|
||||
around_operators:
|
||||
concatenation: true
|
||||
|
||||
build:
|
||||
nodes:
|
||||
analysis:
|
||||
tests:
|
||||
override:
|
||||
- php-scrutinizer-run
|
||||
|
||||
tools:
|
||||
external_code_coverage:
|
||||
timeout: 3600
|
||||
|
||||
build_failure_conditions:
|
||||
- 'elements.rating(<= C).new.exists' # No new classes/methods with a rating of C or worse allowed
|
||||
- 'issues.severity(>= MAJOR).new.exists' # New issues of major or higher severity
|
||||
- 'project.metric_change("scrutinizer.test_coverage", < 0)' # Code Coverage decreased from previous inspection
|
||||
- 'patches.label("Unused Use Statements").new.exists' # No new unused imports patches allowed
|
||||
57
vendor/phpoffice/phpspreadsheet/.travis.yml
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
language: php
|
||||
dist: bionic
|
||||
|
||||
php:
|
||||
- 7.1
|
||||
- 7.2
|
||||
- 7.3
|
||||
- 7.4
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- vendor
|
||||
- $HOME/.composer/cache
|
||||
|
||||
before_script:
|
||||
# Deactivate xdebug
|
||||
- phpenv config-rm xdebug.ini
|
||||
- composer install --ignore-platform-reqs
|
||||
|
||||
script:
|
||||
- ./vendor/bin/phpunit
|
||||
|
||||
jobs:
|
||||
include:
|
||||
|
||||
- stage: Code style
|
||||
php: 7.2
|
||||
script:
|
||||
- ./vendor/bin/php-cs-fixer fix --diff --verbose --dry-run
|
||||
- ./vendor/bin/phpcs --report-width=200 samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n
|
||||
|
||||
- stage: Coverage
|
||||
php: 7.2
|
||||
script:
|
||||
- pecl install pcov
|
||||
- composer require pcov/clobber --dev
|
||||
- ./vendor/bin/pcov clobber
|
||||
- ./vendor/bin/phpunit --coverage-clover coverage-clover.xml
|
||||
after_script:
|
||||
- wget https://scrutinizer-ci.com/ocular.phar
|
||||
- php ocular.phar code-coverage:upload --format=php-clover tests/coverage-clover.xml
|
||||
|
||||
- stage: API documentations
|
||||
if: tag is present
|
||||
php: 7.4
|
||||
before_script:
|
||||
- curl -O https://github.com/phpDocumentor/phpDocumentor/releases/download/v3.0.0-rc/phpDocumentor.phar
|
||||
script:
|
||||
- php phpDocumentor.phar --directory src/ --target docs/api
|
||||
deploy:
|
||||
provider: pages
|
||||
skip-cleanup: true
|
||||
local-dir: docs/api
|
||||
github-token: $GITHUB_TOKEN
|
||||
on:
|
||||
all_branches: true
|
||||
condition: $TRAVIS_BRANCH =~ ^master$
|
||||
1593
vendor/phpoffice/phpspreadsheet/CHANGELOG.PHPExcel.md
vendored
Normal file
471
vendor/phpoffice/phpspreadsheet/CHANGELOG.md
vendored
Normal file
@@ -0,0 +1,471 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com)
|
||||
and this project adheres to [Semantic Versioning](https://semver.org).
|
||||
|
||||
## [1.12.0] - 2020-04-27
|
||||
|
||||
### Added
|
||||
|
||||
- Improved the ARABIC function to also handle short-hand roman numerals
|
||||
- Added support for the FLOOR.MATH and FLOOR.PRECISE functions [#1351](https://github.com/PHPOffice/PhpSpreadsheet/pull/1351)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix ROUNDUP and ROUNDDOWN for floating-point rounding error [#1404](https://github.com/PHPOffice/PhpSpreadsheet/pull/1404)
|
||||
- Fix ROUNDUP and ROUNDDOWN for negative number [#1417](https://github.com/PHPOffice/PhpSpreadsheet/pull/1417)
|
||||
- Fix loading styles from vmlDrawings when containing whitespace [#1347](https://github.com/PHPOffice/PhpSpreadsheet/issues/1347)
|
||||
- Fix incorrect behavior when removing last row [#1365](https://github.com/PHPOffice/PhpSpreadsheet/pull/1365)
|
||||
- MATCH with a static array should return the position of the found value based on the values submitted [#1332](https://github.com/PHPOffice/PhpSpreadsheet/pull/1332)
|
||||
- Fix Xlsx Reader's handling of undefined fill color [#1353](https://github.com/PHPOffice/PhpSpreadsheet/pull/1353)
|
||||
|
||||
## [1.11.0] - 2020-03-02
|
||||
|
||||
### Added
|
||||
|
||||
- Added support for the BASE function
|
||||
- Added support for the ARABIC function
|
||||
- Conditionals - Extend Support for (NOT)CONTAINSBLANKS [#1278](https://github.com/PHPOffice/PhpSpreadsheet/pull/1278)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Handle Error in Formula Processing Better for Xls [#1267](https://github.com/PHPOffice/PhpSpreadsheet/pull/1267)
|
||||
- Handle ConditionalStyle NumberFormat When Reading Xlsx File [#1296](https://github.com/PHPOffice/PhpSpreadsheet/pull/1296)
|
||||
- Fix Xlsx Writer's handling of decimal commas [#1282](https://github.com/PHPOffice/PhpSpreadsheet/pull/1282)
|
||||
- Fix for issue by removing test code mistakenly left in [#1328](https://github.com/PHPOffice/PhpSpreadsheet/pull/1328)
|
||||
- Fix for Xls writer wrong selected cells and active sheet [#1256](https://github.com/PHPOffice/PhpSpreadsheet/pull/1256)
|
||||
- Fix active cell when freeze pane is used [#1323](https://github.com/PHPOffice/PhpSpreadsheet/pull/1323)
|
||||
- Fix XLSX file loading with autofilter containing '$' [#1326](https://github.com/PHPOffice/PhpSpreadsheet/pull/1326)
|
||||
- PHPDoc - Use `@return $this` for fluent methods [#1362](https://github.com/PHPOffice/PhpSpreadsheet/pull/1362)
|
||||
|
||||
## [1.10.1] - 2019-12-02
|
||||
|
||||
### Changed
|
||||
|
||||
- PHP 7.4 compatibility
|
||||
|
||||
### Fixed
|
||||
|
||||
- FLOOR() function accept negative number and negative significance [#1245](https://github.com/PHPOffice/PhpSpreadsheet/pull/1245)
|
||||
- Correct column style even when using rowspan [#1249](https://github.com/PHPOffice/PhpSpreadsheet/pull/1249)
|
||||
- Do not confuse defined names and cell refs [#1263](https://github.com/PHPOffice/PhpSpreadsheet/pull/1263)
|
||||
- XLSX reader/writer keep decimal for floats with a zero decimal part [#1262](https://github.com/PHPOffice/PhpSpreadsheet/pull/1262)
|
||||
- ODS writer prevent invalid numeric value if locale decimal separator is comma [#1268](https://github.com/PHPOffice/PhpSpreadsheet/pull/1268)
|
||||
- Xlsx writer actually writes plotVisOnly and dispBlanksAs from chart properties [#1266](https://github.com/PHPOffice/PhpSpreadsheet/pull/1266)
|
||||
|
||||
## [1.10.0] - 2019-11-18
|
||||
|
||||
### Changed
|
||||
|
||||
- Change license from LGPL 2.1 to MIT [#140](https://github.com/PHPOffice/PhpSpreadsheet/issues/140)
|
||||
|
||||
### Added
|
||||
|
||||
- Implementation of IFNA() logical function
|
||||
- Support "showZeros" worksheet option to change how Excel shows and handles "null" values returned from a calculation
|
||||
- Allow HTML Reader to accept HTML as a string into an existing spreadsheet [#1212](https://github.com/PHPOffice/PhpSpreadsheet/pull/1212)
|
||||
|
||||
### Fixed
|
||||
|
||||
- IF implementation properly handles the value `#N/A` [#1165](https://github.com/PHPOffice/PhpSpreadsheet/pull/1165)
|
||||
- Formula Parser: Wrong line count for stuff like "MyOtherSheet!A:D" [#1215](https://github.com/PHPOffice/PhpSpreadsheet/issues/1215)
|
||||
- Call garbage collector after removing a column to prevent stale cached values
|
||||
- Trying to remove a column that doesn't exist deletes the latest column
|
||||
- Keep big integer as integer instead of lossely casting to float [#874](https://github.com/PHPOffice/PhpSpreadsheet/pull/874)
|
||||
- Fix branch pruning handling of non boolean conditions [#1167](https://github.com/PHPOffice/PhpSpreadsheet/pull/1167)
|
||||
- Fix ODS Reader when no DC namespace are defined [#1182](https://github.com/PHPOffice/PhpSpreadsheet/pull/1182)
|
||||
- Fixed Functions->ifCondition for allowing <> and empty condition [#1206](https://github.com/PHPOffice/PhpSpreadsheet/pull/1206)
|
||||
- Validate XIRR inputs and return correct error values [#1120](https://github.com/PHPOffice/PhpSpreadsheet/issues/1120)
|
||||
- Allow to read xlsx files with exotic workbook names like "workbook2.xml" [#1183](https://github.com/PHPOffice/PhpSpreadsheet/pull/1183)
|
||||
|
||||
## [1.9.0] - 2019-08-17
|
||||
|
||||
### Changed
|
||||
|
||||
- Drop support for PHP 5.6 and 7.0, according to https://phpspreadsheet.readthedocs.io/en/latest/#php-version-support
|
||||
|
||||
### Added
|
||||
|
||||
- When <br> appears in a table cell, set the cell to wrap [#1071](https://github.com/PHPOffice/PhpSpreadsheet/issues/1071) and [#1070](https://github.com/PHPOffice/PhpSpreadsheet/pull/1070)
|
||||
- Add MAXIFS, MINIFS, COUNTIFS and Remove MINIF, MAXIF [#1056](https://github.com/PHPOffice/PhpSpreadsheet/issues/1056)
|
||||
- HLookup needs an ordered list even if range_lookup is set to false [#1055](https://github.com/PHPOffice/PhpSpreadsheet/issues/1055) and [#1076](https://github.com/PHPOffice/PhpSpreadsheet/pull/1076)
|
||||
- Improve performance of IF function calls via ranch pruning to avoid resolution of every branches [#844](https://github.com/PHPOffice/PhpSpreadsheet/pull/844)
|
||||
- MATCH function supports `*?~` Excel functionality, when match_type=0 [#1116](https://github.com/PHPOffice/PhpSpreadsheet/issues/1116)
|
||||
- Allow HTML Reader to accept HTML as a string [#1136](https://github.com/PHPOffice/PhpSpreadsheet/pull/1136)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix to AVERAGEIF() function when called with a third argument
|
||||
- Eliminate duplicate fill none style entries [#1066](https://github.com/PHPOffice/PhpSpreadsheet/issues/1066)
|
||||
- Fix number format masks containing literal (non-decimal point) dots [#1079](https://github.com/PHPOffice/PhpSpreadsheet/issues/1079)
|
||||
- Fix number format masks containing named colours that were being misinterpreted as date formats; and add support for masks that fully replace the value with a full text string [#1009](https://github.com/PHPOffice/PhpSpreadsheet/issues/1009)
|
||||
- Stricter-typed comparison testing in COUNTIF() and COUNTIFS() evaluation [#1046](https://github.com/PHPOffice/PhpSpreadsheet/issues/1046)
|
||||
- COUPNUM should not return zero when settlement is in the last period [#1020](https://github.com/PHPOffice/PhpSpreadsheet/issues/1020) and [#1021](https://github.com/PHPOffice/PhpSpreadsheet/pull/1021)
|
||||
- Fix handling of named ranges referencing sheets with spaces or "!" in their title
|
||||
- Cover `getSheetByName()` with tests for name with quote and spaces [#739](https://github.com/PHPOffice/PhpSpreadsheet/issues/739)
|
||||
- Best effort to support invalid colspan values in HTML reader - [#878](https://github.com/PHPOffice/PhpSpreadsheet/pull/878)
|
||||
- Fixes incorrect rows deletion [#868](https://github.com/PHPOffice/PhpSpreadsheet/issues/868)
|
||||
- MATCH function fix (value search by type, stop search when match_type=-1 and unordered element encountered) [#1116](https://github.com/PHPOffice/PhpSpreadsheet/issues/1116)
|
||||
- Fix `getCalculatedValue()` error with more than two INDIRECT [#1115](https://github.com/PHPOffice/PhpSpreadsheet/pull/1115)
|
||||
- Writer\Html did not hide columns [#985](https://github.com/PHPOffice/PhpSpreadsheet/pull/985)
|
||||
|
||||
## [1.8.2] - 2019-07-08
|
||||
|
||||
### Fixed
|
||||
|
||||
- Uncaught error when opening ods file and properties aren't defined [#1047](https://github.com/PHPOffice/PhpSpreadsheet/issues/1047)
|
||||
- Xlsx Reader Cell datavalidations bug [#1052](https://github.com/PHPOffice/PhpSpreadsheet/pull/1052)
|
||||
|
||||
## [1.8.1] - 2019-07-02
|
||||
|
||||
### Fixed
|
||||
|
||||
- Allow nullable theme for Xlsx Style Reader class [#1043](https://github.com/PHPOffice/PhpSpreadsheet/issues/1043)
|
||||
|
||||
## [1.8.0] - 2019-07-01
|
||||
|
||||
### Security Fix (CVE-2019-12331)
|
||||
|
||||
- Detect double-encoded xml in the Security scanner, and reject as suspicious.
|
||||
- This change also broadens the scope of the `libxml_disable_entity_loader` setting when reading XML-based formats, so that it is enabled while the xml is being parsed and not simply while it is loaded.
|
||||
On some versions of PHP, this can cause problems because it is not thread-safe, and can affect other PHP scripts running on the same server. This flag is set to true when instantiating a loader, and back to its original setting when the Reader is no longer in scope, or manually unset.
|
||||
- Provide a check to identify whether libxml_disable_entity_loader is thread-safe or not.
|
||||
|
||||
`XmlScanner::threadSafeLibxmlDisableEntityLoaderAvailability()`
|
||||
- Provide an option to disable the libxml_disable_entity_loader call through settings. This is not recommended as it reduces the security of the XML-based readers, and should only be used if you understand the consequences and have no other choice.
|
||||
|
||||
### Added
|
||||
|
||||
- Added support for the SWITCH function [#963](https://github.com/PHPOffice/PhpSpreadsheet/issues/963) and [#983](https://github.com/PHPOffice/PhpSpreadsheet/pull/983)
|
||||
- Add accounting number format style [#974](https://github.com/PHPOffice/PhpSpreadsheet/pull/974)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Whitelist `tsv` extension when opening CSV files [#429](https://github.com/PHPOffice/PhpSpreadsheet/issues/429)
|
||||
- Fix a SUMIF warning with some versions of PHP when having different length of arrays provided as input [#873](https://github.com/PHPOffice/PhpSpreadsheet/pull/873)
|
||||
- Fix incorrectly handled backslash-escaped space characters in number format
|
||||
|
||||
## [1.7.0] - 2019-05-26
|
||||
|
||||
- Added support for inline styles in Html reader (borders, alignment, width, height)
|
||||
- QuotedText cells no longer treated as formulae if the content begins with a `=`
|
||||
- Clean handling for DDE in formulae
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix handling for escaped enclosures and new lines in CSV Separator Inference
|
||||
- Fix MATCH an error was appearing when comparing strings against 0 (always true)
|
||||
- Fix wrong calculation of highest column with specified row [#700](https://github.com/PHPOffice/PhpSpreadsheet/issues/700)
|
||||
- Fix VLOOKUP
|
||||
- Fix return type hint
|
||||
|
||||
## [1.6.0] - 2019-01-02
|
||||
|
||||
### Added
|
||||
|
||||
- Refactored Matrix Functions to use external Matrix library
|
||||
- Possibility to specify custom colors of values for pie and donut charts [#768](https://github.com/PHPOffice/PhpSpreadsheet/pull/768)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Improve XLSX parsing speed if no readFilter is applied [#772](https://github.com/PHPOffice/PhpSpreadsheet/issues/772)
|
||||
- Fix column names if read filter calls in XLSX reader skip columns [#777](https://github.com/PHPOffice/PhpSpreadsheet/pull/777)
|
||||
- XLSX reader can now ignore blank cells, using the setReadEmptyCells(false) method. [#810](https://github.com/PHPOffice/PhpSpreadsheet/issues/810)
|
||||
- Fix LOOKUP function which was breaking on edge cases [#796](https://github.com/PHPOffice/PhpSpreadsheet/issues/796)
|
||||
- Fix VLOOKUP with exact matches [#809](https://github.com/PHPOffice/PhpSpreadsheet/pull/809)
|
||||
- Support COUNTIFS multiple arguments [#830](https://github.com/PHPOffice/PhpSpreadsheet/pull/830)
|
||||
- Change `libxml_disable_entity_loader()` as shortly as possible [#819](https://github.com/PHPOffice/PhpSpreadsheet/pull/819)
|
||||
- Improved memory usage and performance when loading large spreadsheets [#822](https://github.com/PHPOffice/PhpSpreadsheet/pull/822)
|
||||
- Improved performance when loading large spreadsheets [#825](https://github.com/PHPOffice/PhpSpreadsheet/pull/825)
|
||||
- Improved performance when loading large spreadsheets [#824](https://github.com/PHPOffice/PhpSpreadsheet/pull/824)
|
||||
- Fix color from CSS when reading from HTML [#831](https://github.com/PHPOffice/PhpSpreadsheet/pull/831)
|
||||
- Fix infinite loop when reading invalid ODS files [#832](https://github.com/PHPOffice/PhpSpreadsheet/pull/832)
|
||||
- Fix time format for duration is incorrect [#666](https://github.com/PHPOffice/PhpSpreadsheet/pull/666)
|
||||
- Fix iconv unsupported `//IGNORE//TRANSLIT` on IBM i [#791](https://github.com/PHPOffice/PhpSpreadsheet/issues/791)
|
||||
|
||||
### Changed
|
||||
|
||||
- `master` is the new default branch, `develop` does not exist anymore
|
||||
|
||||
## [1.5.2] - 2018-11-25
|
||||
|
||||
### Security
|
||||
|
||||
- Improvements to the design of the XML Security Scanner [#771](https://github.com/PHPOffice/PhpSpreadsheet/issues/771)
|
||||
|
||||
## [1.5.1] - 2018-11-20
|
||||
|
||||
### Security
|
||||
|
||||
- Fix and improve XXE security scanning for XML-based and HTML Readers [#771](https://github.com/PHPOffice/PhpSpreadsheet/issues/771)
|
||||
|
||||
### Added
|
||||
|
||||
- Support page margin in mPDF [#750](https://github.com/PHPOffice/PhpSpreadsheet/issues/750)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Support numeric condition in SUMIF, SUMIFS, AVERAGEIF, COUNTIF, MAXIF and MINIF [#683](https://github.com/PHPOffice/PhpSpreadsheet/issues/683)
|
||||
- SUMIFS containing multiple conditions [#704](https://github.com/PHPOffice/PhpSpreadsheet/issues/704)
|
||||
- Csv reader avoid notice when the file is empty [#743](https://github.com/PHPOffice/PhpSpreadsheet/pull/743)
|
||||
- Fix print area parser for XLSX reader [#734](https://github.com/PHPOffice/PhpSpreadsheet/pull/734)
|
||||
- Support overriding `DefaultValueBinder::dataTypeForValue()` without overriding `DefaultValueBinder::bindValue()` [#735](https://github.com/PHPOffice/PhpSpreadsheet/pull/735)
|
||||
- Mpdf export can exceed pcre.backtrack_limit [#637](https://github.com/PHPOffice/PhpSpreadsheet/issues/637)
|
||||
- Fix index overflow on data values array [#748](https://github.com/PHPOffice/PhpSpreadsheet/pull/748)
|
||||
|
||||
## [1.5.0] - 2018-10-21
|
||||
|
||||
### Added
|
||||
|
||||
- PHP 7.3 support
|
||||
- Add the DAYS() function [#594](https://github.com/PHPOffice/PhpSpreadsheet/pull/594)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Sheet title can contain exclamation mark [#325](https://github.com/PHPOffice/PhpSpreadsheet/issues/325)
|
||||
- Xls file cause the exception during open by Xls reader [#402](https://github.com/PHPOffice/PhpSpreadsheet/issues/402)
|
||||
- Skip non numeric value in SUMIF [#618](https://github.com/PHPOffice/PhpSpreadsheet/pull/618)
|
||||
- OFFSET should allow omitted height and width [#561](https://github.com/PHPOffice/PhpSpreadsheet/issues/561)
|
||||
- Correctly determine delimiter when CSV contains line breaks inside enclosures [#716](https://github.com/PHPOffice/PhpSpreadsheet/issues/716)
|
||||
|
||||
## [1.4.1] - 2018-09-30
|
||||
|
||||
### Fixed
|
||||
|
||||
- Remove locale from formatting string [#644](https://github.com/PHPOffice/PhpSpreadsheet/pull/644)
|
||||
- Allow iterators to go out of bounds with prev [#587](https://github.com/PHPOffice/PhpSpreadsheet/issues/587)
|
||||
- Fix warning when reading xlsx without styles [#631](https://github.com/PHPOffice/PhpSpreadsheet/pull/631)
|
||||
- Fix broken sample links on windows due to $baseDir having backslash [#653](https://github.com/PHPOffice/PhpSpreadsheet/pull/653)
|
||||
|
||||
## [1.4.0] - 2018-08-06
|
||||
|
||||
### Added
|
||||
|
||||
- Add excel function EXACT(value1, value2) support [#595](https://github.com/PHPOffice/PhpSpreadsheet/pull/595)
|
||||
- Support workbook view attributes for Xlsx format [#523](https://github.com/PHPOffice/PhpSpreadsheet/issues/523)
|
||||
- Read and write hyperlink for drawing image [#490](https://github.com/PHPOffice/PhpSpreadsheet/pull/490)
|
||||
- Added calculation engine support for the new bitwise functions that were added in MS Excel 2013
|
||||
- BITAND() Returns a Bitwise 'And' of two numbers
|
||||
- BITOR() Returns a Bitwise 'Or' of two number
|
||||
- BITXOR() Returns a Bitwise 'Exclusive Or' of two numbers
|
||||
- BITLSHIFT() Returns a number shifted left by a specified number of bits
|
||||
- BITRSHIFT() Returns a number shifted right by a specified number of bits
|
||||
- Added calculation engine support for other new functions that were added in MS Excel 2013 and MS Excel 2016
|
||||
- Text Functions
|
||||
- CONCAT() Synonym for CONCATENATE()
|
||||
- NUMBERVALUE() Converts text to a number, in a locale-independent way
|
||||
- UNICHAR() Synonym for CHAR() in PHPSpreadsheet, which has always used UTF-8 internally
|
||||
- UNIORD() Synonym for ORD() in PHPSpreadsheet, which has always used UTF-8 internally
|
||||
- TEXTJOIN() Joins together two or more text strings, separated by a delimiter
|
||||
- Logical Functions
|
||||
- XOR() Returns a logical Exclusive Or of all arguments
|
||||
- Date/Time Functions
|
||||
- ISOWEEKNUM() Returns the ISO 8601 week number of the year for a given date
|
||||
- Lookup and Reference Functions
|
||||
- FORMULATEXT() Returns a formula as a string
|
||||
- Financial Functions
|
||||
- PDURATION() Calculates the number of periods required for an investment to reach a specified value
|
||||
- RRI() Calculates the interest rate required for an investment to grow to a specified future value
|
||||
- Engineering Functions
|
||||
- ERF.PRECISE() Returns the error function integrated between 0 and a supplied limit
|
||||
- ERFC.PRECISE() Synonym for ERFC
|
||||
- Math and Trig Functions
|
||||
- SEC() Returns the secant of an angle
|
||||
- SECH() Returns the hyperbolic secant of an angle
|
||||
- CSC() Returns the cosecant of an angle
|
||||
- CSCH() Returns the hyperbolic cosecant of an angle
|
||||
- COT() Returns the cotangent of an angle
|
||||
- COTH() Returns the hyperbolic cotangent of an angle
|
||||
- ACOT() Returns the cotangent of an angle
|
||||
- ACOTH() Returns the hyperbolic cotangent of an angle
|
||||
- Refactored Complex Engineering Functions to use external complex number library
|
||||
- Added calculation engine support for the new complex number functions that were added in MS Excel 2013
|
||||
- IMCOSH() Returns the hyperbolic cosine of a complex number
|
||||
- IMCOT() Returns the cotangent of a complex number
|
||||
- IMCSC() Returns the cosecant of a complex number
|
||||
- IMCSCH() Returns the hyperbolic cosecant of a complex number
|
||||
- IMSEC() Returns the secant of a complex number
|
||||
- IMSECH() Returns the hyperbolic secant of a complex number
|
||||
- IMSINH() Returns the hyperbolic sine of a complex number
|
||||
- IMTAN() Returns the tangent of a complex number
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix ISFORMULA() function to work with a cell reference to another worksheet
|
||||
- Xlsx reader crashed when reading a file with workbook protection [#553](https://github.com/PHPOffice/PhpSpreadsheet/pull/553)
|
||||
- Cell formats with escaped spaces were causing incorrect date formatting [#557](https://github.com/PHPOffice/PhpSpreadsheet/issues/557)
|
||||
- Could not open CSV file containing HTML fragment [#564](https://github.com/PHPOffice/PhpSpreadsheet/issues/564)
|
||||
- Exclude the vendor folder in migration [#481](https://github.com/PHPOffice/PhpSpreadsheet/issues/481)
|
||||
- Chained operations on cell ranges involving borders operated on last cell only [#428](https://github.com/PHPOffice/PhpSpreadsheet/issues/428)
|
||||
- Avoid memory exhaustion when cloning worksheet with a drawing [#437](https://github.com/PHPOffice/PhpSpreadsheet/issues/437)
|
||||
- Migration tool keep variables containing $PHPExcel untouched [#598](https://github.com/PHPOffice/PhpSpreadsheet/issues/598)
|
||||
- Rowspans/colspans were incorrect when adding worksheet using loadIntoExisting [#619](https://github.com/PHPOffice/PhpSpreadsheet/issues/619)
|
||||
|
||||
## [1.3.1] - 2018-06-12
|
||||
|
||||
### Fixed
|
||||
|
||||
- Ranges across Z and AA columns incorrectly threw an exception [#545](https://github.com/PHPOffice/PhpSpreadsheet/issues/545)
|
||||
|
||||
## [1.3.0] - 2018-06-10
|
||||
|
||||
### Added
|
||||
|
||||
- Support to read Xlsm templates with form elements, macros, printer settings, protected elements and back compatibility drawing, and save result without losing important elements of document [#435](https://github.com/PHPOffice/PhpSpreadsheet/issues/435)
|
||||
- Expose sheet title maximum length as `Worksheet::SHEET_TITLE_MAXIMUM_LENGTH` [#482](https://github.com/PHPOffice/PhpSpreadsheet/issues/482)
|
||||
- Allow escape character to be set in CSV reader [#492](https://github.com/PHPOffice/PhpSpreadsheet/issues/492)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Subtotal 9 in a group that has other subtotals 9 exclude the totals of the other subtotals in the range [#332](https://github.com/PHPOffice/PhpSpreadsheet/issues/332)
|
||||
- `Helper\Html` support UTF-8 HTML input [#444](https://github.com/PHPOffice/PhpSpreadsheet/issues/444)
|
||||
- Xlsx loaded an extra empty comment for each real comment [#375](https://github.com/PHPOffice/PhpSpreadsheet/issues/375)
|
||||
- Xlsx reader do not read rows and columns filtered out in readFilter at all [#370](https://github.com/PHPOffice/PhpSpreadsheet/issues/370)
|
||||
- Make newer Excel versions properly recalculate formulas on document open [#456](https://github.com/PHPOffice/PhpSpreadsheet/issues/456)
|
||||
- `Coordinate::extractAllCellReferencesInRange()` throws an exception for an invalid range [#519](https://github.com/PHPOffice/PhpSpreadsheet/issues/519)
|
||||
- Fixed parsing of conditionals in COUNTIF functions [#526](https://github.com/PHPOffice/PhpSpreadsheet/issues/526)
|
||||
- Corruption errors for saved Xlsx docs with frozen panes [#532](https://github.com/PHPOffice/PhpSpreadsheet/issues/532)
|
||||
|
||||
## [1.2.1] - 2018-04-10
|
||||
|
||||
### Fixed
|
||||
|
||||
- Plain text and richtext mixed in same cell can be read [#442](https://github.com/PHPOffice/PhpSpreadsheet/issues/442)
|
||||
|
||||
## [1.2.0] - 2018-03-04
|
||||
|
||||
### Added
|
||||
|
||||
- HTML writer creates a generator meta tag [#312](https://github.com/PHPOffice/PhpSpreadsheet/issues/312)
|
||||
- Support invalid zoom value in XLSX format [#350](https://github.com/PHPOffice/PhpSpreadsheet/pull/350)
|
||||
- Support for `_xlfn.` prefixed functions and `ISFORMULA`, `MODE.SNGL`, `STDEV.S`, `STDEV.P` [#390](https://github.com/PHPOffice/PhpSpreadsheet/pull/390)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Avoid potentially unsupported PSR-16 cache keys [#354](https://github.com/PHPOffice/PhpSpreadsheet/issues/354)
|
||||
- Check for MIME type to know if CSV reader can read a file [#167](https://github.com/PHPOffice/PhpSpreadsheet/issues/167)
|
||||
- Use proper € symbol for currency format [#379](https://github.com/PHPOffice/PhpSpreadsheet/pull/379)
|
||||
- Read printing area correctly when skipping some sheets [#371](https://github.com/PHPOffice/PhpSpreadsheet/issues/371)
|
||||
- Avoid incorrectly overwriting calculated value type [#394](https://github.com/PHPOffice/PhpSpreadsheet/issues/394)
|
||||
- Select correct cell when calling freezePane [#389](https://github.com/PHPOffice/PhpSpreadsheet/issues/389)
|
||||
- `setStrikethrough()` did not set the font [#403](https://github.com/PHPOffice/PhpSpreadsheet/issues/403)
|
||||
|
||||
## [1.1.0] - 2018-01-28
|
||||
|
||||
### Added
|
||||
|
||||
- Support for PHP 7.2
|
||||
- Support cell comments in HTML writer and reader [#308](https://github.com/PHPOffice/PhpSpreadsheet/issues/308)
|
||||
- Option to stop at a conditional styling, if it matches (only XLSX format) [#292](https://github.com/PHPOffice/PhpSpreadsheet/pull/292)
|
||||
- Support for line width for data series when rendering Xlsx [#329](https://github.com/PHPOffice/PhpSpreadsheet/pull/329)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Better auto-detection of CSV separators [#305](https://github.com/PHPOffice/PhpSpreadsheet/issues/305)
|
||||
- Support for shape style ending with `;` [#304](https://github.com/PHPOffice/PhpSpreadsheet/issues/304)
|
||||
- Freeze Panes takes wrong coordinates for XLSX [#322](https://github.com/PHPOffice/PhpSpreadsheet/issues/322)
|
||||
- `COLUMNS` and `ROWS` functions crashed in some cases [#336](https://github.com/PHPOffice/PhpSpreadsheet/issues/336)
|
||||
- Support XML file without styles [#331](https://github.com/PHPOffice/PhpSpreadsheet/pull/331)
|
||||
- Cell coordinates which are already a range cause an exception [#319](https://github.com/PHPOffice/PhpSpreadsheet/issues/319)
|
||||
|
||||
## [1.0.0] - 2017-12-25
|
||||
|
||||
### Added
|
||||
|
||||
- Support to write merged cells in ODS format [#287](https://github.com/PHPOffice/PhpSpreadsheet/issues/287)
|
||||
- Able to set the `topLeftCell` in freeze panes [#261](https://github.com/PHPOffice/PhpSpreadsheet/pull/261)
|
||||
- Support `DateTimeImmutable` as cell value
|
||||
- Support migration of prefixed classes
|
||||
|
||||
### Fixed
|
||||
|
||||
- Can read very small HTML files [#194](https://github.com/PHPOffice/PhpSpreadsheet/issues/194)
|
||||
- Written DataValidation was corrupted [#290](https://github.com/PHPOffice/PhpSpreadsheet/issues/290)
|
||||
- Date format compatible with both LibreOffice and Excel [#298](https://github.com/PHPOffice/PhpSpreadsheet/issues/298)
|
||||
|
||||
### BREAKING CHANGE
|
||||
|
||||
- Constant `TYPE_DOUGHTNUTCHART` is now `TYPE_DOUGHNUTCHART`.
|
||||
|
||||
## [1.0.0-beta2] - 2017-11-26
|
||||
|
||||
### Added
|
||||
|
||||
- Support for chart fill color - @CrazyBite [#158](https://github.com/PHPOffice/PhpSpreadsheet/pull/158)
|
||||
- Support for read Hyperlink for xml - @GreatHumorist [#223](https://github.com/PHPOffice/PhpSpreadsheet/pull/223)
|
||||
- Support for cell value validation according to data validation rules - @SailorMax [#257](https://github.com/PHPOffice/PhpSpreadsheet/pull/257)
|
||||
- Support for custom implementation, or configuration, of PDF libraries - @SailorMax [#266](https://github.com/PHPOffice/PhpSpreadsheet/pull/266)
|
||||
|
||||
### Changed
|
||||
|
||||
- Merge data-validations to reduce written worksheet size - @billblume [#131](https://github.com/PHPOffice/PhpSpreadSheet/issues/131)
|
||||
- Throws exception if a XML file is invalid - @GreatHumorist [#222](https://github.com/PHPOffice/PhpSpreadsheet/pull/222)
|
||||
- Upgrade to mPDF 7.0+ [#144](https://github.com/PHPOffice/PhpSpreadsheet/issues/144)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Control characters in cell values are automatically escaped [#212](https://github.com/PHPOffice/PhpSpreadsheet/issues/212)
|
||||
- Prevent color changing when copy/pasting xls files written by PhpSpreadsheet to another file - @al-lala [#218](https://github.com/PHPOffice/PhpSpreadsheet/issues/218)
|
||||
- Add cell reference automatic when there is no cell reference('r' attribute) in Xlsx file. - @GreatHumorist [#225](https://github.com/PHPOffice/PhpSpreadsheet/pull/225) Refer to [#201](https://github.com/PHPOffice/PhpSpreadsheet/issues/201)
|
||||
- `Reader\Xlsx::getFromZipArchive()` function return false if the zip entry could not be located. - @anton-harvey [#268](https://github.com/PHPOffice/PhpSpreadsheet/pull/268)
|
||||
|
||||
### BREAKING CHANGE
|
||||
|
||||
- Extracted coordinate method to dedicate class [migration guide](./docs/topics/migration-from-PHPExcel.md).
|
||||
- Column indexes are based on 1, see the [migration guide](./docs/topics/migration-from-PHPExcel.md).
|
||||
- Standardization of array keys used for style, see the [migration guide](./docs/topics/migration-from-PHPExcel.md).
|
||||
- Easier usage of PDF writers, and other custom readers and writers, see the [migration guide](./docs/topics/migration-from-PHPExcel.md).
|
||||
- Easier usage of chart renderers, see the [migration guide](./docs/topics/migration-from-PHPExcel.md).
|
||||
- Rename a few more classes to keep them in their related namespaces:
|
||||
- `CalcEngine` => `Calculation\Engine`
|
||||
- `PhpSpreadsheet\Calculation` => `PhpSpreadsheet\Calculation\Calculation`
|
||||
- `PhpSpreadsheet\Cell` => `PhpSpreadsheet\Cell\Cell`
|
||||
- `PhpSpreadsheet\Chart` => `PhpSpreadsheet\Chart\Chart`
|
||||
- `PhpSpreadsheet\RichText` => `PhpSpreadsheet\RichText\RichText`
|
||||
- `PhpSpreadsheet\Style` => `PhpSpreadsheet\Style\Style`
|
||||
- `PhpSpreadsheet\Worksheet` => `PhpSpreadsheet\Worksheet\Worksheet`
|
||||
|
||||
## [1.0.0-beta] - 2017-08-17
|
||||
|
||||
### Added
|
||||
|
||||
- Initial implementation of SUMIFS() function
|
||||
- Additional codepages
|
||||
- MemoryDrawing not working in HTML writer [#808](https://github.com/PHPOffice/PHPExcel/issues/808)
|
||||
- CSV Reader can auto-detect the separator used in file [#141](https://github.com/PHPOffice/PhpSpreadsheet/pull/141)
|
||||
- HTML Reader supports some basic inline styles [#180](https://github.com/PHPOffice/PhpSpreadsheet/pull/180)
|
||||
|
||||
### Changed
|
||||
|
||||
- Start following [SemVer](https://semver.org) properly.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix to getCell() method when cell reference includes a worksheet reference - @MarkBaker
|
||||
- Ignore inlineStr type if formula element exists - @ncrypthic [#570](https://github.com/PHPOffice/PHPExcel/issues/570)
|
||||
- Excel 2007 Reader freezes because of conditional formatting - @rentalhost [#575](https://github.com/PHPOffice/PHPExcel/issues/575)
|
||||
- Readers will now parse files containing worksheet titles over 31 characters [#176](https://github.com/PHPOffice/PhpSpreadsheet/pull/176)
|
||||
|
||||
### General
|
||||
|
||||
- Whitespace after toRichTextObject() - @MarkBaker [#554](https://github.com/PHPOffice/PHPExcel/issues/554)
|
||||
- Optimize vlookup() sort - @umpirsky [#548](https://github.com/PHPOffice/PHPExcel/issues/548)
|
||||
- c:max and c:min elements shall NOT be inside c:orientation elements - @vitalyrepin [#869](https://github.com/PHPOffice/PHPExcel/pull/869)
|
||||
- Implement actual timezone adjustment into PHPExcel_Shared_Date::PHPToExcel - @sim642 [#489](https://github.com/PHPOffice/PHPExcel/pull/489)
|
||||
|
||||
### BREAKING CHANGE
|
||||
|
||||
- Introduction of namespaces for all classes, eg: `PHPExcel_Calculation_Functions` becomes `PhpOffice\PhpSpreadsheet\Calculation\Functions`
|
||||
- Some classes were renamed for clarity and/or consistency:
|
||||
|
||||
For a comprehensive list of all class changes, and a semi-automated migration path, read the [migration guide](./docs/topics/migration-from-PHPExcel.md).
|
||||
|
||||
- Dropped `PHPExcel_Calculation_Functions::VERSION()`. Composer or git should be used to know the version.
|
||||
- Dropped `PHPExcel_Settings::setPdfRenderer()` and `PHPExcel_Settings::setPdfRenderer()`. Composer should be used to autoload PDF libs.
|
||||
- Dropped support for HHVM
|
||||
|
||||
## Previous versions of PHPExcel
|
||||
|
||||
The changelog for the project when it was called PHPExcel is [still available](./CHANGELOG.PHPExcel.md).
|
||||
11
vendor/phpoffice/phpspreadsheet/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
# Want to contribute?
|
||||
|
||||
If you would like to contribute, here are some notes and guidelines:
|
||||
|
||||
- All new development happens on feature/fix branches, and are then merged to the `master` branch once stable; so the `master` branch is always the most up-to-date, working code
|
||||
- Tagged releases are made from the `master` branch
|
||||
- If you are going to be submitting a pull request, please fork from `master`, and submit your pull request back as a fix/feature branch referencing the GitHub issue number
|
||||
- Code style might be automatically fixed by `composer fix`
|
||||
- All code changes must be validated by `composer check`
|
||||
- [Helpful article about forking](https://help.github.com/articles/fork-a-repo/ "Forking a GitHub repository")
|
||||
- [Helpful article about pull requests](https://help.github.com/articles/using-pull-requests/ "Pull Requests")
|
||||
21
vendor/phpoffice/phpspreadsheet/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 PhpSpreadsheet Authors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
24
vendor/phpoffice/phpspreadsheet/bin/generate-document
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\DocumentGenerator;
|
||||
|
||||
require_once __DIR__ . '/../src/Bootstrap.php';
|
||||
|
||||
try {
|
||||
$phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class))->getProperty('phpSpreadsheetFunctions');
|
||||
$phpSpreadsheetFunctionsProperty->setAccessible(true);
|
||||
$phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue();
|
||||
ksort($phpSpreadsheetFunctions);
|
||||
|
||||
file_put_contents(__DIR__ . '/../docs/references/function-list-by-category.md',
|
||||
DocumentGenerator::generateFunctionListByCategory($phpSpreadsheetFunctions)
|
||||
);
|
||||
file_put_contents(__DIR__ . '/../docs/references/function-list-by-name.md',
|
||||
DocumentGenerator::generateFunctionListByName($phpSpreadsheetFunctions)
|
||||
);
|
||||
} catch (ReflectionException $e) {
|
||||
fwrite(STDERR, (string)$e);
|
||||
exit(1);
|
||||
}
|
||||
8
vendor/phpoffice/phpspreadsheet/bin/migrate-from-phpexcel
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
use PhpOffice\PhpSpreadsheet\Helper\Migrator;
|
||||
|
||||
require_once __DIR__ . '/../src/Bootstrap.php';
|
||||
|
||||
$migrator = new Migrator();
|
||||
$migrator->migrate();
|
||||
33
vendor/phpoffice/phpspreadsheet/bin/pre-commit
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
pass=true
|
||||
|
||||
files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.(php|phtml)$')
|
||||
if [ "$files" != "" ]; then
|
||||
|
||||
# Run php syntax check before commit
|
||||
while read -r file; do
|
||||
php -l "$file"
|
||||
if [ $? -ne 0 ]; then
|
||||
pass=false
|
||||
fi
|
||||
done <<< "$files"
|
||||
|
||||
# Run php-cs-fixer validation before commit
|
||||
echo "$files" | xargs ./vendor/bin/php-cs-fixer fix --diff --config .php_cs.dist
|
||||
if [ $? -ne 0 ]; then
|
||||
pass=false
|
||||
fi
|
||||
|
||||
# Automatically add files that may have been fixed by php-cs-fixer
|
||||
echo "$files" | xargs git add
|
||||
fi
|
||||
|
||||
if $pass; then
|
||||
exit 0
|
||||
else
|
||||
echo ""
|
||||
echo "PRE-COMMIT HOOK FAILED:"
|
||||
echo "Code style validation failed. Please fix errors and try committing again."
|
||||
exit 1
|
||||
fi
|
||||
86
vendor/phpoffice/phpspreadsheet/composer.json
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"name": "phpoffice/phpspreadsheet",
|
||||
"description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
|
||||
"keywords": ["PHP", "OpenXML", "Excel", "xlsx", "xls", "ods", "gnumeric", "spreadsheet"],
|
||||
"homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
|
||||
"type": "library",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Maarten Balliauw",
|
||||
"homepage": "https://blog.maartenballiauw.be"
|
||||
},
|
||||
{
|
||||
"name": "Mark Baker",
|
||||
"homepage": "https://markbakeruk.net"
|
||||
},
|
||||
{
|
||||
"name": "Franck Lefevre",
|
||||
"homepage": "https://rootslabs.net"
|
||||
},
|
||||
{
|
||||
"name": "Erik Tilt"
|
||||
},
|
||||
{
|
||||
"name": "Adrien Crivelli"
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"check": [
|
||||
"php-cs-fixer fix --ansi --dry-run --diff",
|
||||
"phpcs --report-width=200 samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n",
|
||||
"phpunit --color=always"
|
||||
],
|
||||
"fix": [
|
||||
"php-cs-fixer fix --ansi"
|
||||
],
|
||||
"versions": [
|
||||
"phpcs --report-width=200 samples/ src/ tests/ --ignore=samples/Header.php --standard=PHPCompatibility --runtime-set testVersion 7.1- -n"
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1",
|
||||
"ext-ctype": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-gd": "*",
|
||||
"ext-iconv": "*",
|
||||
"ext-fileinfo": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-SimpleXML": "*",
|
||||
"ext-xml": "*",
|
||||
"ext-xmlreader": "*",
|
||||
"ext-xmlwriter": "*",
|
||||
"ext-zip": "*",
|
||||
"ext-zlib": "*",
|
||||
"markbaker/complex": "^1.4",
|
||||
"markbaker/matrix": "^1.2",
|
||||
"psr/simple-cache": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"dompdf/dompdf": "^0.8.3",
|
||||
"friendsofphp/php-cs-fixer": "^2.16",
|
||||
"jpgraph/jpgraph": "^4.0",
|
||||
"mpdf/mpdf": "^8.0",
|
||||
"phpcompatibility/php-compatibility": "^9.3",
|
||||
"phpunit/phpunit": "^7.5",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"tecnickcom/tcpdf": "^6.3"
|
||||
},
|
||||
"suggest": {
|
||||
"mpdf/mpdf": "Option for rendering PDF with PDF Writer",
|
||||
"dompdf/dompdf": "Option for rendering PDF with PDF Writer",
|
||||
"tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer",
|
||||
"jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"PhpOffice\\PhpSpreadsheetTests\\": "tests/PhpSpreadsheetTests"
|
||||
}
|
||||
}
|
||||
}
|
||||
3503
vendor/phpoffice/phpspreadsheet/composer.lock
generated
vendored
Normal file
947
vendor/phpoffice/phpspreadsheet/docs/assets/logo.svg
vendored
Normal file
@@ -0,0 +1,947 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="593.83423"
|
||||
height="83.444862"
|
||||
viewBox="0 0 593.83424 83.444862"
|
||||
enable-background="new 0 0 281.667 108"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="logo.svg"><metadata
|
||||
id="metadata1423"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1421" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="851"
|
||||
id="namedview1419"
|
||||
showgrid="false"
|
||||
fit-margin-top="5"
|
||||
fit-margin-left="5"
|
||||
fit-margin-right="5"
|
||||
fit-margin-bottom="5"
|
||||
inkscape:zoom="0.95059059"
|
||||
inkscape:cx="116.66179"
|
||||
inkscape:cy="16.493976"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1" /><pattern
|
||||
x="-372.333"
|
||||
y="550.667"
|
||||
width="69"
|
||||
height="69"
|
||||
patternUnits="userSpaceOnUse"
|
||||
id="Polka_Dot_Pattern"
|
||||
viewBox="2.125 -70.896 69 69"
|
||||
overflow="visible"><g
|
||||
id="g4"><polygon
|
||||
fill="none"
|
||||
points="71.125,-1.896 2.125,-1.896 2.125,-70.896 71.125,-70.896 "
|
||||
id="polygon6" /><polygon
|
||||
fill="#F7BC60"
|
||||
points="71.125,-1.896 2.125,-1.896 2.125,-70.896 71.125,-70.896 "
|
||||
id="polygon8" /><g
|
||||
id="g10"><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.772-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path12" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.105-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path14" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.439-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path16" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.772-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path18" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.105-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path20" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.439-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path22" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.772-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path24" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.105-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path26" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.439-71.653c0.018,0.072,0.008,0.127-0.026,0.19C0.361-71.362,0.3-71.4,0.248-71.335 c-0.051,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224c0.002,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path28" /></g><g
|
||||
id="g30"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-71.653c0.018,0.072,0.008,0.127-0.026,0.19c-0.052,0.101-0.113,0.063-0.165,0.128 c-0.051,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224c0.002,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path32" /></g><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-71.653c0.018,0.072,0.008,0.127-0.026,0.19c-0.052,0.101-0.113,0.063-0.165,0.128 c-0.051,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224C0.5-71.68,0.503-71.744,0.51-71.626 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path34" /><g
|
||||
id="g36"><g
|
||||
id="g38"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path40" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path42" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path44" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path46" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path48" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path50" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path52" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path54" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path56" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143C2-61.45,2.217-61.397,2.391-61.46c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path58" /></g><g
|
||||
id="g60"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path62" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path64" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path66" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path68" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path70" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path72" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path74" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path76" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path78" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224C0.5-56.374,0.503-56.438,0.51-56.32 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path80" /></g><g
|
||||
id="g82"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path84" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path86" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path88" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path90" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path92" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path94" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path96" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path98" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path100" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path102" /></g><g
|
||||
id="g104"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path106" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path108" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path110" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path112" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path114" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path116" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path118" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path120" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 C8.15-41.004,8.149-41.02,8.14-41.04"
|
||||
id="path122" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path124" /></g><g
|
||||
id="g126"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path128" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path130" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path132" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path134" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path136" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path138" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path140" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path142" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path144" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224C0.5-33.416,0.503-33.48,0.51-33.362 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path146" /></g><g
|
||||
id="g148"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path150" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path152" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path154" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path156" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path158" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path160" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path162" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path164" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path166" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path168" /></g><g
|
||||
id="g170"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path172" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path174" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path176" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path178" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path180" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path182" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path184" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path186" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path188" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224C0.5-18.11,0.503-18.175,0.51-18.057 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path190" /></g><g
|
||||
id="g192"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362C69-9.692,69.159-9.523,69.154-9.4c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path194" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path196" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path198" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path200" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path202" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path204" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path206" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053C17.933-7.969,17.839-8.227,18-8.34 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path208" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 C7.915-10.05,7.866-9.836,7.886-9.75C7.717-9.692,7.876-9.523,7.871-9.4C7.868-9.351,7.83-9.295,7.826-9.239 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C9.114-7.652,9.321-7.799,9.48-7.837c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path210" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 C0.254-10.05,0.205-9.836,0.225-9.75C0.056-9.692,0.215-9.523,0.21-9.4c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37C0.33-8.671,0.501-8.456,0.668-8.325c0.19,0.148,0.365,0.572,0.608,0.631 C1.454-7.652,1.66-7.799,1.819-7.837C2-7.88,2.217-7.827,2.391-7.89c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46C3.477-8.933,3.471-8.995,3.5-9.071 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path212" /></g></g><g
|
||||
id="g214"><path
|
||||
fill="#FFFFFF"
|
||||
d="M69.439-2.778c0.018,0.072,0.008,0.127-0.026,0.19C69.361-2.487,69.3-2.525,69.248-2.46 c-0.051,0.063-0.099,0.276-0.079,0.362C69-2.04,69.159-1.871,69.154-1.748c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C70.397,0,70.604-0.146,70.763-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224c0.002,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path216" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M61.778-2.778c0.018,0.072,0.007,0.127-0.026,0.19C61.7-2.487,61.64-2.525,61.587-2.46 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C62.737,0,62.943-0.146,63.103-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224C61.915-3.117,61.78-3.02,61.781-2.92c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path218" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M54.118-2.778c0.018,0.072,0.007,0.127-0.026,0.19C54.04-2.487,53.98-2.525,53.927-2.46 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C55.077,0,55.283-0.146,55.442-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224C54.255-3.117,54.12-3.02,54.121-2.92c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path220" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M46.458-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C47.416,0,47.623-0.146,47.782-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224C46.594-3.117,46.459-3.02,46.46-2.92c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path222" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M38.797-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C39.756,0,39.962-0.146,40.122-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224C38.934-3.117,38.799-3.02,38.8-2.92c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path224" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M31.137-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C32.095,0,32.302-0.146,32.461-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224C31.273-3.117,31.139-3.02,31.14-2.92c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path226" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M23.477-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C24.435,0,24.642-0.146,24.801-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 c-0.021,0.011-0.021-0.005-0.03-0.025"
|
||||
id="path228" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M15.816-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.063-0.165,0.128 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C16.774,0,16.981-0.146,17.14-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207 c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169 C15.81-2.74,15.809-2.756,15.8-2.776"
|
||||
id="path230" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M8.156-2.778c0.018,0.072,0.007,0.127-0.026,0.19C8.077-2.487,8.018-2.525,7.965-2.46 c-0.05,0.063-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35C7.868-1.698,7.83-1.643,7.826-1.587 c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631 C9.114,0,9.321-0.146,9.48-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221 c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789C8.954-3.54,8.847-3.448,8.692-3.367 c-0.17,0.088-0.139,0.166-0.318,0.224C8.292-3.117,8.158-3.02,8.159-2.92C8.16-2.805,8.164-2.869,8.17-2.751 C8.15-2.74,8.149-2.756,8.14-2.776"
|
||||
id="path232" /><path
|
||||
fill="#FFFFFF"
|
||||
d="M0.495-2.778c0.018,0.072,0.008,0.127-0.026,0.19C0.417-2.487,0.356-2.525,0.304-2.46 C0.253-2.397,0.205-2.184,0.225-2.098C0.056-2.04,0.215-1.871,0.21-1.748c-0.002,0.05-0.041,0.105-0.045,0.161 c-0.01,0.119,0.017,0.266,0.068,0.37C0.33-1.019,0.501-0.804,0.668-0.673c0.19,0.148,0.365,0.572,0.608,0.631 C1.454,0,1.66-0.146,1.819-0.185C2-0.228,2.217-0.175,2.391-0.237c0.222-0.079,0.127-0.337,0.288-0.45 c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46C3.477-1.28,3.471-1.343,3.5-1.419 c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337 c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789C1.293-3.54,1.187-3.448,1.031-3.367 c-0.17,0.088-0.139,0.166-0.318,0.224C0.632-3.117,0.498-3.02,0.498-2.92C0.5-2.805,0.503-2.869,0.51-2.751 C0.489-2.74,0.488-2.756,0.479-2.776"
|
||||
id="path234" /></g></g></pattern><g
|
||||
id="g4799"
|
||||
transform="matrix(1.7899847,0,0,1.7899847,414.16933,-99.13773)"><path
|
||||
sodipodi:nodetypes="csssssssccsssscsssscsssssssscc"
|
||||
style="fill:#d1d3d4"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path270"
|
||||
d="m 62.312,71.939 6.483,0 c 1.159,0 2.111,-0.97 2.111,-2.129 l 0,-6.465 c 0,-1.168 -0.952,-2.11 -2.111,-2.11 l -6.483,0 c -1.159,0 -2.111,0.942 -2.111,2.11 l 0,6.465 c 0,1.159 0.951,2.129 2.111,2.129 m 29.422,-10.764 -13.303,0 c -1.167,0 -2.119,0.961 -2.119,2.128 l 0,6.698 c 0,0.861 0.554,1.771 2.119,1.771 l 8.246,0 c 0.737,0.017 1.374,0.671 1.374,1.44 l 0,14.993 c 0,0.811 -0.654,1.465 -1.457,1.465 l -14.115,0 c -0.779,0 -1.441,-0.645 -1.449,-1.439 l 0,-8.577 c 0,-1.159 -0.96,-2.104 -2.128,-2.104 l -6.442,0 c -1.175,0 -2.119,0.944 -2.119,2.104 l 0,13.718 c 0,3.212 2.616,5.837 5.845,5.837 l 25.548,0 c 3.213,0 5.845,-2.625 5.845,-5.837 l 0,-26.334 c 0.001,-3.23 -2.631,-5.863 -5.845,-5.863" /><g
|
||||
id="g350"><defs
|
||||
id="defs352"><path
|
||||
d="m 59.314,68.933 6.466,0 c 1.159,0 2.12,-0.96 2.12,-2.128 l 0,-6.466 c 0,-1.167 -0.961,-2.119 -2.12,-2.119 l -6.466,0 c -1.175,0 -2.127,0.952 -2.127,2.119 l 0,6.466 c 0.001,1.168 0.953,2.128 2.127,2.128 m -1.25,-8.594 c 0,-0.687 0.563,-1.25 1.25,-1.25 l 6.466,0 c 0.679,0 1.234,0.563 1.234,1.25 l 0,6.466 c 0,0.68 -0.555,1.25 -1.234,1.25 l -6.466,0 c -0.687,0 -1.25,-0.57 -1.25,-1.25 l 0,-6.466 z"
|
||||
id="SVGID_7_"
|
||||
inkscape:connector-curvature="0" /></defs><clipPath
|
||||
id="SVGID_8_"><use
|
||||
id="use356"
|
||||
overflow="visible"
|
||||
xlink:href="#SVGID_7_"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><linearGradient
|
||||
gradientTransform="matrix(-8.2078,6.7422,6.7422,8.2078,-4712.8232,-1057.6393)"
|
||||
y2="366.9321"
|
||||
x2="-279.9787"
|
||||
y1="366.9321"
|
||||
x1="-280.979"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_9_"><stop
|
||||
id="stop359"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0" /><stop
|
||||
id="stop361"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0.0052" /><stop
|
||||
id="stop363"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop365"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop367"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop369"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop371"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop373"
|
||||
style="stop-color:#76A93C"
|
||||
offset="0.7284" /><stop
|
||||
id="stop375"
|
||||
style="stop-color:#6BA03F"
|
||||
offset="0.818" /><stop
|
||||
id="stop377"
|
||||
style="stop-color:#599344"
|
||||
offset="0.9123" /><stop
|
||||
id="stop379"
|
||||
style="stop-color:#3F8348"
|
||||
offset="1" /></linearGradient><polygon
|
||||
id="polygon381"
|
||||
points="61.504,74.188 51.933,62.537 63.584,52.966 73.155,64.618 "
|
||||
clip-path="url(#SVGID_8_)"
|
||||
style="fill:url(#SVGID_9_)" /></g><g
|
||||
id="g383"><defs
|
||||
id="defs385"><path
|
||||
d="m 88.729,58.178 -13.304,0 c -1.167,0 -2.119,0.945 -2.119,2.12 l 0,6.689 c 0,0.87 0.554,1.764 2.119,1.764 l 8.246,0 c 0.737,0.033 1.374,0.679 1.374,1.465 l 0,14.977 c 0,0.819 -0.662,1.466 -1.465,1.466 l -14.106,0 c -0.804,0 -1.449,-0.639 -1.466,-1.434 l 0,-8.575 c 0,-1.159 -0.944,-2.111 -2.111,-2.111 l -6.449,0 c -1.167,0 -2.119,0.952 -2.119,2.111 l 0,13.71 c 0,3.22 2.624,5.836 5.844,5.836 l 25.557,0 c 3.221,0 5.828,-2.616 5.828,-5.836 l 0,-26.335 c 0,-3.222 -2.607,-5.847 -5.829,-5.847 m 4.959,32.182 c 0,2.723 -2.235,4.959 -4.959,4.959 l -25.557,0 c -2.723,0 -4.959,-2.236 -4.959,-4.959 l 0,-13.71 c 0,-0.663 0.547,-1.242 1.234,-1.242 l 6.449,0 c 0.679,0 1.242,0.579 1.242,1.242 l 0,8.593 c 0.016,1.267 1.059,2.293 2.335,2.293 l 14.107,0 c 1.283,0 2.334,-1.043 2.334,-2.343 l 0,-14.977 c 0,-1.258 -1.01,-2.302 -2.243,-2.335 l -8.246,0 c -0.679,0 -1.242,-0.198 -1.242,-0.894 l 0,-6.689 c 0,-0.687 0.563,-1.233 1.242,-1.233 l 13.304,0 c 2.724,0 4.959,2.219 4.959,4.96 l 0,26.335 z"
|
||||
id="SVGID_10_"
|
||||
inkscape:connector-curvature="0" /></defs><clipPath
|
||||
id="SVGID_11_"><use
|
||||
id="use389"
|
||||
overflow="visible"
|
||||
xlink:href="#SVGID_10_"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><linearGradient
|
||||
gradientTransform="matrix(25.2043,-29.1608,-29.1608,-25.2043,17056.752,1261.5281)"
|
||||
y2="353.40671"
|
||||
x2="-264.37891"
|
||||
y1="353.40671"
|
||||
x1="-265.37891"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_12_"><stop
|
||||
id="stop392"
|
||||
style="stop-color:#63923F"
|
||||
offset="0" /><stop
|
||||
id="stop394"
|
||||
style="stop-color:#89B33C"
|
||||
offset="0.1634" /><stop
|
||||
id="stop396"
|
||||
style="stop-color:#3A8040"
|
||||
offset="0.3416" /><stop
|
||||
id="stop398"
|
||||
style="stop-color:#D3DF9E"
|
||||
offset="0.5545" /><stop
|
||||
id="stop400"
|
||||
style="stop-color:#CDDA97"
|
||||
offset="0.5742" /><stop
|
||||
id="stop402"
|
||||
style="stop-color:#BBCC82"
|
||||
offset="0.6083" /><stop
|
||||
id="stop404"
|
||||
style="stop-color:#9EB861"
|
||||
offset="0.6527" /><stop
|
||||
id="stop406"
|
||||
style="stop-color:#7EA441"
|
||||
offset="0.698" /><stop
|
||||
id="stop408"
|
||||
style="stop-color:#417F43"
|
||||
offset="1" /></linearGradient><polygon
|
||||
id="polygon410"
|
||||
points="73.248,39.76 113.366,74.435 78.638,114.614 38.521,79.939 "
|
||||
clip-path="url(#SVGID_11_)"
|
||||
style="fill:url(#SVGID_12_)" /></g><g
|
||||
id="g659"><defs
|
||||
id="defs661"><path
|
||||
d="m 59.314,68.055 6.466,0 c 0.679,0 1.234,-0.57 1.234,-1.25 l 0,-6.466 c 0,-0.687 -0.555,-1.25 -1.234,-1.25 l -6.466,0 c -0.687,0 -1.25,0.563 -1.25,1.25 l 0,6.466 c 0,0.68 0.563,1.25 1.25,1.25 m -0.372,-7.716 c 0,-0.198 0.174,-0.372 0.372,-0.372 l 6.466,0 c 0.199,0 0.365,0.174 0.365,0.372 l 0,6.466 c 0,0.199 -0.166,0.381 -0.365,0.381 l -6.466,0 c -0.198,0 -0.372,-0.182 -0.372,-0.381 l 0,-6.466 z"
|
||||
id="SVGID_34_"
|
||||
inkscape:connector-curvature="0" /></defs><clipPath
|
||||
id="SVGID_35_"><use
|
||||
id="use665"
|
||||
overflow="visible"
|
||||
xlink:href="#SVGID_34_"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><linearGradient
|
||||
gradientTransform="matrix(37.3745,0,0,-37.3743,9913.0078,13394.728)"
|
||||
y2="356.6929"
|
||||
x2="-262.7066"
|
||||
y1="356.6929"
|
||||
x1="-263.70459"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_36_"><stop
|
||||
id="stop668"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0" /><stop
|
||||
id="stop670"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0.0052" /><stop
|
||||
id="stop672"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop674"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop676"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop678"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop680"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop682"
|
||||
style="stop-color:#75A93B"
|
||||
offset="0.713" /><stop
|
||||
id="stop684"
|
||||
style="stop-color:#699F3E"
|
||||
offset="0.785" /><stop
|
||||
id="stop686"
|
||||
style="stop-color:#559241"
|
||||
offset="0.8612" /><stop
|
||||
id="stop688"
|
||||
style="stop-color:#348144"
|
||||
offset="0.9398" /><stop
|
||||
id="stop690"
|
||||
style="stop-color:#007345"
|
||||
offset="1" /></linearGradient><rect
|
||||
id="rect692"
|
||||
height="8.9639997"
|
||||
width="8.9300003"
|
||||
clip-path="url(#SVGID_35_)"
|
||||
y="59.089001"
|
||||
x="58.084"
|
||||
style="fill:url(#SVGID_36_)" /><linearGradient
|
||||
gradientTransform="matrix(38.531,32.4011,32.4011,-38.531,-1333.1589,22496.984)"
|
||||
y2="358.89499"
|
||||
x2="-264.7178"
|
||||
y1="358.89499"
|
||||
x1="-265.71579"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_37_"><stop
|
||||
id="stop695"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0" /><stop
|
||||
id="stop697"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0.0052" /><stop
|
||||
id="stop699"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop701"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop703"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop705"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop707"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop709"
|
||||
style="stop-color:#75A93B"
|
||||
offset="0.713" /><stop
|
||||
id="stop711"
|
||||
style="stop-color:#699F3E"
|
||||
offset="0.785" /><stop
|
||||
id="stop713"
|
||||
style="stop-color:#559241"
|
||||
offset="0.8612" /><stop
|
||||
id="stop715"
|
||||
style="stop-color:#348144"
|
||||
offset="0.9398" /><stop
|
||||
id="stop717"
|
||||
style="stop-color:#007345"
|
||||
offset="1" /></linearGradient><polygon
|
||||
id="polygon719"
|
||||
points="71.431,62.803 63.307,72.464 53.648,64.341 61.772,54.681 "
|
||||
clip-path="url(#SVGID_35_)"
|
||||
style="fill:url(#SVGID_37_)" /></g><g
|
||||
id="g721"><defs
|
||||
id="defs723"><path
|
||||
d="m 88.729,59.065 -13.304,0 c -0.679,0 -1.242,0.547 -1.242,1.233 l 0,6.689 c 0,0.695 0.563,0.894 1.242,0.894 l 8.246,0 c 1.233,0.033 2.243,1.077 2.243,2.335 l 0,14.977 c 0,1.3 -1.051,2.343 -2.334,2.343 l -14.106,0 c -1.276,0 -2.319,-1.026 -2.335,-2.293 l 0,-8.593 c 0,-0.663 -0.563,-1.242 -1.242,-1.242 l -6.449,0 c -0.688,0 -1.234,0.579 -1.234,1.242 l 0,13.71 c 0,2.723 2.236,4.959 4.959,4.959 l 25.557,0 c 2.724,0 4.959,-2.236 4.959,-4.959 l 0,-26.335 c -10e-4,-2.741 -2.235,-4.96 -4.96,-4.96 m 4.083,31.295 c 0,2.268 -1.83,4.089 -4.082,4.089 l -25.558,0 c -2.251,0 -4.089,-1.821 -4.089,-4.089 l 0,-13.71 c 0,-0.191 0.165,-0.356 0.364,-0.356 l 6.449,0 c 0.19,0 0.365,0.165 0.365,0.356 l 0,8.593 c 0.033,1.755 1.473,3.171 3.212,3.171 l 14.107,0 c 1.78,0 3.212,-1.441 3.212,-3.221 l 0,-14.977 c 0,-1.747 -1.358,-3.153 -3.097,-3.212 l -8.27,0 -0.43,-0.058 0.057,-6.648 c 0,-0.207 0.166,-0.364 0.373,-0.364 l 13.304,0 c 2.252,0 4.082,1.821 4.082,4.091 l 0,26.335 z"
|
||||
id="SVGID_38_"
|
||||
inkscape:connector-curvature="0" /></defs><clipPath
|
||||
id="SVGID_39_"><use
|
||||
id="use727"
|
||||
overflow="visible"
|
||||
xlink:href="#SVGID_38_"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><linearGradient
|
||||
gradientTransform="matrix(37.3733,0,0,-37.3733,9912.6934,13407.99)"
|
||||
y2="356.69379"
|
||||
x2="-262.7041"
|
||||
y1="356.69379"
|
||||
x1="-263.70459"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_40_"><stop
|
||||
id="stop730"
|
||||
style="stop-color:#84B93A"
|
||||
offset="0" /><stop
|
||||
id="stop732"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop734"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop736"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop738"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop740"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop742"
|
||||
style="stop-color:#76A93C"
|
||||
offset="0.7301" /><stop
|
||||
id="stop744"
|
||||
style="stop-color:#6BA140"
|
||||
offset="0.8215" /><stop
|
||||
id="stop746"
|
||||
style="stop-color:#579445"
|
||||
offset="0.9178" /><stop
|
||||
id="stop748"
|
||||
style="stop-color:#3E8749"
|
||||
offset="1" /></linearGradient><rect
|
||||
id="rect750"
|
||||
height="36.248001"
|
||||
width="35.458"
|
||||
clip-path="url(#SVGID_39_)"
|
||||
y="59.064999"
|
||||
x="58.213001"
|
||||
style="fill:url(#SVGID_40_)" /></g><g
|
||||
id="g1295"><defs
|
||||
id="defs1297"><path
|
||||
d="m 88.729,59.934 -13.304,0 c -0.207,0 -0.373,0.157 -0.373,0.364 l -0.057,6.648 0.43,0.058 8.27,0 c 1.739,0.059 3.097,1.465 3.097,3.212 l 0,14.977 c 0,1.779 -1.432,3.221 -3.212,3.221 l -14.106,0 c -1.739,0 -3.179,-1.416 -3.212,-3.171 l 0,-8.593 c 0,-0.191 -0.175,-0.356 -0.365,-0.356 l -6.449,0 c -0.199,0 -0.364,0.165 -0.364,0.356 l 0,13.71 c 0,2.268 1.838,4.089 4.089,4.089 l 25.557,0 c 2.252,0 4.082,-1.821 4.082,-4.089 l 0,-26.335 c 0,-2.27 -1.831,-4.091 -4.083,-4.091"
|
||||
id="SVGID_80_"
|
||||
inkscape:connector-curvature="0" /></defs><clipPath
|
||||
id="SVGID_81_"><use
|
||||
id="use1301"
|
||||
overflow="visible"
|
||||
xlink:href="#SVGID_80_"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><linearGradient
|
||||
gradientTransform="matrix(37.3771,0,0,-37.3771,9913.7051,13409.342)"
|
||||
y2="356.69379"
|
||||
x2="-262.70511"
|
||||
y1="356.69379"
|
||||
x1="-263.70511"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_82_"><stop
|
||||
id="stop1304"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0" /><stop
|
||||
id="stop1306"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0.0052" /><stop
|
||||
id="stop1308"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop1310"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop1312"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop1314"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop1316"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop1318"
|
||||
style="stop-color:#75A93B"
|
||||
offset="0.713" /><stop
|
||||
id="stop1320"
|
||||
style="stop-color:#699F3E"
|
||||
offset="0.785" /><stop
|
||||
id="stop1322"
|
||||
style="stop-color:#559241"
|
||||
offset="0.8612" /><stop
|
||||
id="stop1324"
|
||||
style="stop-color:#348144"
|
||||
offset="0.9398" /><stop
|
||||
id="stop1326"
|
||||
style="stop-color:#007345"
|
||||
offset="1" /></linearGradient><rect
|
||||
id="rect1328"
|
||||
height="34.514999"
|
||||
width="33.714001"
|
||||
clip-path="url(#SVGID_81_)"
|
||||
y="59.933998"
|
||||
x="59.094002"
|
||||
style="fill:url(#SVGID_82_)" /><linearGradient
|
||||
gradientTransform="matrix(38.531,32.4011,32.4011,-38.531,-1334.2839,22498.367)"
|
||||
y2="358.8931"
|
||||
x2="-264.71631"
|
||||
y1="358.8931"
|
||||
x1="-265.71631"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_83_"><stop
|
||||
id="stop1331"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0" /><stop
|
||||
id="stop1333"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0.0052" /><stop
|
||||
id="stop1335"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop1337"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop1339"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop1341"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop1343"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop1345"
|
||||
style="stop-color:#75A93B"
|
||||
offset="0.713" /><stop
|
||||
id="stop1347"
|
||||
style="stop-color:#699F3E"
|
||||
offset="0.785" /><stop
|
||||
id="stop1349"
|
||||
style="stop-color:#559241"
|
||||
offset="0.8612" /><stop
|
||||
id="stop1351"
|
||||
style="stop-color:#348144"
|
||||
offset="0.9398" /><stop
|
||||
id="stop1353"
|
||||
style="stop-color:#007345"
|
||||
offset="1" /></linearGradient><polygon
|
||||
id="polygon1355"
|
||||
points="109.813,74.231 78.841,111.063 42.083,80.152 73.054,43.32 "
|
||||
clip-path="url(#SVGID_81_)"
|
||||
style="fill:url(#SVGID_83_)" /></g><g
|
||||
id="g1357"><defs
|
||||
id="defs1359"><path
|
||||
d="m 59.314,67.186 6.466,0 c 0.199,0 0.365,-0.182 0.365,-0.381 l 0,-6.466 c 0,-0.198 -0.166,-0.372 -0.365,-0.372 l -6.466,0 c -0.198,0 -0.372,0.174 -0.372,0.372 l 0,6.466 c 0,0.199 0.175,0.381 0.372,0.381"
|
||||
id="SVGID_84_"
|
||||
inkscape:connector-curvature="0" /></defs><clipPath
|
||||
id="SVGID_85_"><use
|
||||
id="use1363"
|
||||
overflow="visible"
|
||||
xlink:href="#SVGID_84_"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><linearGradient
|
||||
gradientTransform="matrix(37.366,0,0,-37.366,9910.7266,13391.768)"
|
||||
y2="356.6929"
|
||||
x2="-262.70361"
|
||||
y1="356.6929"
|
||||
x1="-263.70361"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_86_"><stop
|
||||
id="stop1366"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0" /><stop
|
||||
id="stop1368"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0.0052" /><stop
|
||||
id="stop1370"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop1372"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop1374"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop1376"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop1378"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop1380"
|
||||
style="stop-color:#75A93B"
|
||||
offset="0.713" /><stop
|
||||
id="stop1382"
|
||||
style="stop-color:#699F3E"
|
||||
offset="0.785" /><stop
|
||||
id="stop1384"
|
||||
style="stop-color:#559241"
|
||||
offset="0.8612" /><stop
|
||||
id="stop1386"
|
||||
style="stop-color:#348144"
|
||||
offset="0.9398" /><stop
|
||||
id="stop1388"
|
||||
style="stop-color:#007345"
|
||||
offset="1" /></linearGradient><rect
|
||||
id="rect1390"
|
||||
height="7.2189999"
|
||||
width="7.1739998"
|
||||
clip-path="url(#SVGID_85_)"
|
||||
y="59.966999"
|
||||
x="58.943001"
|
||||
style="fill:url(#SVGID_86_)" /><linearGradient
|
||||
gradientTransform="matrix(38.5116,32.3848,32.3848,-38.5116,-1332.5708,22485.697)"
|
||||
y2="358.89499"
|
||||
x2="-264.71481"
|
||||
y1="358.89499"
|
||||
x1="-265.71481"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="SVGID_87_"><stop
|
||||
id="stop1393"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0" /><stop
|
||||
id="stop1395"
|
||||
style="stop-color:#0DB14B"
|
||||
offset="0.0052" /><stop
|
||||
id="stop1397"
|
||||
style="stop-color:#B4D670"
|
||||
offset="0.3784" /><stop
|
||||
id="stop1399"
|
||||
style="stop-color:#AED16B"
|
||||
offset="0.4463" /><stop
|
||||
id="stop1401"
|
||||
style="stop-color:#A1C85E"
|
||||
offset="0.5181" /><stop
|
||||
id="stop1403"
|
||||
style="stop-color:#8DBA4B"
|
||||
offset="0.5915" /><stop
|
||||
id="stop1405"
|
||||
style="stop-color:#79AD3B"
|
||||
offset="0.6495" /><stop
|
||||
id="stop1407"
|
||||
style="stop-color:#75A93B"
|
||||
offset="0.713" /><stop
|
||||
id="stop1409"
|
||||
style="stop-color:#699F3E"
|
||||
offset="0.785" /><stop
|
||||
id="stop1411"
|
||||
style="stop-color:#559241"
|
||||
offset="0.8612" /><stop
|
||||
id="stop1413"
|
||||
style="stop-color:#348144"
|
||||
offset="0.9398" /><stop
|
||||
id="stop1415"
|
||||
style="stop-color:#007345"
|
||||
offset="1" /></linearGradient><polygon
|
||||
id="polygon1417"
|
||||
points="69.702,62.958 63.162,70.735 55.387,64.196 61.926,56.419 "
|
||||
clip-path="url(#SVGID_85_)"
|
||||
style="fill:url(#SVGID_87_)" /></g></g><g
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="text4795"
|
||||
transform="matrix(1.3875123,0,0,1.3875123,-1.9375615,-1.9375579)"><path
|
||||
d="m 8.9453125,19.702984 0,10.957031 4.9609375,0 q 2.753906,0 4.257812,-1.425781 1.503907,-1.425781 1.503907,-4.0625 0,-2.617188 -1.503907,-4.042969 -1.503906,-1.425781 -4.257812,-1.425781 l -4.9609375,0 z M 5,16.460796 l 8.90625,0 q 4.902344,0 7.402344,2.226563 2.519531,2.207031 2.519531,6.484375 0,4.316406 -2.519531,6.523437 -2.5,2.207032 -7.402344,2.207032 l -4.9609375,0 0,11.71875 -3.9453125,0 0,-29.160157 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif"
|
||||
id="path3621"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 47.167969,32.417828 0,13.203125 -3.59375,0 0,-13.085938 q 0,-3.105469 -1.210938,-4.648437 -1.210937,-1.542969 -3.632812,-1.542969 -2.910157,0 -4.589844,1.855469 -1.679688,1.855468 -1.679688,5.058593 l 0,12.363282 -3.613281,0 0,-30.390625 3.613281,0 0,11.914062 q 1.289063,-1.972656 3.027344,-2.949219 1.757813,-0.976562 4.042969,-0.976562 3.769531,0 5.703125,2.34375 1.933594,2.324219 1.933594,6.855469 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif"
|
||||
id="path3623"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 57.851562,42.339703 0,11.601562 -3.613281,0 0,-30.195312 3.613281,0 0,3.320312 q 1.132813,-1.953125 2.851563,-2.890625 1.738281,-0.957031 4.140625,-0.957031 3.984375,0 6.464844,3.164062 2.5,3.164063 2.5,8.320313 0,5.15625 -2.5,8.320312 -2.480469,3.164063 -6.464844,3.164063 -2.402344,0 -4.140625,-0.9375 -1.71875,-0.957031 -2.851563,-2.910156 z m 12.226563,-7.636719 q 0,-3.964844 -1.640625,-6.210938 -1.621094,-2.265625 -4.472656,-2.265625 -2.851563,0 -4.492188,2.265625 -1.621094,2.246094 -1.621094,6.210938 0,3.964844 1.621094,6.230469 1.640625,2.246093 4.492188,2.246093 2.851562,0 4.472656,-2.246093 1.640625,-2.265625 1.640625,-6.230469 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif"
|
||||
id="path3625"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 99.960937,17.378765 0,6.171875 q -2.402343,-1.074219 -4.6875,-1.621094 -2.285156,-0.546875 -4.316406,-0.546875 -2.695312,0 -3.984375,0.742188 -1.289062,0.742187 -1.289062,2.304687 0,1.171875 0.859375,1.835938 0.878906,0.644531 3.164062,1.113281 l 3.203125,0.644531 q 4.863281,0.976563 6.914063,2.96875 2.050781,1.992188 2.050781,5.664063 0,4.824219 -2.871094,7.1875 -2.851562,2.34375 -8.730469,2.34375 -2.773437,0 -5.566406,-0.527344 -2.792969,-0.527344 -5.585937,-1.5625 l 0,-6.347656 q 2.792968,1.484375 5.390625,2.246094 2.617187,0.742187 5.039062,0.742187 2.460938,0 3.769531,-0.820312 1.308594,-0.820313 1.308594,-2.34375 0,-1.367188 -0.898437,-2.109375 -0.878907,-0.742188 -3.535157,-1.328125 l -2.910156,-0.644532 q -4.375,-0.9375 -6.40625,-2.988281 -2.011719,-2.050781 -2.011719,-5.527344 0,-4.355468 2.8125,-6.699218 2.8125,-2.34375 8.085938,-2.34375 2.402344,0 4.941406,0.371093 2.539063,0.351563 5.253906,1.074219 z"
|
||||
style="font-weight:bold"
|
||||
id="path3627"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 115.17578,42.45689 0,11.484375 -6.99219,0 0,-30.195312 6.99219,0 0,3.203125 q 1.44531,-1.914063 3.20313,-2.8125 1.75781,-0.917969 4.04297,-0.917969 4.04296,0 6.64062,3.222656 2.59766,3.203125 2.59766,8.261719 0,5.058594 -2.59766,8.28125 -2.59766,3.203125 -6.64062,3.203125 -2.28516,0 -4.04297,-0.898438 -1.75782,-0.917968 -3.20313,-2.832031 z m 4.64844,-14.160156 q -2.24609,0 -3.45703,1.660156 -1.19141,1.640625 -1.19141,4.746094 0,3.105469 1.19141,4.765625 1.21094,1.640625 3.45703,1.640625 2.24609,0 3.41797,-1.640625 1.1914,-1.640625 1.1914,-4.765625 0,-3.125 -1.1914,-4.765625 -1.17188,-1.640625 -3.41797,-1.640625 z"
|
||||
style="font-weight:bold"
|
||||
id="path3629"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 153.10547,29.702984 q -0.91797,-0.429688 -1.83594,-0.625 -0.89844,-0.214844 -1.81641,-0.214844 -2.69531,0 -4.16015,1.738281 -1.44531,1.71875 -1.44531,4.941407 l 0,10.078125 -6.99219,0 0,-21.875 6.99219,0 0,3.59375 q 1.34765,-2.148438 3.08593,-3.125 1.75782,-0.996094 4.19922,-0.996094 0.35156,0 0.76172,0.03906 0.41016,0.01953 1.19141,0.117188 l 0.0195,6.328125 z"
|
||||
style="font-weight:bold"
|
||||
id="path3631"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 178.45703,34.624859 0,1.992187 -16.34766,0 q 0.25391,2.460938 1.77735,3.691407 1.52344,1.230468 4.25781,1.230468 2.20703,0 4.51172,-0.644531 2.32422,-0.664062 4.76562,-1.992187 l 0,5.390625 q -2.48046,0.9375 -4.96093,1.40625 -2.48047,0.488281 -4.96094,0.488281 -5.9375,0 -9.23828,-3.007813 -3.28125,-3.027343 -3.28125,-8.476562 0,-5.351563 3.22265,-8.417969 3.24219,-3.066406 8.90625,-3.066406 5.15625,0 8.24219,3.105469 3.10547,3.105468 3.10547,8.300781 z m -7.1875,-2.324219 q 0,-1.992187 -1.17187,-3.203125 -1.15235,-1.230469 -3.02735,-1.230469 -2.03125,0 -3.30078,1.152344 -1.26953,1.132813 -1.58203,3.28125 l 9.08203,0 z"
|
||||
style="font-weight:bold"
|
||||
id="path3633"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 193.53516,35.777203 q -2.1875,0 -3.30079,0.742187 -1.09375,0.742188 -1.09375,2.1875 0,1.328125 0.87891,2.089844 0.89844,0.742187 2.48047,0.742187 1.97266,0 3.32031,-1.40625 1.34766,-1.425781 1.34766,-3.554687 l 0,-0.800781 -3.63281,0 z m 10.68359,-2.636719 0,12.480469 -7.05078,0 0,-3.242188 q -1.40625,1.992188 -3.16406,2.910156 -1.75782,0.898438 -4.27735,0.898438 -3.39844,0 -5.52734,-1.972656 -2.10938,-1.992188 -2.10938,-5.15625 0,-3.847657 2.63672,-5.644532 2.65625,-1.796875 8.32031,-1.796875 l 4.1211,0 0,-0.546875 q 0,-1.660156 -1.3086,-2.421875 -1.30859,-0.78125 -4.08203,-0.78125 -2.24609,0 -4.17968,0.449219 -1.9336,0.449219 -3.59375,1.347656 l 0,-5.332031 q 2.24609,-0.546875 4.51171,-0.820312 2.26563,-0.292969 4.53125,-0.292969 5.91797,0 8.53516,2.34375 2.63672,2.324219 2.63672,7.578125 z"
|
||||
style="font-weight:bold"
|
||||
id="path3635"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 225.64453,26.949078 0,-11.71875 7.03125,0 0,30.390625 -7.03125,0 0,-3.164063 q -1.44531,1.933594 -3.18359,2.832031 -1.73828,0.898438 -4.02344,0.898438 -4.04297,0 -6.64063,-3.203125 -2.59765,-3.222656 -2.59765,-8.28125 0,-5.058594 2.59765,-8.261719 2.59766,-3.222656 6.64063,-3.222656 2.26562,0 4.00391,0.917969 1.75781,0.898437 3.20312,2.8125 z m -4.60937,14.160156 q 2.24609,0 3.41796,-1.640625 1.19141,-1.640625 1.19141,-4.765625 0,-3.125 -1.19141,-4.765625 -1.17187,-1.640625 -3.41796,-1.640625 -2.22657,0 -3.41797,1.640625 -1.17188,1.640625 -1.17188,4.765625 0,3.125 1.17188,4.765625 1.1914,1.640625 3.41797,1.640625 z"
|
||||
style="font-weight:bold"
|
||||
id="path3637"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 256.52344,24.429546 0,5.3125 q -2.2461,-0.9375 -4.33594,-1.40625 -2.08984,-0.46875 -3.94531,-0.46875 -1.99219,0 -2.96875,0.507813 -0.95703,0.488281 -0.95703,1.523437 0,0.839844 0.72265,1.289063 0.74219,0.449219 2.63672,0.664062 l 1.23047,0.175782 q 5.37109,0.683593 7.22656,2.246093 1.85547,1.5625 1.85547,4.902344 0,3.496094 -2.57812,5.253906 -2.57813,1.757813 -7.69532,1.757813 -2.16797,0 -4.49218,-0.351563 -2.30469,-0.332031 -4.7461,-1.015625 l 0,-5.3125 q 2.08985,1.015625 4.27735,1.523438 2.20703,0.507812 4.47265,0.507812 2.05078,0 3.08594,-0.566406 1.03516,-0.566406 1.03516,-1.679687 0,-0.9375 -0.72266,-1.386719 -0.70313,-0.46875 -2.83203,-0.722656 l -1.23047,-0.15625 q -4.66797,-0.585938 -6.54297,-2.167969 -1.875,-1.582031 -1.875,-4.804688 0,-3.476562 2.38281,-5.15625 2.38282,-1.679687 7.30469,-1.679687 1.93359,0 4.0625,0.292969 2.12891,0.292968 4.62891,0.917968 z"
|
||||
style="font-weight:bold"
|
||||
id="path3639"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 285.25391,32.30064 0,13.320313 -7.03125,0 0,-2.167969 0,-7.988281 q 0,-2.871094 -0.13672,-3.945313 -0.11719,-1.074219 -0.42969,-1.582031 -0.41016,-0.683594 -1.11328,-1.054688 -0.70313,-0.390625 -1.60156,-0.390625 -2.1875,0 -3.4375,1.699219 -1.25,1.679688 -1.25,4.667969 l 0,10.761719 -6.99219,0 0,-30.390625 6.99219,0 0,11.71875 q 1.58203,-1.914063 3.35937,-2.8125 1.77734,-0.917969 3.92578,-0.917969 3.78906,0 5.74219,2.324219 1.97266,2.324218 1.97266,6.757812 z"
|
||||
style="font-weight:bold"
|
||||
id="path3641"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 313.61328,34.624859 0,1.992187 -16.34766,0 q 0.25391,2.460938 1.77735,3.691407 1.52344,1.230468 4.25781,1.230468 2.20703,0 4.51172,-0.644531 2.32422,-0.664062 4.76562,-1.992187 l 0,5.390625 q -2.48046,0.9375 -4.96093,1.40625 -2.48047,0.488281 -4.96094,0.488281 -5.9375,0 -9.23828,-3.007813 -3.28125,-3.027343 -3.28125,-8.476562 0,-5.351563 3.22265,-8.417969 3.24219,-3.066406 8.90625,-3.066406 5.15625,0 8.24219,3.105469 3.10547,3.105468 3.10547,8.300781 z m -7.1875,-2.324219 q 0,-1.992187 -1.17187,-3.203125 -1.15235,-1.230469 -3.02735,-1.230469 -2.03125,0 -3.30078,1.152344 -1.26953,1.132813 -1.58203,3.28125 l 9.08203,0 z"
|
||||
style="font-weight:bold"
|
||||
id="path3643"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 340.72266,34.624859 0,1.992187 -16.34766,0 q 0.25391,2.460938 1.77734,3.691407 1.52344,1.230468 4.25782,1.230468 2.20703,0 4.51171,-0.644531 2.32422,-0.664062 4.76563,-1.992187 l 0,5.390625 q -2.48047,0.9375 -4.96094,1.40625 -2.48047,0.488281 -4.96094,0.488281 -5.9375,0 -9.23828,-3.007813 -3.28125,-3.027343 -3.28125,-8.476562 0,-5.351563 3.22266,-8.417969 3.24219,-3.066406 8.90625,-3.066406 5.15625,0 8.24219,3.105469 3.10547,3.105468 3.10547,8.300781 z m -7.1875,-2.324219 q 0,-1.992187 -1.17188,-3.203125 -1.15234,-1.230469 -3.02734,-1.230469 -2.03125,0 -3.30078,1.152344 -1.26954,1.132813 -1.58204,3.28125 l 9.08204,0 z"
|
||||
style="font-weight:bold"
|
||||
id="path3645"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 353.63281,17.535015 0,6.210938 7.20703,0 0,5 -7.20703,0 0,9.277343 q 0,1.523438 0.60547,2.070313 0.60547,0.527344 2.40234,0.527344 l 3.59375,0 0,5 -5.99609,0 q -4.14062,0 -5.87891,-1.71875 -1.71875,-1.738282 -1.71875,-5.878907 l 0,-9.277343 -3.47656,0 0,-5 3.47656,0 0,-6.210938 6.99219,0 z"
|
||||
style="font-weight:bold"
|
||||
id="path3647"
|
||||
inkscape:connector-curvature="0" /></g></svg>
|
||||
|
After Width: | Height: | Size: 130 KiB |
8
vendor/phpoffice/phpspreadsheet/docs/extra/extra.css
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/* Make the huge table always visible */
|
||||
table.features-cross-reference {
|
||||
overflow: visible !important;
|
||||
}
|
||||
.rst-content table.features-cross-reference.docutils th,
|
||||
.rst-content table.features-cross-reference.docutils td {
|
||||
background-color: white;
|
||||
}
|
||||
57
vendor/phpoffice/phpspreadsheet/docs/faq.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
# Frequently asked questions
|
||||
|
||||
## There seems to be a problem with character encoding...
|
||||
|
||||
It is necessary to use UTF-8 encoding for all texts in PhpSpreadsheet.
|
||||
If the script uses different encoding then you can convert those texts
|
||||
with PHP's `iconv()` or `mb_convert_encoding()` functions.
|
||||
|
||||
## Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate yyy bytes) in zzz on line aaa
|
||||
|
||||
PhpSpreadsheet holds an "in memory" representation of a spreadsheet, so
|
||||
it is susceptible to PHP's memory limitations. The memory made available
|
||||
to PHP can be increased by editing the value of the `memory_limit`
|
||||
directive in your `php.ini` file, or by using
|
||||
`ini_set('memory_limit', '128M')` within your code.
|
||||
|
||||
Some Readers and Writers are faster than others, and they also use
|
||||
differing amounts of memory.
|
||||
|
||||
## Protection on my worksheet is not working?
|
||||
|
||||
When you make use of any of the worksheet protection features (e.g. cell
|
||||
range protection, prohibiting deleting rows, ...), make sure you enable
|
||||
worksheet security. This can for example be done like this:
|
||||
|
||||
``` php
|
||||
$spreadsheet->getActiveSheet()->getProtection()->setSheet(true);
|
||||
```
|
||||
|
||||
## Feature X is not working with Reader\_Y / Writer\_Z
|
||||
|
||||
Not all features of PhpSpreadsheet are implemented in all of the Reader
|
||||
/ Writer classes. This is mostly due to underlying libraries not
|
||||
supporting a specific feature or not having implemented a specific
|
||||
feature.
|
||||
|
||||
For example autofilter is not implemented in PEAR
|
||||
Spreadsheet\_Excel\_writer, which is the base of our Xls writer.
|
||||
|
||||
We are slowly building up a list of features, together with the
|
||||
different readers and writers that support them, in the [features cross
|
||||
reference](./references/features-cross-reference.md).
|
||||
|
||||
## Formulas don't seem to be calculated in Excel2003 using compatibility pack?
|
||||
|
||||
This is normal behaviour of the compatibility pack, `Xlsx` displays this
|
||||
correctly. Use `\PhpOffice\PhpSpreadsheet\Writer\Xls` if you really need
|
||||
calculated values, or force recalculation in Excel2003.
|
||||
|
||||
## Setting column width is not 100% accurate
|
||||
|
||||
Trying to set column width, I experience one problem. When I open the
|
||||
file in Excel, the actual width is 0.71 less than it should be.
|
||||
|
||||
The short answer is that PhpSpreadsheet uses a measure where padding is
|
||||
included. See [how to set a column's width](./topics/recipes.md#setting-a-columns-width)
|
||||
for more details.
|
||||
98
vendor/phpoffice/phpspreadsheet/docs/index.md
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
# Welcome to PhpSpreadsheet's documentation
|
||||
|
||||

|
||||
|
||||
PhpSpreadsheet is a library written in pure PHP and providing a set of
|
||||
classes that allow you to read from and to write to different
|
||||
spreadsheet file formats, like Excel and LibreOffice Calc.
|
||||
|
||||
## File formats supported
|
||||
|
||||
|Format |Reading|Writing|
|
||||
|--------------------------------------------|:-----:|:-----:|
|
||||
|Open Document Format/OASIS (.ods) | ✓ | ✓ |
|
||||
|Office Open XML (.xlsx) Excel 2007 and above| ✓ | ✓ |
|
||||
|BIFF 8 (.xls) Excel 97 and above | ✓ | ✓ |
|
||||
|BIFF 5 (.xls) Excel 95 | ✓ | |
|
||||
|SpreadsheetML (.xml) Excel 2003 | ✓ | |
|
||||
|Gnumeric | ✓ | |
|
||||
|HTML | ✓ | ✓ |
|
||||
|SYLK | ✓ | |
|
||||
|CSV | ✓ | ✓ |
|
||||
|PDF (using either the TCPDF, Dompdf or mPDF libraries, which need to be installed separately)| | ✓ |
|
||||
|
||||
# Getting started
|
||||
|
||||
## Software requirements
|
||||
|
||||
PHP version 7.1 or newer to develop using PhpSpreadsheet. Other requirements, such as PHP extensions, are enforced by
|
||||
composer. See the `require` section of [the composer.json file](https://github.com/PHPOffice/PhpSpreadsheet/blob/master/composer.json)
|
||||
for details.
|
||||
|
||||
### PHP version support
|
||||
|
||||
Support for PHP versions will only be maintained for a period of six months beyond the end-of-life of that PHP version
|
||||
|
||||
## Installation
|
||||
|
||||
Use [composer](https://getcomposer.org) to install PhpSpreadsheet into your project:
|
||||
|
||||
```sh
|
||||
composer require phpoffice/phpspreadsheet
|
||||
```
|
||||
|
||||
## Hello World
|
||||
|
||||
This would be the simplest way to write a spreadsheet:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
require 'vendor/autoload.php';
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$sheet->setCellValue('A1', 'Hello World !');
|
||||
|
||||
$writer = new Xlsx($spreadsheet);
|
||||
$writer->save('hello world.xlsx');
|
||||
```
|
||||
|
||||
## Learn by example
|
||||
|
||||
A good way to get started is to run some of the samples. Serve the samples via
|
||||
PHP built-in webserver:
|
||||
|
||||
```sh
|
||||
php -S localhost:8000 -t vendor/phpoffice/phpspreadsheet/samples
|
||||
```
|
||||
|
||||
Then point your browser to:
|
||||
|
||||
> http://localhost:8000/
|
||||
|
||||
The samples may also be run directly from the command line, for example:
|
||||
|
||||
```sh
|
||||
php vendor/phpoffice/phpspreadsheet/samples/Basic/01_Simple.php
|
||||
```
|
||||
|
||||
## Learn by documentation
|
||||
|
||||
For more in-depth documentation, you may read about an [overview of the
|
||||
architecture](./topics/architecture.md),
|
||||
[creating a spreadsheet](./topics/creating-spreadsheet.md),
|
||||
[worksheets](./topics/worksheets.md),
|
||||
[accessing cells](./topics/accessing-cells.md) and
|
||||
[reading and writing to files](./topics/reading-and-writing-to-file.md).
|
||||
|
||||
Or browse the [API documentation](https://phpoffice.github.io/PhpSpreadsheet).
|
||||
|
||||
# Credits
|
||||
|
||||
Please refer to the [contributor
|
||||
list](https://github.com/PHPOffice/PhpSpreadsheet/graphs/contributors)
|
||||
for up-to-date credits.
|
||||
1591
vendor/phpoffice/phpspreadsheet/docs/references/features-cross-reference.md
vendored
Normal file
458
vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-category.md
vendored
Normal file
@@ -0,0 +1,458 @@
|
||||
# Function list by category
|
||||
|
||||
## CATEGORY_CUBE
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
CUBEKPIMEMBER | **Not yet Implemented**
|
||||
CUBEMEMBER | **Not yet Implemented**
|
||||
CUBEMEMBERPROPERTY | **Not yet Implemented**
|
||||
CUBERANKEDMEMBER | **Not yet Implemented**
|
||||
CUBESET | **Not yet Implemented**
|
||||
CUBESETCOUNT | **Not yet Implemented**
|
||||
CUBEVALUE | **Not yet Implemented**
|
||||
|
||||
## CATEGORY_DATABASE
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
DAVERAGE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DAVERAGE
|
||||
DCOUNT | \PhpOffice\PhpSpreadsheet\Calculation\Database::DCOUNT
|
||||
DCOUNTA | \PhpOffice\PhpSpreadsheet\Calculation\Database::DCOUNTA
|
||||
DGET | \PhpOffice\PhpSpreadsheet\Calculation\Database::DGET
|
||||
DMAX | \PhpOffice\PhpSpreadsheet\Calculation\Database::DMAX
|
||||
DMIN | \PhpOffice\PhpSpreadsheet\Calculation\Database::DMIN
|
||||
DPRODUCT | \PhpOffice\PhpSpreadsheet\Calculation\Database::DPRODUCT
|
||||
DSTDEV | \PhpOffice\PhpSpreadsheet\Calculation\Database::DSTDEV
|
||||
DSTDEVP | \PhpOffice\PhpSpreadsheet\Calculation\Database::DSTDEVP
|
||||
DSUM | \PhpOffice\PhpSpreadsheet\Calculation\Database::DSUM
|
||||
DVAR | \PhpOffice\PhpSpreadsheet\Calculation\Database::DVAR
|
||||
DVARP | \PhpOffice\PhpSpreadsheet\Calculation\Database::DVARP
|
||||
|
||||
## CATEGORY_DATE_AND_TIME
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
DATE | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATE
|
||||
DATEDIF | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATEDIF
|
||||
DATEVALUE | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATEVALUE
|
||||
DAY | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DAYOFMONTH
|
||||
DAYS | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DAYS
|
||||
DAYS360 | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DAYS360
|
||||
EDATE | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::EDATE
|
||||
EOMONTH | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::EOMONTH
|
||||
HOUR | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::HOUROFDAY
|
||||
ISOWEEKNUM | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::ISOWEEKNUM
|
||||
MINUTE | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::MINUTE
|
||||
MONTH | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::MONTHOFYEAR
|
||||
NETWORKDAYS | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::NETWORKDAYS
|
||||
NETWORKDAYS.INTL | **Not yet Implemented**
|
||||
NOW | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATETIMENOW
|
||||
SECOND | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::SECOND
|
||||
TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::TIME
|
||||
TIMEVALUE | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::TIMEVALUE
|
||||
TODAY | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATENOW
|
||||
WEEKDAY | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::WEEKDAY
|
||||
WEEKNUM | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::WEEKNUM
|
||||
WORKDAY | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::WORKDAY
|
||||
WORKDAY.INTL | **Not yet Implemented**
|
||||
YEAR | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::YEAR
|
||||
YEARFRAC | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::YEARFRAC
|
||||
|
||||
## CATEGORY_ENGINEERING
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
BESSELI | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELI
|
||||
BESSELJ | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELJ
|
||||
BESSELK | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELK
|
||||
BESSELY | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELY
|
||||
BIN2DEC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BINTODEC
|
||||
BIN2HEX | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BINTOHEX
|
||||
BIN2OCT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BINTOOCT
|
||||
BITAND | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITAND
|
||||
BITLSHIFT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITLSHIFT
|
||||
BITOR | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITOR
|
||||
BITRSHIFT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITRSHIFT
|
||||
BITXOR | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITOR
|
||||
COMPLEX | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::COMPLEX
|
||||
CONVERT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::CONVERTUOM
|
||||
DEC2BIN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOBIN
|
||||
DEC2HEX | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOHEX
|
||||
DEC2OCT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOOCT
|
||||
DELTA | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DELTA
|
||||
ERF | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERF
|
||||
ERF.PRECISE | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFPRECISE
|
||||
ERFC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC
|
||||
ERFC.PRECISE | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC
|
||||
GESTEP | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::GESTEP
|
||||
HEX2BIN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTOBIN
|
||||
HEX2DEC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTODEC
|
||||
HEX2OCT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTOOCT
|
||||
IMABS | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMABS
|
||||
IMAGINARY | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMAGINARY
|
||||
IMARGUMENT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMARGUMENT
|
||||
IMCONJUGATE | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCONJUGATE
|
||||
IMCOS | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOS
|
||||
IMCOSH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOSH
|
||||
IMCOT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOT
|
||||
IMCSC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSC
|
||||
IMCSCH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSCH
|
||||
IMDIV | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMDIV
|
||||
IMEXP | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMEXP
|
||||
IMLN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLN
|
||||
IMLOG10 | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLOG10
|
||||
IMLOG2 | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLOG2
|
||||
IMPOWER | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPOWER
|
||||
IMPRODUCT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPRODUCT
|
||||
IMREAL | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMREAL
|
||||
IMSEC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSEC
|
||||
IMSECH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSECH
|
||||
IMSIN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSIN
|
||||
IMSINH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSINH
|
||||
IMSQRT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSQRT
|
||||
IMSUB | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUB
|
||||
IMSUM | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUM
|
||||
IMTAN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMTAN
|
||||
OCT2BIN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTOBIN
|
||||
OCT2DEC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTODEC
|
||||
OCT2HEX | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTOHEX
|
||||
|
||||
## CATEGORY_FINANCIAL
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
ACCRINT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ACCRINT
|
||||
ACCRINTM | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ACCRINTM
|
||||
AMORDEGRC | \PhpOffice\PhpSpreadsheet\Calculation\Financial::AMORDEGRC
|
||||
AMORLINC | \PhpOffice\PhpSpreadsheet\Calculation\Financial::AMORLINC
|
||||
COUPDAYBS | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPDAYBS
|
||||
COUPDAYS | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPDAYS
|
||||
COUPDAYSNC | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPDAYSNC
|
||||
COUPNCD | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPNCD
|
||||
COUPNUM | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPNUM
|
||||
COUPPCD | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPPCD
|
||||
CUMIPMT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::CUMIPMT
|
||||
CUMPRINC | \PhpOffice\PhpSpreadsheet\Calculation\Financial::CUMPRINC
|
||||
DB | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DB
|
||||
DDB | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DDB
|
||||
DISC | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DISC
|
||||
DOLLARDE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DOLLARDE
|
||||
DOLLARFR | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DOLLARFR
|
||||
DURATION | **Not yet Implemented**
|
||||
EFFECT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::EFFECT
|
||||
FV | \PhpOffice\PhpSpreadsheet\Calculation\Financial::FV
|
||||
FVSCHEDULE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::FVSCHEDULE
|
||||
INTRATE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::INTRATE
|
||||
IPMT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::IPMT
|
||||
IRR | \PhpOffice\PhpSpreadsheet\Calculation\Financial::IRR
|
||||
ISPMT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ISPMT
|
||||
MDURATION | **Not yet Implemented**
|
||||
MIRR | \PhpOffice\PhpSpreadsheet\Calculation\Financial::MIRR
|
||||
NOMINAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NOMINAL
|
||||
NPER | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NPER
|
||||
NPV | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NPV
|
||||
ODDFPRICE | **Not yet Implemented**
|
||||
ODDFYIELD | **Not yet Implemented**
|
||||
ODDLPRICE | **Not yet Implemented**
|
||||
ODDLYIELD | **Not yet Implemented**
|
||||
PDURATION | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PDURATION
|
||||
PMT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PMT
|
||||
PPMT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PPMT
|
||||
PRICE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICE
|
||||
PRICEDISC | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICEDISC
|
||||
PRICEMAT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICEMAT
|
||||
PV | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PV
|
||||
RATE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RATE
|
||||
RECEIVED | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RECEIVED
|
||||
RRI | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RRI
|
||||
SLN | \PhpOffice\PhpSpreadsheet\Calculation\Financial::SLN
|
||||
SYD | \PhpOffice\PhpSpreadsheet\Calculation\Financial::SYD
|
||||
TBILLEQ | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLEQ
|
||||
TBILLPRICE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLPRICE
|
||||
TBILLYIELD | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLYIELD
|
||||
USDOLLAR | **Not yet Implemented**
|
||||
VDB | **Not yet Implemented**
|
||||
XIRR | \PhpOffice\PhpSpreadsheet\Calculation\Financial::XIRR
|
||||
XNPV | \PhpOffice\PhpSpreadsheet\Calculation\Financial::XNPV
|
||||
YIELD | **Not yet Implemented**
|
||||
YIELDDISC | \PhpOffice\PhpSpreadsheet\Calculation\Financial::YIELDDISC
|
||||
YIELDMAT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::YIELDMAT
|
||||
|
||||
## CATEGORY_INFORMATION
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
CELL | **Not yet Implemented**
|
||||
ERROR.TYPE | \PhpOffice\PhpSpreadsheet\Calculation\Functions::errorType
|
||||
INFO | **Not yet Implemented**
|
||||
ISBLANK | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isBlank
|
||||
ISERR | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isErr
|
||||
ISERROR | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isError
|
||||
ISEVEN | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isEven
|
||||
ISFORMULA | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isFormula
|
||||
ISLOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isLogical
|
||||
ISNA | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isNa
|
||||
ISNONTEXT | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isNonText
|
||||
ISNUMBER | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isNumber
|
||||
ISODD | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isOdd
|
||||
ISREF | **Not yet Implemented**
|
||||
ISTEXT | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isText
|
||||
N | \PhpOffice\PhpSpreadsheet\Calculation\Functions::n
|
||||
NA | \PhpOffice\PhpSpreadsheet\Calculation\Functions::NA
|
||||
TYPE | \PhpOffice\PhpSpreadsheet\Calculation\Functions::TYPE
|
||||
|
||||
## CATEGORY_LOGICAL
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
AND | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalAnd
|
||||
FALSE | \PhpOffice\PhpSpreadsheet\Calculation\Logical::FALSE
|
||||
IF | \PhpOffice\PhpSpreadsheet\Calculation\Logical::statementIf
|
||||
IFERROR | \PhpOffice\PhpSpreadsheet\Calculation\Logical::IFERROR
|
||||
IFNA | \PhpOffice\PhpSpreadsheet\Calculation\Logical::IFNA
|
||||
IFS | **Not yet Implemented**
|
||||
NOT | \PhpOffice\PhpSpreadsheet\Calculation\Logical::NOT
|
||||
OR | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalOr
|
||||
SWITCH | \PhpOffice\PhpSpreadsheet\Calculation\Logical::statementSwitch
|
||||
TRUE | \PhpOffice\PhpSpreadsheet\Calculation\Logical::TRUE
|
||||
XOR | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalXor
|
||||
|
||||
## CATEGORY_LOOKUP_AND_REFERENCE
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
ADDRESS | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::cellAddress
|
||||
AREAS | **Not yet Implemented**
|
||||
CHOOSE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::CHOOSE
|
||||
COLUMN | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::COLUMN
|
||||
COLUMNS | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::COLUMNS
|
||||
FORMULATEXT | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::FORMULATEXT
|
||||
GETPIVOTDATA | **Not yet Implemented**
|
||||
HLOOKUP | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HLOOKUP
|
||||
HYPERLINK | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HYPERLINK
|
||||
INDEX | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDEX
|
||||
INDIRECT | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDIRECT
|
||||
LOOKUP | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::LOOKUP
|
||||
MATCH | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::MATCH
|
||||
OFFSET | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::OFFSET
|
||||
ROW | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::ROW
|
||||
ROWS | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::ROWS
|
||||
RTD | **Not yet Implemented**
|
||||
TRANSPOSE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::TRANSPOSE
|
||||
VLOOKUP | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::VLOOKUP
|
||||
|
||||
## CATEGORY_MATH_AND_TRIG
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
ABS | abs
|
||||
ACOS | acos
|
||||
ACOSH | acosh
|
||||
ACOT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOT
|
||||
ACOTH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOTH
|
||||
ARABIC | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ARABIC
|
||||
ASIN | asin
|
||||
ASINH | asinh
|
||||
ATAN | atan
|
||||
ATAN2 | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ATAN2
|
||||
ATANH | atanh
|
||||
BASE | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::BASE
|
||||
CEILING | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CEILING
|
||||
COMBIN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COMBIN
|
||||
COS | cos
|
||||
COSH | cosh
|
||||
COT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COT
|
||||
COTH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COTH
|
||||
CSC | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSC
|
||||
CSCH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSCH
|
||||
DEGREES | rad2deg
|
||||
EVEN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::EVEN
|
||||
EXP | exp
|
||||
FACT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::FACT
|
||||
FACTDOUBLE | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::FACTDOUBLE
|
||||
FLOOR | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::FLOOR
|
||||
GCD | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::GCD
|
||||
INT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::INT
|
||||
LCM | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::LCM
|
||||
LN | log
|
||||
LOG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::logBase
|
||||
LOG10 | log10
|
||||
MDETERM | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MDETERM
|
||||
MINVERSE | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MINVERSE
|
||||
MMULT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MMULT
|
||||
MOD | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MOD
|
||||
MROUND | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MROUND
|
||||
MULTINOMIAL | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MULTINOMIAL
|
||||
ODD | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ODD
|
||||
PI | pi
|
||||
POWER | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::POWER
|
||||
PRODUCT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::PRODUCT
|
||||
QUOTIENT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::QUOTIENT
|
||||
RADIANS | deg2rad
|
||||
RAND | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::RAND
|
||||
RANDBETWEEN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::RAND
|
||||
ROMAN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROMAN
|
||||
ROUND | round
|
||||
ROUNDDOWN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROUNDDOWN
|
||||
ROUNDUP | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROUNDUP
|
||||
SEC | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SEC
|
||||
SECH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SECH
|
||||
SERIESSUM | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SERIESSUM
|
||||
SIGN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SIGN
|
||||
SIN | sin
|
||||
SINH | sinh
|
||||
SQRT | sqrt
|
||||
SQRTPI | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SQRTPI
|
||||
SUBTOTAL | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUBTOTAL
|
||||
SUM | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUM
|
||||
SUMIF | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIF
|
||||
SUMIFS | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIFS
|
||||
SUMPRODUCT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMPRODUCT
|
||||
SUMSQ | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMSQ
|
||||
SUMX2MY2 | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMX2MY2
|
||||
SUMX2PY2 | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMX2PY2
|
||||
SUMXMY2 | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMXMY2
|
||||
TAN | tan
|
||||
TANH | tanh
|
||||
TRUNC | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::TRUNC
|
||||
|
||||
## CATEGORY_STATISTICAL
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
AVEDEV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVEDEV
|
||||
AVERAGE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVERAGE
|
||||
AVERAGEA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVERAGEA
|
||||
AVERAGEIF | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVERAGEIF
|
||||
AVERAGEIFS | **Not yet Implemented**
|
||||
BETADIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::BETADIST
|
||||
BETAINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::BETAINV
|
||||
BINOMDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::BINOMDIST
|
||||
CHIDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CHIDIST
|
||||
CHIINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CHIINV
|
||||
CHITEST | **Not yet Implemented**
|
||||
CONFIDENCE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CONFIDENCE
|
||||
CORREL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CORREL
|
||||
COUNT | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNT
|
||||
COUNTA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTA
|
||||
COUNTBLANK | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTBLANK
|
||||
COUNTIF | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTIF
|
||||
COUNTIFS | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTIFS
|
||||
COVAR | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COVAR
|
||||
CRITBINOM | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CRITBINOM
|
||||
DEVSQ | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::DEVSQ
|
||||
EXPONDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::EXPONDIST
|
||||
FDIST | **Not yet Implemented**
|
||||
FINV | **Not yet Implemented**
|
||||
FISHER | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::FISHER
|
||||
FISHERINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::FISHERINV
|
||||
FORECAST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::FORECAST
|
||||
FREQUENCY | **Not yet Implemented**
|
||||
FTEST | **Not yet Implemented**
|
||||
GAMMADIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GAMMADIST
|
||||
GAMMAINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GAMMAINV
|
||||
GAMMALN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GAMMALN
|
||||
GEOMEAN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GEOMEAN
|
||||
GROWTH | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GROWTH
|
||||
HARMEAN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::HARMEAN
|
||||
HYPGEOMDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::HYPGEOMDIST
|
||||
INTERCEPT | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::INTERCEPT
|
||||
KURT | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::KURT
|
||||
LARGE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LARGE
|
||||
LINEST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LINEST
|
||||
LOGEST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LOGEST
|
||||
LOGINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LOGINV
|
||||
LOGNORMDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LOGNORMDIST
|
||||
MAX | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MAX
|
||||
MAXA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MAXA
|
||||
MAXIFS | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MAXIFS
|
||||
MEDIAN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MEDIAN
|
||||
MEDIANIF | **Not yet Implemented**
|
||||
MIN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MIN
|
||||
MINA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MINA
|
||||
MINIFS | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MINIFS
|
||||
MODE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE
|
||||
MODE.SNGL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE
|
||||
NEGBINOMDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NEGBINOMDIST
|
||||
NORMDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMDIST
|
||||
NORMINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMINV
|
||||
NORMSDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMSDIST
|
||||
NORMSINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMSINV
|
||||
PEARSON | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CORREL
|
||||
PERCENTILE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERCENTILE
|
||||
PERCENTRANK | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERCENTRANK
|
||||
PERMUT | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERMUT
|
||||
POISSON | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::POISSON
|
||||
PROB | **Not yet Implemented**
|
||||
QUARTILE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::QUARTILE
|
||||
RANK | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::RANK
|
||||
RSQ | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::RSQ
|
||||
SKEW | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SKEW
|
||||
SLOPE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SLOPE
|
||||
SMALL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SMALL
|
||||
STANDARDIZE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STANDARDIZE
|
||||
STDEV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV
|
||||
STDEV.P | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP
|
||||
STDEV.S | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV
|
||||
STDEVA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVA
|
||||
STDEVP | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP
|
||||
STDEVPA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVPA
|
||||
STEYX | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STEYX
|
||||
TDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TDIST
|
||||
TINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TINV
|
||||
TREND | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TREND
|
||||
TRIMMEAN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TRIMMEAN
|
||||
TTEST | **Not yet Implemented**
|
||||
VAR | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc
|
||||
VAR.P | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP
|
||||
VAR.S | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc
|
||||
VARA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARA
|
||||
VARP | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP
|
||||
VARPA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARPA
|
||||
WEIBULL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::WEIBULL
|
||||
ZTEST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::ZTEST
|
||||
|
||||
## CATEGORY_TEXT_AND_DATA
|
||||
|
||||
Excel Function | PhpSpreadsheet Function
|
||||
--------------------|-------------------------------------------
|
||||
ASC | **Not yet Implemented**
|
||||
BAHTTEXT | **Not yet Implemented**
|
||||
CHAR | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CHARACTER
|
||||
CLEAN | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TRIMNONPRINTABLE
|
||||
CODE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::ASCIICODE
|
||||
CONCAT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE
|
||||
CONCATENATE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE
|
||||
DOLLAR | \PhpOffice\PhpSpreadsheet\Calculation\TextData::DOLLAR
|
||||
EXACT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::EXACT
|
||||
FIND | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHSENSITIVE
|
||||
FINDB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHSENSITIVE
|
||||
FIXED | \PhpOffice\PhpSpreadsheet\Calculation\TextData::FIXEDFORMAT
|
||||
JIS | **Not yet Implemented**
|
||||
LEFT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::LEFT
|
||||
LEFTB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::LEFT
|
||||
LEN | \PhpOffice\PhpSpreadsheet\Calculation\TextData::STRINGLENGTH
|
||||
LENB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::STRINGLENGTH
|
||||
LOWER | \PhpOffice\PhpSpreadsheet\Calculation\TextData::LOWERCASE
|
||||
MID | \PhpOffice\PhpSpreadsheet\Calculation\TextData::MID
|
||||
MIDB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::MID
|
||||
NUMBERVALUE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::NUMBERVALUE
|
||||
PHONETIC | **Not yet Implemented**
|
||||
PROPER | \PhpOffice\PhpSpreadsheet\Calculation\TextData::PROPERCASE
|
||||
REPLACE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::REPLACE
|
||||
REPLACEB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::REPLACE
|
||||
REPT | str_repeat
|
||||
RIGHT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::RIGHT
|
||||
RIGHTB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::RIGHT
|
||||
SEARCH | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHINSENSITIVE
|
||||
SEARCHB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHINSENSITIVE
|
||||
SUBSTITUTE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SUBSTITUTE
|
||||
T | \PhpOffice\PhpSpreadsheet\Calculation\TextData::RETURNSTRING
|
||||
TEXT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTFORMAT
|
||||
TEXTJOIN | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTJOIN
|
||||
TRIM | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TRIMSPACES
|
||||
UNICHAR | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CHARACTER
|
||||
UNICODE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::ASCIICODE
|
||||
UPPER | \PhpOffice\PhpSpreadsheet\Calculation\TextData::UPPERCASE
|
||||
VALUE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::VALUE
|
||||
533
vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-name.md
vendored
Normal file
@@ -0,0 +1,533 @@
|
||||
# Function list by name
|
||||
|
||||
## A
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
ABS | CATEGORY_MATH_AND_TRIG | abs
|
||||
ACCRINT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ACCRINT
|
||||
ACCRINTM | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ACCRINTM
|
||||
ACOS | CATEGORY_MATH_AND_TRIG | acos
|
||||
ACOSH | CATEGORY_MATH_AND_TRIG | acosh
|
||||
ACOT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOT
|
||||
ACOTH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOTH
|
||||
ADDRESS | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::cellAddress
|
||||
AMORDEGRC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::AMORDEGRC
|
||||
AMORLINC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::AMORLINC
|
||||
AND | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalAnd
|
||||
ARABIC | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ARABIC
|
||||
AREAS | CATEGORY_LOOKUP_AND_REFERENCE | **Not yet Implemented**
|
||||
ASC | CATEGORY_TEXT_AND_DATA | **Not yet Implemented**
|
||||
ASIN | CATEGORY_MATH_AND_TRIG | asin
|
||||
ASINH | CATEGORY_MATH_AND_TRIG | asinh
|
||||
ATAN | CATEGORY_MATH_AND_TRIG | atan
|
||||
ATAN2 | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ATAN2
|
||||
ATANH | CATEGORY_MATH_AND_TRIG | atanh
|
||||
AVEDEV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVEDEV
|
||||
AVERAGE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVERAGE
|
||||
AVERAGEA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVERAGEA
|
||||
AVERAGEIF | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::AVERAGEIF
|
||||
AVERAGEIFS | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
|
||||
## B
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
BAHTTEXT | CATEGORY_TEXT_AND_DATA | **Not yet Implemented**
|
||||
BASE | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::BASE
|
||||
BESSELI | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELI
|
||||
BESSELJ | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELJ
|
||||
BESSELK | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELK
|
||||
BESSELY | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BESSELY
|
||||
BETADIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::BETADIST
|
||||
BETAINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::BETAINV
|
||||
BIN2DEC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BINTODEC
|
||||
BIN2HEX | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BINTOHEX
|
||||
BIN2OCT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BINTOOCT
|
||||
BINOMDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::BINOMDIST
|
||||
BITAND | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITAND
|
||||
BITLSHIFT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITLSHIFT
|
||||
BITOR | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITOR
|
||||
BITRSHIFT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITRSHIFT
|
||||
BITXOR | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::BITOR
|
||||
|
||||
## C
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
CEILING | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CEILING
|
||||
CELL | CATEGORY_INFORMATION | **Not yet Implemented**
|
||||
CHAR | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CHARACTER
|
||||
CHIDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CHIDIST
|
||||
CHIINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CHIINV
|
||||
CHITEST | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
CHOOSE | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::CHOOSE
|
||||
CLEAN | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TRIMNONPRINTABLE
|
||||
CODE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::ASCIICODE
|
||||
COLUMN | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::COLUMN
|
||||
COLUMNS | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::COLUMNS
|
||||
COMBIN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COMBIN
|
||||
COMPLEX | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::COMPLEX
|
||||
CONCAT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE
|
||||
CONCATENATE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE
|
||||
CONFIDENCE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CONFIDENCE
|
||||
CONVERT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::CONVERTUOM
|
||||
CORREL | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CORREL
|
||||
COS | CATEGORY_MATH_AND_TRIG | cos
|
||||
COSH | CATEGORY_MATH_AND_TRIG | cosh
|
||||
COT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COT
|
||||
COTH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COTH
|
||||
COUNT | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNT
|
||||
COUNTA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTA
|
||||
COUNTBLANK | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTBLANK
|
||||
COUNTIF | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTIF
|
||||
COUNTIFS | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTIFS
|
||||
COUPDAYBS | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPDAYBS
|
||||
COUPDAYS | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPDAYS
|
||||
COUPDAYSNC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPDAYSNC
|
||||
COUPNCD | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPNCD
|
||||
COUPNUM | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPNUM
|
||||
COUPPCD | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPPCD
|
||||
COVAR | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COVAR
|
||||
CRITBINOM | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CRITBINOM
|
||||
CSC | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSC
|
||||
CSCH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSCH
|
||||
CUBEKPIMEMBER | CATEGORY_CUBE | **Not yet Implemented**
|
||||
CUBEMEMBER | CATEGORY_CUBE | **Not yet Implemented**
|
||||
CUBEMEMBERPROPERTY | CATEGORY_CUBE | **Not yet Implemented**
|
||||
CUBERANKEDMEMBER | CATEGORY_CUBE | **Not yet Implemented**
|
||||
CUBESET | CATEGORY_CUBE | **Not yet Implemented**
|
||||
CUBESETCOUNT | CATEGORY_CUBE | **Not yet Implemented**
|
||||
CUBEVALUE | CATEGORY_CUBE | **Not yet Implemented**
|
||||
CUMIPMT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::CUMIPMT
|
||||
CUMPRINC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::CUMPRINC
|
||||
|
||||
## D
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
DATE | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATE
|
||||
DATEDIF | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATEDIF
|
||||
DATEVALUE | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATEVALUE
|
||||
DAVERAGE | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DAVERAGE
|
||||
DAY | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DAYOFMONTH
|
||||
DAYS | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DAYS
|
||||
DAYS360 | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DAYS360
|
||||
DB | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DB
|
||||
DCOUNT | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DCOUNT
|
||||
DCOUNTA | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DCOUNTA
|
||||
DDB | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DDB
|
||||
DEC2BIN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOBIN
|
||||
DEC2HEX | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOHEX
|
||||
DEC2OCT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOOCT
|
||||
DEGREES | CATEGORY_MATH_AND_TRIG | rad2deg
|
||||
DELTA | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DELTA
|
||||
DEVSQ | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::DEVSQ
|
||||
DGET | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DGET
|
||||
DISC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DISC
|
||||
DMAX | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DMAX
|
||||
DMIN | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DMIN
|
||||
DOLLAR | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::DOLLAR
|
||||
DOLLARDE | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DOLLARDE
|
||||
DOLLARFR | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::DOLLARFR
|
||||
DPRODUCT | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DPRODUCT
|
||||
DSTDEV | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DSTDEV
|
||||
DSTDEVP | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DSTDEVP
|
||||
DSUM | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DSUM
|
||||
DURATION | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
DVAR | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DVAR
|
||||
DVARP | CATEGORY_DATABASE | \PhpOffice\PhpSpreadsheet\Calculation\Database::DVARP
|
||||
|
||||
## E
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
EDATE | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::EDATE
|
||||
EFFECT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::EFFECT
|
||||
EOMONTH | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::EOMONTH
|
||||
ERF | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERF
|
||||
ERF.PRECISE | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFPRECISE
|
||||
ERFC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC
|
||||
ERFC.PRECISE | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC
|
||||
ERROR.TYPE | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::errorType
|
||||
EVEN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::EVEN
|
||||
EXACT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::EXACT
|
||||
EXP | CATEGORY_MATH_AND_TRIG | exp
|
||||
EXPONDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::EXPONDIST
|
||||
|
||||
## F
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
FACT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::FACT
|
||||
FACTDOUBLE | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::FACTDOUBLE
|
||||
FALSE | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::FALSE
|
||||
FDIST | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
FIND | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHSENSITIVE
|
||||
FINDB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHSENSITIVE
|
||||
FINV | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
FISHER | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::FISHER
|
||||
FISHERINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::FISHERINV
|
||||
FIXED | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::FIXEDFORMAT
|
||||
FLOOR | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::FLOOR
|
||||
FORECAST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::FORECAST
|
||||
FORMULATEXT | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::FORMULATEXT
|
||||
FREQUENCY | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
FTEST | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
FV | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::FV
|
||||
FVSCHEDULE | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::FVSCHEDULE
|
||||
|
||||
## G
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
GAMMADIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GAMMADIST
|
||||
GAMMAINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GAMMAINV
|
||||
GAMMALN | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GAMMALN
|
||||
GCD | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::GCD
|
||||
GEOMEAN | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GEOMEAN
|
||||
GESTEP | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::GESTEP
|
||||
GETPIVOTDATA | CATEGORY_LOOKUP_AND_REFERENCE | **Not yet Implemented**
|
||||
GROWTH | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::GROWTH
|
||||
|
||||
## H
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
HARMEAN | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::HARMEAN
|
||||
HEX2BIN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTOBIN
|
||||
HEX2DEC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTODEC
|
||||
HEX2OCT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTOOCT
|
||||
HLOOKUP | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HLOOKUP
|
||||
HOUR | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::HOUROFDAY
|
||||
HYPERLINK | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HYPERLINK
|
||||
HYPGEOMDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::HYPGEOMDIST
|
||||
|
||||
## I
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
IF | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::statementIf
|
||||
IFERROR | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::IFERROR
|
||||
IFNA | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::IFNA
|
||||
IFS | CATEGORY_LOGICAL | **Not yet Implemented**
|
||||
IMABS | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMABS
|
||||
IMAGINARY | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMAGINARY
|
||||
IMARGUMENT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMARGUMENT
|
||||
IMCONJUGATE | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCONJUGATE
|
||||
IMCOS | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOS
|
||||
IMCOSH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOSH
|
||||
IMCOT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOT
|
||||
IMCSC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSC
|
||||
IMCSCH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSCH
|
||||
IMDIV | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMDIV
|
||||
IMEXP | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMEXP
|
||||
IMLN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLN
|
||||
IMLOG10 | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLOG10
|
||||
IMLOG2 | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLOG2
|
||||
IMPOWER | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPOWER
|
||||
IMPRODUCT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPRODUCT
|
||||
IMREAL | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMREAL
|
||||
IMSEC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSEC
|
||||
IMSECH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSECH
|
||||
IMSIN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSIN
|
||||
IMSINH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSINH
|
||||
IMSQRT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSQRT
|
||||
IMSUB | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUB
|
||||
IMSUM | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUM
|
||||
IMTAN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMTAN
|
||||
INDEX | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDEX
|
||||
INDIRECT | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDIRECT
|
||||
INFO | CATEGORY_INFORMATION | **Not yet Implemented**
|
||||
INT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::INT
|
||||
INTERCEPT | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::INTERCEPT
|
||||
INTRATE | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::INTRATE
|
||||
IPMT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::IPMT
|
||||
IRR | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::IRR
|
||||
ISBLANK | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isBlank
|
||||
ISERR | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isErr
|
||||
ISERROR | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isError
|
||||
ISEVEN | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isEven
|
||||
ISFORMULA | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isFormula
|
||||
ISLOGICAL | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isLogical
|
||||
ISNA | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isNa
|
||||
ISNONTEXT | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isNonText
|
||||
ISNUMBER | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isNumber
|
||||
ISODD | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isOdd
|
||||
ISOWEEKNUM | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::ISOWEEKNUM
|
||||
ISPMT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ISPMT
|
||||
ISREF | CATEGORY_INFORMATION | **Not yet Implemented**
|
||||
ISTEXT | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::isText
|
||||
|
||||
## J
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
JIS | CATEGORY_TEXT_AND_DATA | **Not yet Implemented**
|
||||
|
||||
## K
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
KURT | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::KURT
|
||||
|
||||
## L
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
LARGE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LARGE
|
||||
LCM | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::LCM
|
||||
LEFT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::LEFT
|
||||
LEFTB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::LEFT
|
||||
LEN | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::STRINGLENGTH
|
||||
LENB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::STRINGLENGTH
|
||||
LINEST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LINEST
|
||||
LN | CATEGORY_MATH_AND_TRIG | log
|
||||
LOG | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::logBase
|
||||
LOG10 | CATEGORY_MATH_AND_TRIG | log10
|
||||
LOGEST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LOGEST
|
||||
LOGINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LOGINV
|
||||
LOGNORMDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::LOGNORMDIST
|
||||
LOOKUP | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::LOOKUP
|
||||
LOWER | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::LOWERCASE
|
||||
|
||||
## M
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
MATCH | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::MATCH
|
||||
MAX | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MAX
|
||||
MAXA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MAXA
|
||||
MAXIFS | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MAXIFS
|
||||
MDETERM | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MDETERM
|
||||
MDURATION | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
MEDIAN | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MEDIAN
|
||||
MEDIANIF | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
MID | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::MID
|
||||
MIDB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::MID
|
||||
MIN | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MIN
|
||||
MINA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MINA
|
||||
MINIFS | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MINIFS
|
||||
MINUTE | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::MINUTE
|
||||
MINVERSE | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MINVERSE
|
||||
MIRR | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::MIRR
|
||||
MMULT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MMULT
|
||||
MOD | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MOD
|
||||
MODE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE
|
||||
MODE.SNGL | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE
|
||||
MONTH | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::MONTHOFYEAR
|
||||
MROUND | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MROUND
|
||||
MULTINOMIAL | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MULTINOMIAL
|
||||
|
||||
## N
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
N | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::n
|
||||
NA | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::NA
|
||||
NEGBINOMDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NEGBINOMDIST
|
||||
NETWORKDAYS | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::NETWORKDAYS
|
||||
NETWORKDAYS.INTL | CATEGORY_DATE_AND_TIME | **Not yet Implemented**
|
||||
NOMINAL | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NOMINAL
|
||||
NORMDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMDIST
|
||||
NORMINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMINV
|
||||
NORMSDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMSDIST
|
||||
NORMSINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMSINV
|
||||
NOT | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::NOT
|
||||
NOW | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATETIMENOW
|
||||
NPER | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NPER
|
||||
NPV | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NPV
|
||||
NUMBERVALUE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::NUMBERVALUE
|
||||
|
||||
## O
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
OCT2BIN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTOBIN
|
||||
OCT2DEC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTODEC
|
||||
OCT2HEX | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTOHEX
|
||||
ODD | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ODD
|
||||
ODDFPRICE | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
ODDFYIELD | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
ODDLPRICE | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
ODDLYIELD | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
OFFSET | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::OFFSET
|
||||
OR | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalOr
|
||||
|
||||
## P
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
PDURATION | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PDURATION
|
||||
PEARSON | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CORREL
|
||||
PERCENTILE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERCENTILE
|
||||
PERCENTRANK | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERCENTRANK
|
||||
PERMUT | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERMUT
|
||||
PHONETIC | CATEGORY_TEXT_AND_DATA | **Not yet Implemented**
|
||||
PI | CATEGORY_MATH_AND_TRIG | pi
|
||||
PMT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PMT
|
||||
POISSON | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::POISSON
|
||||
POWER | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::POWER
|
||||
PPMT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PPMT
|
||||
PRICE | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICE
|
||||
PRICEDISC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICEDISC
|
||||
PRICEMAT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICEMAT
|
||||
PROB | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
PRODUCT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::PRODUCT
|
||||
PROPER | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::PROPERCASE
|
||||
PV | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PV
|
||||
|
||||
## Q
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
QUARTILE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::QUARTILE
|
||||
QUOTIENT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::QUOTIENT
|
||||
|
||||
## R
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
RADIANS | CATEGORY_MATH_AND_TRIG | deg2rad
|
||||
RAND | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::RAND
|
||||
RANDBETWEEN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::RAND
|
||||
RANK | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::RANK
|
||||
RATE | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RATE
|
||||
RECEIVED | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RECEIVED
|
||||
REPLACE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::REPLACE
|
||||
REPLACEB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::REPLACE
|
||||
REPT | CATEGORY_TEXT_AND_DATA | str_repeat
|
||||
RIGHT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::RIGHT
|
||||
RIGHTB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::RIGHT
|
||||
ROMAN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROMAN
|
||||
ROUND | CATEGORY_MATH_AND_TRIG | round
|
||||
ROUNDDOWN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROUNDDOWN
|
||||
ROUNDUP | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROUNDUP
|
||||
ROW | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::ROW
|
||||
ROWS | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::ROWS
|
||||
RRI | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RRI
|
||||
RSQ | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::RSQ
|
||||
RTD | CATEGORY_LOOKUP_AND_REFERENCE | **Not yet Implemented**
|
||||
|
||||
## S
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
SEARCH | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHINSENSITIVE
|
||||
SEARCHB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHINSENSITIVE
|
||||
SEC | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SEC
|
||||
SECH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SECH
|
||||
SECOND | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::SECOND
|
||||
SERIESSUM | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SERIESSUM
|
||||
SIGN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SIGN
|
||||
SIN | CATEGORY_MATH_AND_TRIG | sin
|
||||
SINH | CATEGORY_MATH_AND_TRIG | sinh
|
||||
SKEW | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SKEW
|
||||
SLN | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::SLN
|
||||
SLOPE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SLOPE
|
||||
SMALL | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SMALL
|
||||
SQRT | CATEGORY_MATH_AND_TRIG | sqrt
|
||||
SQRTPI | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SQRTPI
|
||||
STANDARDIZE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STANDARDIZE
|
||||
STDEV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV
|
||||
STDEV.P | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP
|
||||
STDEV.S | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV
|
||||
STDEVA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVA
|
||||
STDEVP | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP
|
||||
STDEVPA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVPA
|
||||
STEYX | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STEYX
|
||||
SUBSTITUTE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SUBSTITUTE
|
||||
SUBTOTAL | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUBTOTAL
|
||||
SUM | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUM
|
||||
SUMIF | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIF
|
||||
SUMIFS | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIFS
|
||||
SUMPRODUCT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMPRODUCT
|
||||
SUMSQ | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMSQ
|
||||
SUMX2MY2 | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMX2MY2
|
||||
SUMX2PY2 | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMX2PY2
|
||||
SUMXMY2 | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMXMY2
|
||||
SWITCH | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::statementSwitch
|
||||
SYD | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::SYD
|
||||
|
||||
## T
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
T | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::RETURNSTRING
|
||||
TAN | CATEGORY_MATH_AND_TRIG | tan
|
||||
TANH | CATEGORY_MATH_AND_TRIG | tanh
|
||||
TBILLEQ | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLEQ
|
||||
TBILLPRICE | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLPRICE
|
||||
TBILLYIELD | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLYIELD
|
||||
TDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TDIST
|
||||
TEXT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTFORMAT
|
||||
TEXTJOIN | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTJOIN
|
||||
TIME | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::TIME
|
||||
TIMEVALUE | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::TIMEVALUE
|
||||
TINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TINV
|
||||
TODAY | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATENOW
|
||||
TRANSPOSE | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::TRANSPOSE
|
||||
TREND | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TREND
|
||||
TRIM | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TRIMSPACES
|
||||
TRIMMEAN | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TRIMMEAN
|
||||
TRUE | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::TRUE
|
||||
TRUNC | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::TRUNC
|
||||
TTEST | CATEGORY_STATISTICAL | **Not yet Implemented**
|
||||
TYPE | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::TYPE
|
||||
|
||||
## U
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
UNICHAR | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CHARACTER
|
||||
UNICODE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::ASCIICODE
|
||||
UPPER | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::UPPERCASE
|
||||
USDOLLAR | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
|
||||
## V
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
VALUE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::VALUE
|
||||
VAR | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc
|
||||
VAR.P | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP
|
||||
VAR.S | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc
|
||||
VARA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARA
|
||||
VARP | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP
|
||||
VARPA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARPA
|
||||
VDB | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
VLOOKUP | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::VLOOKUP
|
||||
|
||||
## W
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
WEEKDAY | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::WEEKDAY
|
||||
WEEKNUM | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::WEEKNUM
|
||||
WEIBULL | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::WEIBULL
|
||||
WORKDAY | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::WORKDAY
|
||||
WORKDAY.INTL | CATEGORY_DATE_AND_TIME | **Not yet Implemented**
|
||||
|
||||
## X
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
XIRR | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::XIRR
|
||||
XNPV | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::XNPV
|
||||
XOR | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalXor
|
||||
|
||||
## Y
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
YEAR | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::YEAR
|
||||
YEARFRAC | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::YEARFRAC
|
||||
YIELD | CATEGORY_FINANCIAL | **Not yet Implemented**
|
||||
YIELDDISC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::YIELDDISC
|
||||
YIELDMAT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::YIELDMAT
|
||||
|
||||
## Z
|
||||
|
||||
Excel Function | Category | PhpSpreadsheet Function
|
||||
--------------------|--------------------------------|-------------------------------------------
|
||||
ZTEST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::ZTEST
|
||||
556
vendor/phpoffice/phpspreadsheet/docs/topics/accessing-cells.md
vendored
Normal file
@@ -0,0 +1,556 @@
|
||||
# Accessing cells
|
||||
|
||||
Accessing cells in a Spreadsheet should be pretty straightforward. This
|
||||
topic lists some of the options to access a cell.
|
||||
|
||||
## Setting a cell value by coordinate
|
||||
|
||||
Setting a cell value by coordinate can be done using the worksheet's
|
||||
`setCellValue()` method.
|
||||
|
||||
``` php
|
||||
// Set cell A1 with a string value
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'PhpSpreadsheet');
|
||||
|
||||
// Set cell A2 with a numeric value
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A2', 12345.6789);
|
||||
|
||||
// Set cell A3 with a boolean value
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A3', TRUE);
|
||||
|
||||
// Set cell A4 with a formula
|
||||
$spreadsheet->getActiveSheet()->setCellValue(
|
||||
'A4',
|
||||
'=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))'
|
||||
);
|
||||
```
|
||||
|
||||
Alternatively, you can retrieve the cell object, and then call the
|
||||
cell’s `setValue()` method:
|
||||
|
||||
``` php
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getCell('B8')
|
||||
->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,
|
||||
particularly when working with large spreadsheets. One technique used to
|
||||
reduce this memory overhead is cell caching, so cells are actually
|
||||
maintained in a collection that may or may not be held in memory while you
|
||||
are working with the spreadsheet. Because of this, a call to `getCell()`
|
||||
(or any similar method) returns the cell data, and a pointer to the collection.
|
||||
While this is not normally an issue, it can become significant
|
||||
if you assign the result of a call to `getCell()` to a variable. Any
|
||||
subsequent calls to retrieve other cells will unset that pointer, although
|
||||
the cell object will still retain its data values.
|
||||
|
||||
What does this mean? Consider the following code:
|
||||
|
||||
```
|
||||
$spreadSheet = new Spreadsheet();
|
||||
$workSheet = $spreadSheet->getActiveSheet();
|
||||
|
||||
// Set details for the formula that we want to evaluate, together with any data on which it depends
|
||||
$workSheet->fromArray(
|
||||
[1, 2, 3],
|
||||
null,
|
||||
'A1'
|
||||
);
|
||||
|
||||
$cellC1 = $workSheet->getCell('C1');
|
||||
echo 'Value: ', $cellC1->getValue(), '; Address: ', $cellC1->getCoordinate(), PHP_EOL;
|
||||
|
||||
$cellA1 = $workSheet->getCell('A1');
|
||||
echo 'Value: ', $cellA1->getValue(), '; Address: ', $cellA1->getCoordinate(), PHP_EOL;
|
||||
|
||||
echo 'Value: ', $cellC1->getValue(), '; Address: ', $cellC1->getCoordinate(), PHP_EOL;
|
||||
```
|
||||
|
||||
The call to `getCell('C1')` returns the cell at `C1` containing its value (`3`),
|
||||
together with its link to the collection (used to identify its
|
||||
address/coordinate `C1`). The subsequent call to access cell `A1`
|
||||
modifies the value of `$cellC1`, detaching its link to the collection.
|
||||
|
||||
So when we try to display the value and address a second time, we can display
|
||||
its value, but trying to display its address/coordinate will throw an
|
||||
exception because that link has been set to null.
|
||||
|
||||
__Note:__ There are some internal methods that will fetch other cells from the
|
||||
collection, and this too will detach the link to the collection from any cell
|
||||
that you might have assigned to a variable.
|
||||
|
||||
## Excel DataTypes
|
||||
|
||||
MS Excel supports 7 basic datatypes:
|
||||
|
||||
- string
|
||||
- number
|
||||
- boolean
|
||||
- null
|
||||
- formula
|
||||
- error
|
||||
- Inline (or rich text) string
|
||||
|
||||
By default, when you call the worksheet's `setCellValue()` method or the
|
||||
cell's `setValue()` method, PhpSpreadsheet will use the appropriate
|
||||
datatype for PHP nulls, booleans, floats or integers; or cast any string
|
||||
data value that you pass to the method into the most appropriate
|
||||
datatype, so numeric strings will be cast to numbers, while string
|
||||
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
|
||||
as genuine string values.
|
||||
|
||||
This "conversion" is handled by a cell "value binder", and you can write
|
||||
custom "value binders" to change the behaviour of these "conversions".
|
||||
The standard PhpSpreadsheet package also provides an "advanced value
|
||||
binder" that handles a number of more complex conversions, such as
|
||||
converting strings with a fractional format like "3/4" to a number value
|
||||
(0.75 in this case) and setting an appropriate "fraction" number format
|
||||
mask. Similarly, strings like "5%" will be converted to a value of 0.05,
|
||||
and a percentage number format mask applied, and strings containing
|
||||
values that look like dates will be converted to Excel serialized
|
||||
datetimestamp values, and a corresponding mask applied. This is
|
||||
particularly useful when loading data from csv files, or setting cell
|
||||
values from a database.
|
||||
|
||||
Formats handled by the advanced value binder include:
|
||||
|
||||
- TRUE or FALSE (dependent on locale settings) are converted to booleans.
|
||||
- Numeric strings identified as scientific (exponential) format are
|
||||
converted to numbers.
|
||||
- Fractions and vulgar fractions are converted to numbers, and
|
||||
an appropriate number format mask applied.
|
||||
- Percentages are converted
|
||||
to numbers, divided by 100, and an appropriate number format mask
|
||||
applied.
|
||||
- Dates and times are converted to Excel timestamp values
|
||||
(numbers), and an appropriate number format mask applied.
|
||||
- When strings contain a newline character (`\n`), then the cell styling is
|
||||
set to wrap.
|
||||
|
||||
You can read more about value binders later in this section of the
|
||||
documentation.
|
||||
|
||||
### Setting a formula in a Cell
|
||||
|
||||
As stated above, if you store a string value with the first character an `=`
|
||||
in a cell. PHPSpreadsheet will treat that value as a formula, and then you
|
||||
can evaluate that formula by calling `getCalculatedValue()` against the cell.
|
||||
|
||||
There may be times though, when you wish to store a value beginning with `=`
|
||||
as a string, and that you don't want PHPSpreadsheet to evaluate as though it
|
||||
was a formula.
|
||||
|
||||
To do this, you need to "escape" the value by setting it as "quoted text".
|
||||
|
||||
```
|
||||
// Set cell A4 with a formula
|
||||
$spreadsheet->getActiveSheet()->setCellValue(
|
||||
'A4',
|
||||
'=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))'
|
||||
);
|
||||
$spreadsheet->getActiveSheet()->getCell('A4')
|
||||
->getStyle()->setQuotePrefix(true);
|
||||
```
|
||||
|
||||
Then, even if you ask PHPSpreadsheet to return the calculated value for cell
|
||||
`A4`, it will return `=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))`
|
||||
as a string, and not try to evaluate the formula.
|
||||
|
||||
|
||||
### Setting a date and/or time value in a cell
|
||||
|
||||
Date or time values are held as timestamp in Excel (a simple floating
|
||||
point value), and a number format mask is used to show how that value
|
||||
should be formatted; so if we want to store a date in a cell, we need to
|
||||
calculate the correct Excel timestamp, and set a number format mask.
|
||||
|
||||
``` php
|
||||
// Get the current date/time and convert to an Excel date/time
|
||||
$dateTimeNow = time();
|
||||
$excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel( $dateTimeNow );
|
||||
// Set cell A6 with the Excel date/time value
|
||||
$spreadsheet->getActiveSheet()->setCellValue(
|
||||
'A6',
|
||||
$excelDateValue
|
||||
);
|
||||
// Set the number format mask so that the excel timestamp will be displayed as a human-readable date/time
|
||||
$spreadsheet->getActiveSheet()->getStyle('A6')
|
||||
->getNumberFormat()
|
||||
->setFormatCode(
|
||||
\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME
|
||||
);
|
||||
```
|
||||
|
||||
### Setting a number with leading zeroes
|
||||
|
||||
By default, PhpSpreadsheet will automatically detect the value type and
|
||||
set it to the appropriate Excel numeric datatype. This type conversion
|
||||
is handled by a value binder, as described in the section of this
|
||||
document entitled "Using value binders to facilitate data entry".
|
||||
|
||||
Numbers don't have leading zeroes, so if you try to set a numeric value
|
||||
that does have leading zeroes (such as a telephone number) then these
|
||||
will be normally be lost as the value is cast to a number, so
|
||||
"01513789642" will be displayed as 1513789642.
|
||||
|
||||
There are two ways you can force PhpSpreadsheet to override this
|
||||
behaviour.
|
||||
|
||||
Firstly, you can set the datatype explicitly as a string so that it is
|
||||
not converted to a number.
|
||||
|
||||
``` php
|
||||
// Set cell A8 with a numeric value, but tell PhpSpreadsheet it should be treated as a string
|
||||
$spreadsheet->getActiveSheet()->setCellValueExplicit(
|
||||
'A8',
|
||||
"01513789642",
|
||||
\PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING
|
||||
);
|
||||
```
|
||||
|
||||
Alternatively, you can use a number format mask to display the value
|
||||
with leading zeroes.
|
||||
|
||||
``` php
|
||||
// Set cell A9 with a numeric value
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A9', 1513789642);
|
||||
// Set a number format mask to display the value as 11 digits with leading zeroes
|
||||
$spreadsheet->getActiveSheet()->getStyle('A9')
|
||||
->getNumberFormat()
|
||||
->setFormatCode(
|
||||
'00000000000'
|
||||
);
|
||||
```
|
||||
|
||||
With number format masking, you can even break up the digits into groups
|
||||
to make the value more easily readable.
|
||||
|
||||
``` php
|
||||
// Set cell A10 with a numeric value
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A10', 1513789642);
|
||||
// Set a number format mask to display the value as 11 digits with leading zeroes
|
||||
$spreadsheet->getActiveSheet()->getStyle('A10')
|
||||
->getNumberFormat()
|
||||
->setFormatCode(
|
||||
'0000-000-0000'
|
||||
);
|
||||
```
|
||||
|
||||

|
||||
|
||||
**Note:** that not all complex format masks such as this one will work
|
||||
when retrieving a formatted value to display "on screen", or for certain
|
||||
writers such as HTML or PDF, but it will work with the true spreadsheet
|
||||
writers (Xlsx and Xls).
|
||||
|
||||
## Setting a range of cells from an array
|
||||
|
||||
It is also possible to set a range of cell values in a single call by
|
||||
passing an array of values to the `fromArray()` method.
|
||||
|
||||
``` php
|
||||
$arrayData = [
|
||||
[NULL, 2010, 2011, 2012],
|
||||
['Q1', 12, 15, 21],
|
||||
['Q2', 56, 73, 86],
|
||||
['Q3', 52, 61, 69],
|
||||
['Q4', 30, 32, 0],
|
||||
];
|
||||
$spreadsheet->getActiveSheet()
|
||||
->fromArray(
|
||||
$arrayData, // The data to set
|
||||
NULL, // Array values with this value will not be set
|
||||
'C3' // Top left coordinate of the worksheet range where
|
||||
// we want to set these values (default is A1)
|
||||
);
|
||||
```
|
||||
|
||||

|
||||
|
||||
If you pass a 2-d array, then this will be treated as a series of rows
|
||||
and columns. A 1-d array will be treated as a single row, which is
|
||||
particularly useful if you're fetching an array of data from a database.
|
||||
|
||||
``` php
|
||||
$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
|
||||
$spreadsheet->getActiveSheet()
|
||||
->fromArray(
|
||||
$rowArray, // The data to set
|
||||
NULL, // Array values with this value will not be set
|
||||
'C3' // Top left coordinate of the worksheet range where
|
||||
// we want to set these values (default is A1)
|
||||
);
|
||||
```
|
||||
|
||||

|
||||
|
||||
If you have a simple 1-d array, and want to write it as a column, then
|
||||
the following will convert it into an appropriately structured 2-d array
|
||||
that can be fed to the `fromArray()` method:
|
||||
|
||||
``` php
|
||||
$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
|
||||
$columnArray = array_chunk($rowArray, 1);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->fromArray(
|
||||
$columnArray, // The data to set
|
||||
NULL, // Array values with this value will not be set
|
||||
'C3' // Top left coordinate of the worksheet range where
|
||||
// we want to set these values (default is A1)
|
||||
);
|
||||
```
|
||||
|
||||

|
||||
|
||||
## Retrieving a cell value by coordinate
|
||||
|
||||
To retrieve the value of a cell, the cell should first be retrieved from
|
||||
the worksheet using the `getCell()` method. A cell's value can be read
|
||||
using the `getValue()` method.
|
||||
|
||||
``` php
|
||||
// Get the value from cell A1
|
||||
$cellValue = $spreadsheet->getActiveSheet()->getCell('A1')->getValue();
|
||||
```
|
||||
|
||||
This will retrieve the raw, unformatted value contained in the cell.
|
||||
|
||||
If a cell contains a formula, and you need to retrieve the calculated
|
||||
value rather than the formula itself, then use the cell's
|
||||
`getCalculatedValue()` method. This is further explained in
|
||||
[the calculation engine](./calculation-engine.md).
|
||||
|
||||
``` php
|
||||
// Get the value from cell A4
|
||||
$cellValue = $spreadsheet->getActiveSheet()->getCell('A4')->getCalculatedValue();
|
||||
```
|
||||
|
||||
Alternatively, if you want to see the value with any cell formatting
|
||||
applied (e.g. for a human-readable date or time value), then you can use
|
||||
the cell's `getFormattedValue()` method.
|
||||
|
||||
``` php
|
||||
// Get the value from cell A6
|
||||
$cellValue = $spreadsheet->getActiveSheet()->getCell('A6')->getFormattedValue();
|
||||
```
|
||||
|
||||
## Setting a cell value by column and row
|
||||
|
||||
Setting a cell value by coordinate can be done using the worksheet's
|
||||
`setCellValueByColumnAndRow()` method.
|
||||
|
||||
``` php
|
||||
// Set cell A5 with a string value
|
||||
$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow(1, 5, 'PhpSpreadsheet');
|
||||
```
|
||||
|
||||
**Note:** that column references start with `1` for column `A`.
|
||||
|
||||
## Retrieving a cell value by column and row
|
||||
|
||||
To retrieve the value of a cell, the cell should first be retrieved from
|
||||
the worksheet using the `getCellByColumnAndRow()` method. A cell’s value can
|
||||
be read again using the following line of code:
|
||||
|
||||
``` php
|
||||
// Get the value from cell B5
|
||||
$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(2, 5)->getValue();
|
||||
```
|
||||
|
||||
If you need the calculated value of a cell, use the following code. This
|
||||
is further explained in [the calculation engine](./calculation-engine.md).
|
||||
|
||||
``` php
|
||||
// Get the value from cell A4
|
||||
$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(1, 4)->getCalculatedValue();
|
||||
```
|
||||
|
||||
## Retrieving a range of cell values to an array
|
||||
|
||||
It is also possible to retrieve a range of cell values to an array in a
|
||||
single call using the `toArray()`, `rangeToArray()` or
|
||||
`namedRangeToArray()` methods.
|
||||
|
||||
``` php
|
||||
$dataArray = $spreadsheet->getActiveSheet()
|
||||
->rangeToArray(
|
||||
'C3:E5', // The worksheet range that we want to retrieve
|
||||
NULL, // Value that should be returned for empty cells
|
||||
TRUE, // Should formulas be calculated (the equivalent of getCalculatedValue() for each cell)
|
||||
TRUE, // Should values be formatted (the equivalent of getFormattedValue() for each cell)
|
||||
TRUE // Should the array be indexed by cell row and cell column
|
||||
);
|
||||
```
|
||||
|
||||
These methods will all return a 2-d array of rows and columns. The
|
||||
`toArray()` method will return the whole worksheet; `rangeToArray()`
|
||||
will return a specified range or cells; while `namedRangeToArray()` will
|
||||
return the cells within a defined `named range`.
|
||||
|
||||
## Looping through cells
|
||||
|
||||
### Looping through cells using iterators
|
||||
|
||||
The easiest way to loop cells is by using iterators. Using iterators,
|
||||
one can use foreach to loop worksheets, rows within a worksheet, and
|
||||
cells within a row.
|
||||
|
||||
Below is an example where we read all the values in a worksheet and
|
||||
display them in a table.
|
||||
|
||||
``` php
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
|
||||
$reader->setReadDataOnly(TRUE);
|
||||
$spreadsheet = $reader->load("test.xlsx");
|
||||
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
echo '<table>' . PHP_EOL;
|
||||
foreach ($worksheet->getRowIterator() as $row) {
|
||||
echo '<tr>' . PHP_EOL;
|
||||
$cellIterator = $row->getCellIterator();
|
||||
$cellIterator->setIterateOnlyExistingCells(FALSE); // This loops through all cells,
|
||||
// even if a cell value is not set.
|
||||
// By default, only cells that have a value
|
||||
// set will be iterated.
|
||||
foreach ($cellIterator as $cell) {
|
||||
echo '<td>' .
|
||||
$cell->getValue() .
|
||||
'</td>' . PHP_EOL;
|
||||
}
|
||||
echo '</tr>' . PHP_EOL;
|
||||
}
|
||||
echo '</table>' . PHP_EOL;
|
||||
```
|
||||
|
||||
Note that we have set the cell iterator's
|
||||
`setIterateOnlyExistingCells()` to FALSE. This makes the iterator loop
|
||||
all cells within the worksheet range, even if they have not been set.
|
||||
|
||||
The cell iterator will return a `null` as the cell value if it is not
|
||||
set in the worksheet. Setting the cell iterator's
|
||||
`setIterateOnlyExistingCells()` to `false` will loop all cells in the
|
||||
worksheet that can be available at that moment. This will create new
|
||||
cells if required and increase memory usage! Only use it if it is
|
||||
intended to loop all cells that are possibly available.
|
||||
|
||||
### Looping through cells using indexes
|
||||
|
||||
One can use the possibility to access cell values by column and row
|
||||
index like `[1, 1]` instead of `'A1'` for reading and writing cell values in
|
||||
loops.
|
||||
|
||||
**Note:** In PhpSpreadsheet column index and row index are 1-based. That means `'A1'` ~ `[1, 1]`
|
||||
|
||||
Below is an example where we read all the values in a worksheet and
|
||||
display them in a table.
|
||||
|
||||
``` php
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
|
||||
$reader->setReadDataOnly(TRUE);
|
||||
$spreadsheet = $reader->load("test.xlsx");
|
||||
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
// Get the highest row and column numbers referenced in the worksheet
|
||||
$highestRow = $worksheet->getHighestRow(); // e.g. 10
|
||||
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
|
||||
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5
|
||||
|
||||
echo '<table>' . "\n";
|
||||
for ($row = 1; $row <= $highestRow; ++$row) {
|
||||
echo '<tr>' . PHP_EOL;
|
||||
for ($col = 1; $col <= $highestColumnIndex; ++$col) {
|
||||
$value = $worksheet->getCellByColumnAndRow($col, $row)->getValue();
|
||||
echo '<td>' . $value . '</td>' . PHP_EOL;
|
||||
}
|
||||
echo '</tr>' . PHP_EOL;
|
||||
}
|
||||
echo '</table>' . PHP_EOL;
|
||||
```
|
||||
|
||||
Alternatively, you can take advantage of PHP's "Perl-style" character
|
||||
incrementors to loop through the cells by coordinate:
|
||||
|
||||
``` php
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
|
||||
$reader->setReadDataOnly(TRUE);
|
||||
$spreadsheet = $reader->load("test.xlsx");
|
||||
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
// Get the highest row number and column letter referenced in the worksheet
|
||||
$highestRow = $worksheet->getHighestRow(); // e.g. 10
|
||||
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
|
||||
// Increment the highest column letter
|
||||
$highestColumn++;
|
||||
|
||||
echo '<table>' . "\n";
|
||||
for ($row = 1; $row <= $highestRow; ++$row) {
|
||||
echo '<tr>' . PHP_EOL;
|
||||
for ($col = 'A'; $col != $highestColumn; ++$col) {
|
||||
echo '<td>' .
|
||||
$worksheet->getCell($col . $row)
|
||||
->getValue() .
|
||||
'</td>' . PHP_EOL;
|
||||
}
|
||||
echo '</tr>' . PHP_EOL;
|
||||
}
|
||||
echo '</table>' . PHP_EOL;
|
||||
```
|
||||
|
||||
Note that we can't use a `<=` comparison here, because `'AA'` would match
|
||||
as `<= 'B'`, so we increment the highest column letter and then loop
|
||||
while `$col !=` the incremented highest column.
|
||||
|
||||
## Using value binders to facilitate data entry
|
||||
|
||||
Internally, PhpSpreadsheet uses a default
|
||||
`\PhpOffice\PhpSpreadsheet\Cell\IValueBinder` implementation
|
||||
(\PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder) to determine data
|
||||
types of entered data using a cell's `setValue()` method (the
|
||||
`setValueExplicit()` method bypasses this check).
|
||||
|
||||
Optionally, the default behaviour of PhpSpreadsheet can be modified,
|
||||
allowing easier data entry. For example, a
|
||||
`\PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder` class is available.
|
||||
It automatically converts percentages, number in scientific format, and
|
||||
dates entered as strings to the correct format, also setting the cell's
|
||||
style information. The following example demonstrates how to set the
|
||||
value binder in PhpSpreadsheet:
|
||||
|
||||
``` php
|
||||
/** PhpSpreadsheet */
|
||||
require_once 'src/Boostrap.php';
|
||||
|
||||
// Set value binder
|
||||
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
|
||||
|
||||
// ...
|
||||
// Add some data, resembling some different data types
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A4', 'Percentage value:');
|
||||
// Converts the string value to 0.1 and sets percentage cell style
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B4', '10%');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A5', 'Date/time value:');
|
||||
// Converts the string value to an Excel datestamp and sets the date format cell style
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B5', '21 December 1983');
|
||||
```
|
||||
|
||||
**Creating your own value binder is easy.** When advanced value binding
|
||||
is required, you can implement the
|
||||
`\PhpOffice\PhpSpreadsheet\Cell\IValueBinder` interface or extend the
|
||||
`\PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder` or
|
||||
`\PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder` classes.
|
||||
75
vendor/phpoffice/phpspreadsheet/docs/topics/architecture.md
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
# Architecture
|
||||
|
||||
## Schematical
|
||||
|
||||

|
||||
|
||||
## AutoLoader
|
||||
|
||||
PhpSpreadsheet relies on Composer autoloader. So before working with
|
||||
PhpSpreadsheet in standalone, be sure to run `composer install`. Or add it to a
|
||||
pre-existing project with `composer require phpoffice/phpspreadsheet`.
|
||||
|
||||
## Spreadsheet in memory
|
||||
|
||||
PhpSpreadsheet's architecture is built in a way that it can serve as an
|
||||
in-memory spreadsheet. This means that, if one would want to create a
|
||||
web based view of a spreadsheet which communicates with PhpSpreadsheet's
|
||||
object model, he would only have to write the front-end code.
|
||||
|
||||
Just like desktop spreadsheet software, PhpSpreadsheet represents a
|
||||
spreadsheet containing one or more worksheets, which contain cells with
|
||||
data, formulas, images, ...
|
||||
|
||||
## Readers and writers
|
||||
|
||||
On its own, the `Spreadsheet` class does not provide the functionality
|
||||
to read from or write to a persisted spreadsheet (on disk or in a
|
||||
database). To provide that functionality, readers and writers can be
|
||||
used.
|
||||
|
||||
By default, the PhpSpreadsheet package provides some readers and
|
||||
writers, including one for the Open XML spreadsheet format (a.k.a. Excel
|
||||
2007 file format). You are not limited to the default readers and
|
||||
writers, as you are free to implement the
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReader` and
|
||||
`\PhpOffice\PhpSpreadsheet\Writer\IWriter` interface in a custom class.
|
||||
|
||||

|
||||
|
||||
## Fluent interfaces
|
||||
|
||||
PhpSpreadsheet supports fluent interfaces in most locations. This means
|
||||
that you can easily "chain" calls to specific methods without requiring
|
||||
a new PHP statement. For example, take the following code:
|
||||
|
||||
``` php
|
||||
$spreadsheet->getProperties()->setCreator("Maarten Balliauw");
|
||||
$spreadsheet->getProperties()->setLastModifiedBy("Maarten Balliauw");
|
||||
$spreadsheet->getProperties()->setTitle("Office 2007 XLSX Test Document");
|
||||
$spreadsheet->getProperties()->setSubject("Office 2007 XLSX Test Document");
|
||||
$spreadsheet->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
|
||||
$spreadsheet->getProperties()->setKeywords("office 2007 openxml php");
|
||||
$spreadsheet->getProperties()->setCategory("Test result file");
|
||||
```
|
||||
|
||||
This can be rewritten as:
|
||||
|
||||
``` php
|
||||
$spreadsheet->getProperties()
|
||||
->setCreator("Maarten Balliauw")
|
||||
->setLastModifiedBy("Maarten Balliauw")
|
||||
->setTitle("Office 2007 XLSX Test Document")
|
||||
->setSubject("Office 2007 XLSX Test Document")
|
||||
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
|
||||
->setKeywords("office 2007 openxml php")
|
||||
->setCategory("Test result file");
|
||||
```
|
||||
|
||||
> **Using fluent interfaces is not required** Fluent interfaces have
|
||||
> been implemented to provide a convenient programming API. Use of them
|
||||
> is not required, but can make your code easier to read and maintain.
|
||||
> It can also improve performance, as you are reducing the overall
|
||||
> number of calls to PhpSpreadsheet methods: in the above example, the
|
||||
> `getProperties()` method is being called only once rather than 7 times
|
||||
> in the non-fluent version.
|
||||
530
vendor/phpoffice/phpspreadsheet/docs/topics/autofilters.md
vendored
Normal file
@@ -0,0 +1,530 @@
|
||||
# AutoFilter Reference
|
||||
|
||||
## Introduction
|
||||
|
||||
Each worksheet in an Excel Workbook can contain a single autoFilter
|
||||
range. Filtered data displays only the rows that meet criteria that you
|
||||
specify and hides rows that you do not want displayed. You can filter by
|
||||
more than one column: filters are additive, which means that each
|
||||
additional filter is based on the current filter and further reduces the
|
||||
subset of data.
|
||||
|
||||

|
||||
|
||||
When an AutoFilter is applied to a range of cells, the first row in an
|
||||
autofilter range will be the heading row, which displays the autoFilter
|
||||
dropdown icons. It is not part of the actual autoFiltered data. All
|
||||
subsequent rows are the autoFiltered data. So an AutoFilter range should
|
||||
always contain the heading row and one or more data rows (one data row
|
||||
is pretty meaningless), but PhpSpreadsheet won't actually stop you
|
||||
specifying a meaningless range: it's up to you as a developer to avoid
|
||||
such errors.
|
||||
|
||||
To determine if a filter is applied, note the icon in the column
|
||||
heading. A drop-down arrow
|
||||
() means
|
||||
that filtering is enabled but not applied. In MS Excel, when you hover
|
||||
over the heading of a column with filtering enabled but not applied, a
|
||||
screen tip displays the cell text for the first row in that column, and
|
||||
the message "(Showing All)".
|
||||
|
||||

|
||||
|
||||
A Filter button
|
||||
() means
|
||||
that a filter is applied. When you hover over the heading of a filtered
|
||||
column, a screen tip displays the filter that has been applied to that
|
||||
column, such as "Equals a red cell color" or "Larger than 150".
|
||||
|
||||

|
||||
|
||||
## Setting an AutoFilter area on a worksheet
|
||||
|
||||
To set an autoFilter on a range of cells.
|
||||
|
||||
``` php
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter('A1:E20');
|
||||
```
|
||||
|
||||
The first row in an autofilter range will be the heading row, which
|
||||
displays the autoFilter dropdown icons. It is not part of the actual
|
||||
autoFiltered data. All subsequent rows are the autoFiltered data. So an
|
||||
AutoFilter range should always contain the heading row and one or more
|
||||
data rows (one data row is pretty meaningless, but PhpSpreadsheet won't
|
||||
actually stop you specifying a meaningless range: it's up to you as a
|
||||
developer to avoid such errors.
|
||||
|
||||
If you want to set the whole worksheet as an autofilter region
|
||||
|
||||
``` php
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter(
|
||||
$spreadsheet->getActiveSheet()
|
||||
->calculateWorksheetDimension()
|
||||
);
|
||||
```
|
||||
|
||||
This enables filtering, but does not actually apply any filters.
|
||||
|
||||
## Autofilter Expressions
|
||||
|
||||
PHPEXcel 1.7.8 introduced the ability to actually create, read and write
|
||||
filter expressions; initially only for Xlsx files, but later releases
|
||||
will extend this to other formats.
|
||||
|
||||
To apply a filter expression to an autoFilter range, you first need to
|
||||
identify which column you're going to be applying this filter to.
|
||||
|
||||
``` php
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$columnFilter = $autoFilter->getColumn('C');
|
||||
```
|
||||
|
||||
This returns an autoFilter column object, and you can then apply filter
|
||||
expressions to that column.
|
||||
|
||||
There are a number of different types of autofilter expressions. The
|
||||
most commonly used are:
|
||||
|
||||
- Simple Filters
|
||||
- DateGroup Filters
|
||||
- Custom filters
|
||||
- Dynamic Filters
|
||||
- Top Ten Filters
|
||||
|
||||
These different types are mutually exclusive within any single column.
|
||||
You should not mix the different types of filter in the same column.
|
||||
PhpSpreadsheet will not actively prevent you from doing this, but the
|
||||
results are unpredictable.
|
||||
|
||||
Other filter expression types (such as cell colour filters) are not yet
|
||||
supported.
|
||||
|
||||
### Simple filters
|
||||
|
||||
In MS Excel, Simple Filters are a dropdown list of all values used in
|
||||
that column, and the user can select which ones they want to display and
|
||||
which ones they want to hide by ticking and unticking the checkboxes
|
||||
alongside each option. When the filter is applied, rows containing the
|
||||
checked entries will be displayed, rows that don't contain those values
|
||||
will be hidden.
|
||||
|
||||

|
||||
|
||||
To create a filter expression, we need to start by identifying the
|
||||
filter type. In this case, we're just going to specify that this filter
|
||||
is a standard filter.
|
||||
|
||||
``` php
|
||||
$columnFilter->setFilterType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_FILTER
|
||||
);
|
||||
```
|
||||
|
||||
Now we've identified the filter type, we can create a filter rule and
|
||||
set the filter values:
|
||||
|
||||
When creating a simple filter in PhpSpreadsheet, you only need to
|
||||
specify the values for "checked" columns: you do this by creating a
|
||||
filter rule for each value.
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'France'
|
||||
);
|
||||
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'Germany'
|
||||
);
|
||||
```
|
||||
|
||||
This creates two filter rules: the column will be filtered by values
|
||||
that match "France" OR "Germany". For Simple Filters, you can create as
|
||||
many rules as you want
|
||||
|
||||
Simple filters are always a comparison match of EQUALS, and multiple
|
||||
standard filters are always treated as being joined by an OR condition.
|
||||
|
||||
#### Matching Blanks
|
||||
|
||||
If you want to create a filter to select blank cells, you would use:
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
''
|
||||
);
|
||||
```
|
||||
|
||||
### DateGroup Filters
|
||||
|
||||
In MS Excel, DateGroup filters provide a series of dropdown filter
|
||||
selectors for date values, so you can specify entire years, or months
|
||||
within a year, or individual days within each month.
|
||||
|
||||

|
||||
|
||||
DateGroup filters are still applied as a Standard Filter type.
|
||||
|
||||
``` php
|
||||
$columnFilter->setFilterType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_FILTER
|
||||
);
|
||||
```
|
||||
|
||||
Creating a dateGroup filter in PhpSpreadsheet, you specify the values
|
||||
for "checked" columns as an associative array of year. month, day, hour
|
||||
minute and second. To select a year and month, you need to create a
|
||||
DateGroup rule identifying the selected year and month:
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
[
|
||||
'year' => 2012,
|
||||
'month' => 1
|
||||
]
|
||||
)
|
||||
->setRuleType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DATEGROUP
|
||||
);
|
||||
```
|
||||
|
||||
The key values for the associative array are:
|
||||
|
||||
- year
|
||||
- month
|
||||
- day
|
||||
- hour
|
||||
- minute
|
||||
- second
|
||||
|
||||
Like Standard filters, DateGroup filters are always a match of EQUALS,
|
||||
and multiple standard filters are always treated as being joined by an
|
||||
OR condition.
|
||||
|
||||
Note that we alse specify a ruleType: to differentiate this from a
|
||||
standard filter, we explicitly set the Rule's Type to
|
||||
AUTOFILTER\_RULETYPE\_DATEGROUP. As with standard filters, we can create
|
||||
any number of DateGroup Filters.
|
||||
|
||||
### Custom filters
|
||||
|
||||
In MS Excel, Custom filters allow us to select more complex conditions
|
||||
using an operator as well as a value. Typical examples might be values
|
||||
that fall within a range (e.g. between -20 and +20), or text values with
|
||||
wildcards (e.g. beginning with the letter U). To handle this, they
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Custom filters are limited to 2 rules, and these can be joined using
|
||||
either an AND or an OR.
|
||||
|
||||
We start by specifying a Filter type, this time a CUSTOMFILTER.
|
||||
|
||||
``` php
|
||||
$columnFilter->setFilterType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER
|
||||
);
|
||||
```
|
||||
|
||||
And then define our rules.
|
||||
|
||||
The following shows a simple wildcard filter to show all column entries
|
||||
beginning with the letter `U`.
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'U*'
|
||||
)
|
||||
->setRuleType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
|
||||
);
|
||||
```
|
||||
|
||||
MS Excel uses \* as a wildcard to match any number of characters, and ?
|
||||
as a wildcard to match a single character. 'U\*' equates to "begins with
|
||||
a 'U'"; '\*U' equates to "ends with a 'U'"; and '\*U\*' equates to
|
||||
"contains a 'U'"
|
||||
|
||||
If you want to match explicitly against a \* or a ? character, you can
|
||||
escape it with a tilde (\~), so ?\~\*\* would explicitly match for a \*
|
||||
character as the second character in the cell value, followed by any
|
||||
number of other characters. The only other character that needs escaping
|
||||
is the \~ itself.
|
||||
|
||||
To create a "between" condition, we need to define two rules:
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
|
||||
-20
|
||||
)
|
||||
->setRuleType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
|
||||
);
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,
|
||||
20
|
||||
)
|
||||
->setRuleType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
|
||||
);
|
||||
```
|
||||
|
||||
We also set the rule type to CUSTOMFILTER.
|
||||
|
||||
This defined two rules, filtering numbers that are `>= -20` OR `<=
|
||||
20`, so we also need to modify the join condition to reflect AND rather
|
||||
than OR.
|
||||
|
||||
``` php
|
||||
$columnFilter->setAndOr(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_COLUMN_ANDOR_AND
|
||||
);
|
||||
```
|
||||
|
||||
The valid set of operators for Custom Filters are defined in the
|
||||
`\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule` class, and
|
||||
comprise:
|
||||
|
||||
Operator Constant | Value
|
||||
------------------------------------------|----------------------
|
||||
AUTOFILTER_COLUMN_RULE_EQUAL | 'equal'
|
||||
AUTOFILTER_COLUMN_RULE_NOTEQUAL | 'notEqual'
|
||||
AUTOFILTER_COLUMN_RULE_GREATERTHAN | 'greaterThan'
|
||||
AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL | 'greaterThanOrEqual'
|
||||
AUTOFILTER_COLUMN_RULE_LESSTHAN | 'lessThan'
|
||||
AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL | 'lessThanOrEqual'
|
||||
|
||||
### Dynamic Filters
|
||||
|
||||
Dynamic Filters are based on a dynamic comparison condition, where the
|
||||
value we're comparing against the cell values is variable, such as
|
||||
'today'; or when we're testing against an aggregate of the cell data
|
||||
(e.g. 'aboveAverage'). Only a single dynamic filter can be applied to a
|
||||
column at a time.
|
||||
|
||||

|
||||
|
||||
Again, we start by specifying a Filter type, this time a DYNAMICFILTER.
|
||||
|
||||
``` php
|
||||
$columnFilter->setFilterType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER
|
||||
);
|
||||
```
|
||||
|
||||
When defining the rule for a dynamic filter, we don't define a value (we
|
||||
can simply set that to NULL) but we do specify the dynamic filter
|
||||
category.
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
NULL,
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE
|
||||
)
|
||||
->setRuleType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER
|
||||
);
|
||||
```
|
||||
|
||||
We also set the rule type to DYNAMICFILTER.
|
||||
|
||||
The valid set of dynamic filter categories is defined in the
|
||||
`\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule` class, and
|
||||
comprises:
|
||||
|
||||
Operator Constant | Value
|
||||
-----------------------------------------|----------------
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY | 'yesterday'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_TODAY | 'today'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW | 'tomorrow'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE | 'yearToDate'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR | 'thisYear'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER | 'thisQuarter'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH | 'thisMonth'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK | 'thisWeek'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR | 'lastYear'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER | 'lastQuarter'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH | 'lastMonth'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK | 'lastWeek'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR | 'nextYear'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER | 'nextQuarter'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH | 'nextMonth'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK | 'nextWeek'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1 | 'M1'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_JANUARY | 'M1'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2 | 'M2'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_FEBRUARY | 'M2'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3 | 'M3'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MARCH | 'M3'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4 | 'M4'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_APRIL | 'M4'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5 | 'M5'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MAY | 'M5'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6 | 'M6'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_JUNE | 'M6'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7 | 'M7'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_JULY | 'M7'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8 | 'M8'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_AUGUST | 'M8'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9 | 'M9'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_SEPTEMBER | 'M9'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10 | 'M10'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_OCTOBER | 'M10'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11 | 'M11'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_NOVEMBER | 'M11'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12 | 'M12'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_DECEMBER | 'M12'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_1 | 'Q1'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_2 | 'Q2'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_3 | 'Q3'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_4 | 'Q4'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE | 'aboveAverage'
|
||||
AUTOFILTER_RULETYPE_DYNAMIC_BELOWAVERAGE | 'belowAverage'
|
||||
|
||||
We can only apply a single Dynamic Filter rule to a column at a time.
|
||||
|
||||
### Top Ten Filters
|
||||
|
||||
Top Ten Filters are similar to Dynamic Filters in that they are based on
|
||||
a summarisation of the actual data values in the cells. However, unlike
|
||||
Dynamic Filters where you can only select a single option, Top Ten
|
||||
Filters allow you to select based on a number of criteria:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
You can identify whether you want the top (highest) or bottom (lowest)
|
||||
values.You can identify how many values you wish to select in the
|
||||
filterYou can identify whether this should be a percentage or a number
|
||||
of items.
|
||||
|
||||
Like Dynamic Filters, only a single Top Ten filter can be applied to a
|
||||
column at a time.
|
||||
|
||||
We start by specifying a Filter type, this time a DYNAMICFILTER.
|
||||
|
||||
``` php
|
||||
$columnFilter->setFilterType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_TOPTENFILTER
|
||||
);
|
||||
```
|
||||
|
||||
Then we create the rule:
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT,
|
||||
5,
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP
|
||||
)
|
||||
->setRuleType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_TOPTENFILTER
|
||||
);
|
||||
```
|
||||
|
||||
This will filter the Top 5 percent of values in the column.
|
||||
|
||||
To specify the lowest (bottom 2 values), we would specify a rule of:
|
||||
|
||||
``` php
|
||||
$columnFilter->createRule()
|
||||
->setRule(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE,
|
||||
5,
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM
|
||||
)
|
||||
->setRuleType(
|
||||
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_TOPTENFILTER
|
||||
);
|
||||
```
|
||||
|
||||
The option values for TopTen Filters top/bottom value/percent are all
|
||||
defined in the
|
||||
`\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule` class, and
|
||||
comprise:
|
||||
|
||||
Operator Constant | Value
|
||||
---------------------------------------|-------------
|
||||
AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE | 'byValue'
|
||||
AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT | 'byPercent'
|
||||
|
||||
and
|
||||
|
||||
Operator Constant | Value
|
||||
-------------------------------------|----------
|
||||
AUTOFILTER_COLUMN_RULE_TOPTEN_TOP | 'top'
|
||||
AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM | 'bottom'
|
||||
|
||||
## Executing an AutoFilter
|
||||
|
||||
When an autofilter is applied in MS Excel, it sets the row
|
||||
hidden/visible flags for each row of the autofilter area based on the
|
||||
selected criteria, so that only those rows that match the filter
|
||||
criteria are displayed.
|
||||
|
||||
PhpSpreadsheet will not execute the equivalent function automatically
|
||||
when you set or change a filter expression, but only when the file is
|
||||
saved.
|
||||
|
||||
### Applying the Filter
|
||||
|
||||
If you wish to execute your filter from within a script, you need to do
|
||||
this manually. You can do this using the autofilters `showHideRows()`
|
||||
method.
|
||||
|
||||
``` php
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$autoFilter->showHideRows();
|
||||
```
|
||||
|
||||
This will set all rows that match the filter criteria to visible, while
|
||||
hiding all other rows within the autofilter area.
|
||||
|
||||
### Displaying Filtered Rows
|
||||
|
||||
Simply looping through the rows in an autofilter area will still access
|
||||
ever row, whether it matches the filter criteria or not. To selectively
|
||||
access only the filtered rows, you need to test each row’s visibility
|
||||
settings.
|
||||
|
||||
``` php
|
||||
foreach ($spreadsheet->getActiveSheet()->getRowIterator() as $row) {
|
||||
if ($spreadsheet->getActiveSheet()
|
||||
->getRowDimension($row->getRowIndex())->getVisible()) {
|
||||
echo ' Row number - ' , $row->getRowIndex() , ' ';
|
||||
echo $spreadsheet->getActiveSheet()
|
||||
->getCell(
|
||||
'C'.$row->getRowIndex()
|
||||
)
|
||||
->getValue(), ' ';
|
||||
echo $spreadsheet->getActiveSheet()
|
||||
->getCell(
|
||||
'D'.$row->getRowIndex()
|
||||
)->getFormattedValue(), ' ';
|
||||
echo PHP_EOL;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## AutoFilter Sorting
|
||||
|
||||
In MS Excel, Autofiltering also allows the rows to be sorted. This
|
||||
feature is ***not*** supported by PhpSpreadsheet.
|
||||
2098
vendor/phpoffice/phpspreadsheet/docs/topics/calculation-engine.md
vendored
Normal file
59
vendor/phpoffice/phpspreadsheet/docs/topics/creating-spreadsheet.md
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
# Creating a spreadsheet
|
||||
|
||||
## The `Spreadsheet` class
|
||||
|
||||
The `Spreadsheet` class is the core of PhpSpreadsheet. It contains
|
||||
references to the contained worksheets, document security settings and
|
||||
document meta data.
|
||||
|
||||
To simplify the PhpSpreadsheet concept: the `Spreadsheet` class
|
||||
represents your workbook.
|
||||
|
||||
Typically, you will create a workbook in one of two ways, either by
|
||||
loading it from a spreadsheet file, or creating it manually. A third
|
||||
option, though less commonly used, is cloning an existing workbook that
|
||||
has been created using one of the previous two methods.
|
||||
|
||||
### Loading a Workbook from a file
|
||||
|
||||
Details of the different spreadsheet formats supported, and the options
|
||||
available to read them into a Spreadsheet object are described fully in
|
||||
the [Reading Files](./reading-files.md) document.
|
||||
|
||||
``` php
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
|
||||
/** Load $inputFileName to a Spreadsheet object **/
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
|
||||
```
|
||||
|
||||
### Creating a new workbook
|
||||
|
||||
If you want to create a new workbook, rather than load one from file,
|
||||
then you simply need to instantiate it as a new Spreadsheet object.
|
||||
|
||||
``` php
|
||||
/** Create a new Spreadsheet Object **/
|
||||
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
|
||||
```
|
||||
|
||||
A new workbook will always be created with a single worksheet.
|
||||
|
||||
## Clearing a Workbook from memory
|
||||
|
||||
The PhpSpreadsheet object contains cyclic references (e.g. the workbook
|
||||
is linked to the worksheets, and the worksheets are linked to their
|
||||
parent workbook) which cause problems when PHP tries to clear the
|
||||
objects from memory when they are `unset()`, or at the end of a function
|
||||
when they are in local scope. The result of this is "memory leaks",
|
||||
which can easily use a large amount of PHP's limited memory.
|
||||
|
||||
This can only be resolved manually: if you need to unset a workbook,
|
||||
then you also need to "break" these cyclic references before doing so.
|
||||
PhpSpreadsheet provides the `disconnectWorksheets()` method for this
|
||||
purpose.
|
||||
|
||||
``` php
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
unset($spreadsheet);
|
||||
```
|
||||
121
vendor/phpoffice/phpspreadsheet/docs/topics/file-formats.md
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
# File Formats
|
||||
|
||||
PhpSpreadsheet can read a number of different spreadsheet and file
|
||||
formats, although not all features are supported by all of the readers.
|
||||
Check the [features cross
|
||||
reference](../references/features-cross-reference.md) for a list that
|
||||
identifies which features are supported by which readers.
|
||||
|
||||
Currently, PhpSpreadsheet supports the following File Types for Reading:
|
||||
|
||||
### Xls
|
||||
|
||||
The Microsoft Excel™ Binary file format (BIFF5 and BIFF8) is a binary
|
||||
file format that was used by Microsoft Excel™ between versions 95 and 2003.
|
||||
The format is supported (to various extents) by most spreadsheet
|
||||
programs. BIFF files normally have an extension of .xls. Documentation
|
||||
describing the format can be [read online](https://msdn.microsoft.com/en-us/library/cc313154(v=office.12).aspx)
|
||||
or [downloaded as PDF](https://download.microsoft.com/download/2/4/8/24862317-78F0-4C4B-B355-C7B2C1D997DB/%5BMS-XLS%5D.pdf).
|
||||
|
||||
### Xml
|
||||
|
||||
Microsoft Excel™ 2003 included options for a file format called
|
||||
SpreadsheetML. This file is a zipped XML document. It is not very
|
||||
common, but its core features are supported. Documentation for the
|
||||
format can be [read online](https://msdn.microsoft.com/en-us/library/aa140066(office.10).aspx)
|
||||
though it’s sadly rather sparse in its detail.
|
||||
|
||||
### Xlsx
|
||||
|
||||
Microsoft Excel™ 2007 shipped with a new file format, namely Microsoft
|
||||
Office Open XML SpreadsheetML, and Excel 2010 extended this still
|
||||
further with its new features such as sparklines. These files typically
|
||||
have an extension of .xlsx. This format is based around a zipped
|
||||
collection of eXtensible Markup Language (XML) files. Microsoft Office
|
||||
Open XML SpreadsheetML is mostly standardized in [ECMA 376](https://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm)
|
||||
and ISO 29500.
|
||||
|
||||
### Ods
|
||||
|
||||
aka Open Document Format (ODF) or OASIS, this is the OpenOffice.org XML
|
||||
file format for spreadsheets. It comprises a zip archive including
|
||||
several components all of which are text files, most of these with
|
||||
markup in the eXtensible Markup Language (XML). It is the standard file
|
||||
format for OpenOffice.org Calc and StarCalc, and files typically have an
|
||||
extension of .ods. The published specification for the file format is
|
||||
available from [the OASIS Open Office XML Format Technical Committee web
|
||||
page](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office).
|
||||
Other information is available from [the OpenOffice.org XML File Format
|
||||
web page](https://www.openoffice.org/xml/), part of the
|
||||
OpenOffice.org project.
|
||||
|
||||
### Slk
|
||||
|
||||
This is the Microsoft Multiplan Symbolic Link Interchange (SYLK) file
|
||||
format. Multiplan was a predecessor to Microsoft Excel™. Files normally
|
||||
have an extension of .slk. While not common, there are still a few
|
||||
applications that generate SYLK files as a cross-platform option,
|
||||
because (despite being limited to a single worksheet) it is a simple
|
||||
format to implement, and supports some basic data and cell formatting
|
||||
options (unlike CSV files).
|
||||
|
||||
### Gnumeric
|
||||
|
||||
The [Gnumeric file format](https://help.gnome.org/users/gnumeric/stable/sect-file-formats.html.en#file-format-gnumeric)
|
||||
is used by the Gnome Gnumeric spreadsheet
|
||||
application, and typically files have an extension of `.gnumeric`. The
|
||||
file contents are stored using eXtensible Markup Language (XML) markup,
|
||||
and the file is then compressed using the GNU project's gzip compression
|
||||
library.
|
||||
|
||||
### Csv
|
||||
|
||||
Comma Separated Value (CSV) file format is a common structuring strategy
|
||||
for text format files. In CSV flies, each line in the file represents a
|
||||
row of data and (within each line of the file) the different data fields
|
||||
(or columns) are separated from one another using a comma (`,`). If a
|
||||
data field contains a comma, then it should be enclosed (typically in
|
||||
quotation marks (`"`). Sometimes tabs `\t`, or the pipe symbol (`|`), or a
|
||||
semi-colon (`;`) are used as separators instead of a comma, although
|
||||
other symbols can be used. Because CSV is a text-only format, it doesn't
|
||||
support any data formatting options.
|
||||
|
||||
"CSV" is not a single, well-defined format (although see RFC 4180 for
|
||||
one definition that is commonly used). Rather, in practice the term
|
||||
"CSV" refers to any file that:
|
||||
|
||||
- is plain text using a character set such as ASCII, Unicode, EBCDIC,
|
||||
or Shift JIS,
|
||||
- consists of records (typically one record per line),
|
||||
- with the records divided into fields separated by delimiters
|
||||
(typically a single reserved character such as comma, semicolon, or
|
||||
tab,
|
||||
- where every record has the same sequence of fields.
|
||||
|
||||
Within these general constraints, many variations are in use. Therefore
|
||||
"CSV" files are not entirely portable. Nevertheless, the variations are
|
||||
fairly small, and many implementations allow users to glance at the file
|
||||
(which is feasible because it is plain text), and then specify the
|
||||
delimiter character(s), quoting rules, etc.
|
||||
|
||||
**Warning:** Microsoft Excel™ will open .csv files, but depending on the
|
||||
system's regional settings, it may expect a semicolon as a separator
|
||||
instead of a comma, since in some languages the comma is used as the
|
||||
decimal separator. Also, many regional versions of Excel will not be
|
||||
able to deal with Unicode characters in a CSV file.
|
||||
|
||||
### Html
|
||||
|
||||
HyperText Markup Language (HTML) is the main markup language for
|
||||
creating web pages and other information that can be displayed in a web
|
||||
browser. Files typically have an extension of .html or .htm. HTML markup
|
||||
provides a means to create structured documents by denoting structural
|
||||
semantics for text such as headings, paragraphs, lists, links, quotes
|
||||
and other items. Since 1996, the HTML specifications have been
|
||||
maintained, with input from commercial software vendors, by the World
|
||||
Wide Web Consortium (W3C). However, in 2000, HTML also became an
|
||||
international standard (ISO/IEC 15445:2000). HTML 4.01 was published in
|
||||
late 1999, with further errata published through 2001. In 2004
|
||||
development began on HTML5 in the Web Hypertext Application Technology
|
||||
Working Group (WHATWG), which became a joint deliverable with the W3C in
|
||||
2008.
|
||||
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/01-01-autofilter.png
vendored
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/01-02-autofilter.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/01-03-filter-icon-1.png
vendored
Normal file
|
After Width: | Height: | Size: 453 B |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/01-03-filter-icon-2.png
vendored
Normal file
|
After Width: | Height: | Size: 640 B |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/01-04-autofilter.png
vendored
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/01-schematic.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/02-readers-writers.png
vendored
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/04-01-simple-autofilter.png
vendored
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/04-02-dategroup-autofilter.png
vendored
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/04-03-custom-autofilter-1.png
vendored
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/04-03-custom-autofilter-2.png
vendored
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/04-04-dynamic-autofilter.png
vendored
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/04-05-topten-autofilter-1.png
vendored
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/04-05-topten-autofilter-2.png
vendored
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/07-simple-example-1.png
vendored
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/07-simple-example-2.png
vendored
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/07-simple-example-3.png
vendored
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/07-simple-example-4.png
vendored
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/08-cell-comment.png
vendored
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/08-column-width.png
vendored
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/08-page-setup-margins.png
vendored
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/08-page-setup-scaling-options.png
vendored
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/08-styling-border-options.png
vendored
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/09-command-line-calculation.png
vendored
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/09-formula-in-cell-1.png
vendored
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
vendor/phpoffice/phpspreadsheet/docs/topics/images/09-formula-in-cell-2.png
vendored
Normal file
|
After Width: | Height: | Size: 33 KiB |
107
vendor/phpoffice/phpspreadsheet/docs/topics/memory_saving.md
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
# Memory saving
|
||||
|
||||
PhpSpreadsheet uses an average of about 1k per cell in your worksheets, so
|
||||
large workbooks can quickly use up available memory. Cell caching
|
||||
provides a mechanism that allows PhpSpreadsheet to maintain the cell
|
||||
objects in a smaller size of memory, or off-memory (eg: on disk, in APCu,
|
||||
memcache or redis). This allows you to reduce the memory usage for large
|
||||
workbooks, although at a cost of speed to access cell data.
|
||||
|
||||
By default, PhpSpreadsheet holds all cell objects in memory, but
|
||||
you can specify alternatives by providing your own
|
||||
[PSR-16](https://www.php-fig.org/psr/psr-16/) implementation. PhpSpreadsheet keys
|
||||
are automatically namespaced, and cleaned up after use, so a single cache
|
||||
instance may be shared across several usage of PhpSpreadsheet or even with other
|
||||
cache usages.
|
||||
|
||||
To enable cell caching, you must provide your own implementation of cache like so:
|
||||
|
||||
``` php
|
||||
$cache = new MyCustomPsr16Implementation();
|
||||
|
||||
\PhpOffice\PhpSpreadsheet\Settings::setCache($cache);
|
||||
```
|
||||
|
||||
A separate cache is maintained for each individual worksheet, and is
|
||||
automatically created when the worksheet is instantiated based on the
|
||||
settings that you have configured. You cannot change
|
||||
the configuration settings once you have started to read a workbook, or
|
||||
have created your first worksheet.
|
||||
|
||||
## Beware of TTL
|
||||
|
||||
As opposed to common cache concept, PhpSpreadsheet data cannot be re-generated
|
||||
from scratch. If some data is stored and later is not retrievable,
|
||||
PhpSpreadsheet will throw an exception.
|
||||
|
||||
That means that the data stored in cache **must not be deleted** by a
|
||||
third-party or via TTL mechanism.
|
||||
|
||||
So be sure that TTL is either de-activated or long enough to cover the entire
|
||||
usage of PhpSpreadsheet.
|
||||
|
||||
## Common use cases
|
||||
|
||||
PhpSpreadsheet does not ship with alternative cache implementation. It is up to
|
||||
you to select the most appropriate implementation for your environment. You
|
||||
can either implement [PSR-16](https://www.php-fig.org/psr/psr-16/) from scratch,
|
||||
or use [pre-existing libraries](https://packagist.org/search/?q=psr-16).
|
||||
|
||||
One such library is [PHP Cache](https://www.php-cache.com/) which
|
||||
provides a wide range of alternatives. Refers to their documentation for
|
||||
details, but here are a few suggestions that should get you started.
|
||||
|
||||
### APCu
|
||||
|
||||
Require the packages into your project:
|
||||
|
||||
```sh
|
||||
composer require cache/simple-cache-bridge cache/apcu-adapter
|
||||
```
|
||||
|
||||
Configure PhpSpreadsheet with something like:
|
||||
|
||||
```php
|
||||
$pool = new \Cache\Adapter\Apcu\ApcuCachePool();
|
||||
$simpleCache = new \Cache\Bridge\SimpleCache\SimpleCacheBridge($pool);
|
||||
|
||||
\PhpOffice\PhpSpreadsheet\Settings::setCache($simpleCache);
|
||||
```
|
||||
|
||||
### Redis
|
||||
|
||||
Require the packages into your project:
|
||||
|
||||
```sh
|
||||
composer require cache/simple-cache-bridge cache/redis-adapter
|
||||
```
|
||||
|
||||
Configure PhpSpreadsheet with something like:
|
||||
|
||||
```php
|
||||
$client = new \Redis();
|
||||
$client->connect('127.0.0.1', 6379);
|
||||
$pool = new \Cache\Adapter\Redis\RedisCachePool($client);
|
||||
$simpleCache = new \Cache\Bridge\SimpleCache\SimpleCacheBridge($pool);
|
||||
|
||||
\PhpOffice\PhpSpreadsheet\Settings::setCache($simpleCache);
|
||||
```
|
||||
|
||||
### Memcache
|
||||
|
||||
Require the packages into your project:
|
||||
|
||||
```sh
|
||||
composer require cache/simple-cache-bridge cache/memcache-adapter
|
||||
```
|
||||
|
||||
Configure PhpSpreadsheet with something like:
|
||||
|
||||
```php
|
||||
$client = new \Memcache();
|
||||
$client->connect('localhost', 11211);
|
||||
$pool = new \Cache\Adapter\Memcache\MemcacheCachePool($client);
|
||||
$simpleCache = new \Cache\Bridge\SimpleCache\SimpleCacheBridge($pool);
|
||||
|
||||
\PhpOffice\PhpSpreadsheet\Settings::setCache($simpleCache);
|
||||
```
|
||||
433
vendor/phpoffice/phpspreadsheet/docs/topics/migration-from-PHPExcel.md
vendored
Normal file
@@ -0,0 +1,433 @@
|
||||
# Migration from PHPExcel
|
||||
|
||||
PhpSpreadsheet introduced many breaking changes by introducing
|
||||
namespaces and renaming some classes. To help you migrate existing
|
||||
project, a tool was written to replace all references to PHPExcel
|
||||
classes to their new names. But there are also manual changes that
|
||||
need to be done.
|
||||
|
||||
## Automated tool
|
||||
|
||||
The tool is included in PhpSpreadsheet. It scans recursively all files
|
||||
and directories, starting from the current directory. Assuming it was
|
||||
installed with composer, it can be run like so:
|
||||
|
||||
``` sh
|
||||
cd /project/to/migrate/src
|
||||
php /project/to/migrate/vendor/phpoffice/phpspreadsheet/bin/migrate-from-phpexcel
|
||||
```
|
||||
|
||||
**Important** The tool will irreversibly modify your sources, be sure to
|
||||
backup everything, and double check the result before committing.
|
||||
|
||||
## Manual changes
|
||||
|
||||
In addition to automated changes, a few things need to be migrated manually.
|
||||
|
||||
### Renamed readers and writers
|
||||
|
||||
When using `IOFactory::createReader()`, `IOFactory::createWriter()` and
|
||||
`IOFactory::identify()`, the reader/writer short names are used. Those were
|
||||
changed, along as their corresponding class, to remove ambiguity:
|
||||
|
||||
Before | After
|
||||
-----------------|---------
|
||||
`'CSV'` | `'Csv'`
|
||||
`'Excel2003XML'` | `'Xml'`
|
||||
`'Excel2007'` | `'Xlsx'`
|
||||
`'Excel5'` | `'Xls'`
|
||||
`'Gnumeric'` | `'Gnumeric'`
|
||||
`'HTML'` | `'Html'`
|
||||
`'OOCalc'` | `'Ods'`
|
||||
`'OpenDocument'` | `'Ods'`
|
||||
`'PDF'` | `'Pdf'`
|
||||
`'SYLK'` | `'Slk'`
|
||||
|
||||
### Simplified IOFactory
|
||||
|
||||
The following methods :
|
||||
|
||||
- `PHPExcel_IOFactory::getSearchLocations()`
|
||||
- `PHPExcel_IOFactory::setSearchLocations()`
|
||||
- `PHPExcel_IOFactory::addSearchLocation()`
|
||||
|
||||
were replaced by `IOFactory::registerReader()` and `IOFactory::registerWriter()`. That means
|
||||
IOFactory now relies on classes autoloading.
|
||||
|
||||
Before:
|
||||
|
||||
```php
|
||||
\PHPExcel_IOFactory::addSearchLocation($type, $location, $classname);
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```php
|
||||
\PhpOffice\PhpSpreadsheet\IOFactory::registerReader($type, $classname);
|
||||
```
|
||||
|
||||
### Removed deprecated things
|
||||
|
||||
#### Worksheet::duplicateStyleArray()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$worksheet->duplicateStyleArray($styles, $range, $advanced);
|
||||
|
||||
// After
|
||||
$worksheet->getStyle($range)->applyFromArray($styles, $advanced);
|
||||
```
|
||||
|
||||
#### DataType::dataTypeForValue()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
DataType::dataTypeForValue($value);
|
||||
|
||||
// After
|
||||
DefaultValueBinder::dataTypeForValue($value);
|
||||
```
|
||||
|
||||
#### Conditional::getCondition()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$conditional->getCondition();
|
||||
|
||||
// After
|
||||
$conditional->getConditions()[0];
|
||||
```
|
||||
|
||||
#### Conditional::setCondition()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$conditional->setCondition($value);
|
||||
|
||||
// After
|
||||
$conditional->setConditions($value);
|
||||
```
|
||||
|
||||
#### Worksheet::getDefaultStyle()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$worksheet->getDefaultStyle();
|
||||
|
||||
// After
|
||||
$worksheet->getParent()->getDefaultStyle();
|
||||
```
|
||||
|
||||
#### Worksheet::setDefaultStyle()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$worksheet->setDefaultStyle($value);
|
||||
|
||||
// After
|
||||
$worksheet->getParent()->getDefaultStyle()->applyFromArray([
|
||||
'font' => [
|
||||
'name' => $pValue->getFont()->getName(),
|
||||
'size' => $pValue->getFont()->getSize(),
|
||||
],
|
||||
]);
|
||||
|
||||
```
|
||||
|
||||
#### Worksheet::setSharedStyle()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$worksheet->setSharedStyle($sharedStyle, $range);
|
||||
|
||||
// After
|
||||
$worksheet->duplicateStyle($sharedStyle, $range);
|
||||
```
|
||||
|
||||
#### Worksheet::getSelectedCell()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$worksheet->getSelectedCell();
|
||||
|
||||
// After
|
||||
$worksheet->getSelectedCells();
|
||||
```
|
||||
|
||||
#### Writer\Xls::setTempDir()
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$writer->setTempDir();
|
||||
|
||||
// After, there is no way to set temporary storage directory anymore
|
||||
```
|
||||
|
||||
### Autoloader
|
||||
|
||||
The class `PHPExcel_Autoloader` was removed entirely and is replaced by composer
|
||||
autoloading mechanism.
|
||||
|
||||
### Writing PDF
|
||||
|
||||
PDF libraries must be installed via composer. And the following methods were removed
|
||||
and are replaced by `IOFactory::registerWriter()` instead:
|
||||
|
||||
- `PHPExcel_Settings::getPdfRenderer()`
|
||||
- `PHPExcel_Settings::setPdfRenderer()`
|
||||
- `PHPExcel_Settings::getPdfRendererName()`
|
||||
- `PHPExcel_Settings::setPdfRendererName()`
|
||||
|
||||
Before:
|
||||
|
||||
```php
|
||||
\PHPExcel_Settings::setPdfRendererName(PHPExcel_Settings::PDF_RENDERER_MPDF);
|
||||
\PHPExcel_Settings::setPdfRenderer($somePath);
|
||||
$writer = \PHPExcel_IOFactory::createWriter($spreadsheet, 'PDF');
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```php
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');
|
||||
|
||||
// Or alternatively
|
||||
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class);
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Pdf');
|
||||
|
||||
// Or alternatively
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
|
||||
```
|
||||
|
||||
### Rendering charts
|
||||
|
||||
When rendering charts for HTML or PDF outputs, the process was also simplified. And while
|
||||
JpGraph support is still available, it is unfortunately not up to date for latest PHP versions
|
||||
and it will generate various warnings.
|
||||
|
||||
If you rely on this feature, please consider
|
||||
contributing either patches to JpGraph or another `IRenderer` implementation (a good
|
||||
candidate might be [CpChart](https://github.com/szymach/c-pchart)).
|
||||
|
||||
Before:
|
||||
|
||||
```php
|
||||
$rendererName = \PHPExcel_Settings::CHART_RENDERER_JPGRAPH;
|
||||
$rendererLibrary = 'jpgraph3.5.0b1/src/';
|
||||
$rendererLibraryPath = '/php/libraries/Charts/' . $rendererLibrary;
|
||||
|
||||
\PHPExcel_Settings::setChartRenderer($rendererName, $rendererLibraryPath);
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
Require the dependency via composer:
|
||||
|
||||
```sh
|
||||
composer require jpgraph/jpgraph
|
||||
```
|
||||
|
||||
And then:
|
||||
|
||||
```php
|
||||
Settings::setChartRenderer(\PhpOffice\PhpSpreadsheet\Chart\Renderer\JpGraph::class);
|
||||
```
|
||||
|
||||
### PclZip and ZipArchive
|
||||
|
||||
Support for PclZip were dropped in favor of the more complete and modern
|
||||
[PHP extension ZipArchive](https://php.net/manual/en/book.zip.php).
|
||||
So the following were removed:
|
||||
|
||||
- `PclZip`
|
||||
- `PHPExcel_Settings::setZipClass()`
|
||||
- `PHPExcel_Settings::getZipClass()`
|
||||
- `PHPExcel_Shared_ZipArchive`
|
||||
- `PHPExcel_Shared_ZipStreamWrapper`
|
||||
|
||||
### Cell caching
|
||||
|
||||
Cell caching was heavily refactored to leverage
|
||||
[PSR-16](https://www.php-fig.org/psr/psr-16/). That means most classes
|
||||
related to that feature were removed:
|
||||
|
||||
- `PHPExcel_CachedObjectStorage_APC`
|
||||
- `PHPExcel_CachedObjectStorage_DiscISAM`
|
||||
- `PHPExcel_CachedObjectStorage_ICache`
|
||||
- `PHPExcel_CachedObjectStorage_Igbinary`
|
||||
- `PHPExcel_CachedObjectStorage_Memcache`
|
||||
- `PHPExcel_CachedObjectStorage_Memory`
|
||||
- `PHPExcel_CachedObjectStorage_MemoryGZip`
|
||||
- `PHPExcel_CachedObjectStorage_MemorySerialized`
|
||||
- `PHPExcel_CachedObjectStorage_PHPTemp`
|
||||
- `PHPExcel_CachedObjectStorage_SQLite`
|
||||
- `PHPExcel_CachedObjectStorage_SQLite3`
|
||||
- `PHPExcel_CachedObjectStorage_Wincache`
|
||||
|
||||
In addition to that, `\PhpOffice\PhpSpreadsheet::getCellCollection()` was renamed
|
||||
to `\PhpOffice\PhpSpreadsheet::getCoordinates()` and
|
||||
`\PhpOffice\PhpSpreadsheet::getCellCacheController()` to
|
||||
`\PhpOffice\PhpSpreadsheet::getCellCollection()` for clarity.
|
||||
|
||||
Refer to [the new documentation](./memory_saving.md) to see how to migrate.
|
||||
|
||||
### Dropped conditionally returned cell
|
||||
|
||||
For all the following methods, it is no more possible to change the type of
|
||||
returned value. It always return the Worksheet and never the Cell or Rule:
|
||||
|
||||
- Worksheet::setCellValue()
|
||||
- Worksheet::setCellValueByColumnAndRow()
|
||||
- Worksheet::setCellValueExplicit()
|
||||
- Worksheet::setCellValueExplicitByColumnAndRow()
|
||||
- Worksheet::addRule()
|
||||
|
||||
Migration would be similar to:
|
||||
|
||||
``` php
|
||||
// Before
|
||||
$cell = $worksheet->setCellValue('A1', 'value', true);
|
||||
|
||||
// After
|
||||
$cell = $worksheet->getCell('A1')->setValue('value');
|
||||
```
|
||||
|
||||
### Standardized keys for styling
|
||||
|
||||
Array keys used for styling have been standardized for a more coherent experience.
|
||||
It now uses the same wording and casing as the getter and setter:
|
||||
|
||||
```php
|
||||
// Before
|
||||
$style = [
|
||||
'numberformat' => [
|
||||
'code' => NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE,
|
||||
],
|
||||
'font' => [
|
||||
'strike' => true,
|
||||
'superScript' => true,
|
||||
'subScript' => true,
|
||||
],
|
||||
'alignment' => [
|
||||
'rotation' => 90,
|
||||
'readorder' => Alignment::READORDER_RTL,
|
||||
'wrap' => true,
|
||||
],
|
||||
'borders' => [
|
||||
'diagonaldirection' => Borders::DIAGONAL_BOTH,
|
||||
'allborders' => [
|
||||
'style' => Border::BORDER_THIN,
|
||||
],
|
||||
],
|
||||
'fill' => [
|
||||
'type' => Fill::FILL_GRADIENT_LINEAR,
|
||||
'startcolor' => [
|
||||
'argb' => 'FFA0A0A0',
|
||||
],
|
||||
'endcolor' => [
|
||||
'argb' => 'FFFFFFFF',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// After
|
||||
$style = [
|
||||
'numberFormat' => [
|
||||
'formatCode' => NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE,
|
||||
],
|
||||
'font' => [
|
||||
'strikethrough' => true,
|
||||
'superscript' => true,
|
||||
'subscript' => true,
|
||||
],
|
||||
'alignment' => [
|
||||
'textRotation' => 90,
|
||||
'readOrder' => Alignment::READORDER_RTL,
|
||||
'wrapText' => true,
|
||||
],
|
||||
'borders' => [
|
||||
'diagonalDirection' => Borders::DIAGONAL_BOTH,
|
||||
'allBorders' => [
|
||||
'borderStyle' => Border::BORDER_THIN,
|
||||
],
|
||||
],
|
||||
'fill' => [
|
||||
'fillType' => Fill::FILL_GRADIENT_LINEAR,
|
||||
'startColor' => [
|
||||
'argb' => 'FFA0A0A0',
|
||||
],
|
||||
'endColor' => [
|
||||
'argb' => 'FFFFFFFF',
|
||||
],
|
||||
],
|
||||
];
|
||||
```
|
||||
|
||||
### Dedicated class to manipulate coordinates
|
||||
|
||||
Methods to manipulate coordinates that used to exists in `PHPExcel_Cell` were extracted
|
||||
to a dedicated new class `\PhpOffice\PhpSpreadsheet\Cell\Coordinate`. The methods are:
|
||||
|
||||
- `absoluteCoordinate()`
|
||||
- `absoluteReference()`
|
||||
- `buildRange()`
|
||||
- `columnIndexFromString()`
|
||||
- `coordinateFromString()`
|
||||
- `extractAllCellReferencesInRange()`
|
||||
- `getRangeBoundaries()`
|
||||
- `mergeRangesInCollection()`
|
||||
- `rangeBoundaries()`
|
||||
- `rangeDimension()`
|
||||
- `splitRange()`
|
||||
- `stringFromColumnIndex()`
|
||||
|
||||
### Column index based on 1
|
||||
|
||||
Column indexes are now based on 1. So column `A` is the index `1`. This is consistent
|
||||
with rows starting at 1 and Excel function `COLUMN()` that returns `1` for column `A`.
|
||||
So the code must be adapted with something like:
|
||||
|
||||
```php
|
||||
// Before
|
||||
$cell = $worksheet->getCellByColumnAndRow($column, $row);
|
||||
|
||||
for ($column = 0; $column < $max; $column++) {
|
||||
$worksheet->setCellValueByColumnAndRow($column, $row, 'value ' . $column);
|
||||
}
|
||||
|
||||
// After
|
||||
$cell = $worksheet->getCellByColumnAndRow($column + 1, $row);
|
||||
|
||||
for ($column = 1; $column <= $max; $column++) {
|
||||
$worksheet->setCellValueByColumnAndRow($column, $row, 'value ' . $column);
|
||||
}
|
||||
```
|
||||
|
||||
All the following methods are affected:
|
||||
|
||||
- `PHPExcel_Worksheet::cellExistsByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::freezePaneByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::getCellByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::getColumnDimensionByColumn()`
|
||||
- `PHPExcel_Worksheet::getCommentByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::getStyleByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::insertNewColumnBeforeByIndex()`
|
||||
- `PHPExcel_Worksheet::mergeCellsByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::protectCellsByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::removeColumnByIndex()`
|
||||
- `PHPExcel_Worksheet::setAutoFilterByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::setBreakByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::setCellValueByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::setCellValueExplicitByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::setSelectedCellByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::stringFromColumnIndex()`
|
||||
- `PHPExcel_Worksheet::unmergeCellsByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet::unprotectCellsByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet_PageSetup::addPrintAreaByColumnAndRow()`
|
||||
- `PHPExcel_Worksheet_PageSetup::setPrintAreaByColumnAndRow()`
|
||||
|
||||
### Removed default values
|
||||
|
||||
Default values for many methods were removed when it did not make sense. Typically,
|
||||
setter methods should not have default values. For a complete list of methods and
|
||||
their original default values, see [that commit](https://github.com/PHPOffice/PhpSpreadsheet/commit/033a4bdad56340795a5bf7ec3c8a2fde005cda24).
|
||||
928
vendor/phpoffice/phpspreadsheet/docs/topics/reading-and-writing-to-file.md
vendored
Normal file
@@ -0,0 +1,928 @@
|
||||
# Reading and writing to file
|
||||
|
||||
As you already know from the [architecture](./architecture.md#readers-and-writers),
|
||||
reading and writing to a
|
||||
persisted storage is not possible using the base PhpSpreadsheet classes.
|
||||
For this purpose, PhpSpreadsheet provides readers and writers, which are
|
||||
implementations of `\PhpOffice\PhpSpreadsheet\Reader\IReader` and
|
||||
`\PhpOffice\PhpSpreadsheet\Writer\IWriter`.
|
||||
|
||||
## \PhpOffice\PhpSpreadsheet\IOFactory
|
||||
|
||||
The PhpSpreadsheet API offers multiple methods to create a
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReader` or
|
||||
`\PhpOffice\PhpSpreadsheet\Writer\IWriter` instance:
|
||||
|
||||
Direct creation via `\PhpOffice\PhpSpreadsheet\IOFactory`. All examples
|
||||
underneath demonstrate the direct creation method. Note that you can
|
||||
also use the `\PhpOffice\PhpSpreadsheet\IOFactory` class to do this.
|
||||
|
||||
### Creating `\PhpOffice\PhpSpreadsheet\Reader\IReader` using `\PhpOffice\PhpSpreadsheet\IOFactory`
|
||||
|
||||
There are 2 methods for reading in a file into PhpSpreadsheet: using
|
||||
automatic file type resolving or explicitly.
|
||||
|
||||
Automatic file type resolving checks the different
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReader` distributed with
|
||||
PhpSpreadsheet. If one of them can load the specified file name, the
|
||||
file is loaded using that `\PhpOffice\PhpSpreadsheet\Reader\IReader`.
|
||||
Explicit mode requires you to specify which
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReader` should be used.
|
||||
|
||||
You can create a `\PhpOffice\PhpSpreadsheet\Reader\IReader` instance using
|
||||
`\PhpOffice\PhpSpreadsheet\IOFactory` in automatic file type resolving
|
||||
mode using the following code sample:
|
||||
|
||||
``` php
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
A typical use of this feature is when you need to read files uploaded by
|
||||
your users, and you don’t know whether they are uploading xls or xlsx
|
||||
files.
|
||||
|
||||
If you need to set some properties on the reader, (e.g. to only read
|
||||
data, see more about this later), then you may instead want to use this
|
||||
variant:
|
||||
|
||||
``` php
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile("05featuredemo.xlsx");
|
||||
$reader->setReadDataOnly(true);
|
||||
$reader->load("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
You can create a `\PhpOffice\PhpSpreadsheet\Reader\IReader` instance using
|
||||
`\PhpOffice\PhpSpreadsheet\IOFactory` in explicit mode using the following
|
||||
code sample:
|
||||
|
||||
``` php
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
|
||||
$spreadsheet = $reader->load("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
Note that automatic type resolving mode is slightly slower than explicit
|
||||
mode.
|
||||
|
||||
### Creating `\PhpOffice\PhpSpreadsheet\Writer\IWriter` using `\PhpOffice\PhpSpreadsheet\IOFactory`
|
||||
|
||||
You can create a `\PhpOffice\PhpSpreadsheet\Writer\IWriter` instance using
|
||||
`\PhpOffice\PhpSpreadsheet\IOFactory`:
|
||||
|
||||
``` php
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, "Xlsx");
|
||||
$writer->save("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
## Excel 2007 (SpreadsheetML) file format
|
||||
|
||||
Xlsx file format is the main file format of PhpSpreadsheet. It allows
|
||||
outputting the in-memory spreadsheet to a .xlsx file.
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Xlsx
|
||||
|
||||
#### Reading a spreadsheet
|
||||
|
||||
You can read an .xlsx file using the following code:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
||||
$spreadsheet = $reader->load("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
#### Read data only
|
||||
|
||||
You can set the option setReadDataOnly on the reader, to instruct the
|
||||
reader to ignore styling, data validation, … and just read cell data:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
||||
$reader->setReadDataOnly(true);
|
||||
$spreadsheet = $reader->load("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
#### Read specific sheets only
|
||||
|
||||
You can set the option setLoadSheetsOnly on the reader, to instruct the
|
||||
reader to only load the sheets with a given name:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
||||
$reader->setLoadSheetsOnly(["Sheet 1", "My special sheet"]);
|
||||
$spreadsheet = $reader->load("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
#### Read specific cells only
|
||||
|
||||
You can set the option setReadFilter on the reader, to instruct the
|
||||
reader to only load the cells which match a given rule. A read filter
|
||||
can be any class which implements
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReadFilter`. By default, all cells are
|
||||
read using the `\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter`.
|
||||
|
||||
The following code will only read row 1 and rows 20 – 30 of any sheet in
|
||||
the Excel file:
|
||||
|
||||
``` php
|
||||
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
|
||||
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Read title row and rows 20 - 30
|
||||
if ($row == 1 || ($row >= 20 && $row <= 30)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
||||
$reader->setReadFilter( new MyReadFilter() );
|
||||
$spreadsheet = $reader->load("06largescale.xlsx");
|
||||
```
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Writer\Xlsx
|
||||
|
||||
#### Writing a spreadsheet
|
||||
|
||||
You can write an .xlsx file using the following code:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
|
||||
$writer->save("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
#### Formula pre-calculation
|
||||
|
||||
By default, this writer pre-calculates all formulas in the spreadsheet.
|
||||
This can be slow on large spreadsheets, and maybe even unwanted. You can
|
||||
however disable formula pre-calculation:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
|
||||
$writer->setPreCalculateFormulas(false);
|
||||
$writer->save("05featuredemo.xlsx");
|
||||
```
|
||||
|
||||
#### Office 2003 compatibility pack
|
||||
|
||||
Because of a bug in the Office2003 compatibility pack, there can be some
|
||||
small issues when opening Xlsx spreadsheets (mostly related to formula
|
||||
calculation). You can enable Office2003 compatibility with the following
|
||||
code:
|
||||
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
|
||||
$writer->setOffice2003Compatibility(true);
|
||||
$writer->save("05featuredemo.xlsx");
|
||||
|
||||
**Office2003 compatibility option should only be used when needed** because
|
||||
it disables several Office2007 file format options, resulting in a
|
||||
lower-featured Office2007 spreadsheet.
|
||||
|
||||
## Excel 5 (BIFF) file format
|
||||
|
||||
Xls file format is the old Excel file format, implemented in
|
||||
PhpSpreadsheet to provide a uniform manner to create both .xlsx and .xls
|
||||
files. It is basically a modified version of [PEAR
|
||||
Spreadsheet\_Excel\_Writer](https://pear.php.net/package/Spreadsheet_Excel_Writer),
|
||||
although it has been extended and has fewer limitations and more
|
||||
features than the old PEAR library. This can read all BIFF versions that
|
||||
use OLE2: BIFF5 (introduced with office 95) through BIFF8, but cannot
|
||||
read earlier versions.
|
||||
|
||||
Xls file format will not be developed any further, it just provides an
|
||||
additional file format for PhpSpreadsheet.
|
||||
|
||||
**Excel5 (BIFF) limitations** Please note that BIFF file format has some
|
||||
limits regarding to styling cells and handling large spreadsheets via
|
||||
PHP.
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Xls
|
||||
|
||||
#### Reading a spreadsheet
|
||||
|
||||
You can read an .xls file using the following code:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
|
||||
$spreadsheet = $reader->load("05featuredemo.xls");
|
||||
```
|
||||
|
||||
#### Read data only
|
||||
|
||||
You can set the option setReadDataOnly on the reader, to instruct the
|
||||
reader to ignore styling, data validation, … and just read cell data:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
|
||||
$reader->setReadDataOnly(true);
|
||||
$spreadsheet = $reader->load("05featuredemo.xls");
|
||||
```
|
||||
|
||||
#### Read specific sheets only
|
||||
|
||||
You can set the option setLoadSheetsOnly on the reader, to instruct the
|
||||
reader to only load the sheets with a given name:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
|
||||
$reader->setLoadSheetsOnly(["Sheet 1", "My special sheet"]);
|
||||
$spreadsheet = $reader->load("05featuredemo.xls");
|
||||
```
|
||||
|
||||
#### Read specific cells only
|
||||
|
||||
You can set the option setReadFilter on the reader, to instruct the
|
||||
reader to only load the cells which match a given rule. A read filter
|
||||
can be any class which implements
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReadFilter`. By default, all cells are
|
||||
read using the `\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter`.
|
||||
|
||||
The following code will only read row 1 and rows 20 to 30 of any sheet
|
||||
in the Excel file:
|
||||
|
||||
``` php
|
||||
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
|
||||
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Read title row and rows 20 - 30
|
||||
if ($row == 1 || ($row >= 20 && $row <= 30)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
|
||||
$reader->setReadFilter( new MyReadFilter() );
|
||||
$spreadsheet = $reader->load("06largescale.xls");
|
||||
```
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Writer\Xls
|
||||
|
||||
#### Writing a spreadsheet
|
||||
|
||||
You can write an .xls file using the following code:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls($spreadsheet);
|
||||
$writer->save("05featuredemo.xls");
|
||||
```
|
||||
|
||||
## Excel 2003 XML file format
|
||||
|
||||
Excel 2003 XML file format is a file format which can be used in older
|
||||
versions of Microsoft Excel.
|
||||
|
||||
**Excel 2003 XML limitations** Please note that Excel 2003 XML format
|
||||
has some limits regarding to styling cells and handling large
|
||||
spreadsheets via PHP.
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Xml
|
||||
|
||||
#### Reading a spreadsheet
|
||||
|
||||
You can read an Excel 2003 .xml file using the following code:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
|
||||
$spreadsheet = $reader->load("05featuredemo.xml");
|
||||
```
|
||||
|
||||
#### Read specific cells only
|
||||
|
||||
You can set the option setReadFilter on the reader, to instruct the
|
||||
reader to only load the cells which match a given rule. A read filter
|
||||
can be any class which implements
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReadFilter`. By default, all cells are
|
||||
read using the `\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter`.
|
||||
|
||||
The following code will only read row 1 and rows 20 to 30 of any sheet
|
||||
in the Excel file:
|
||||
|
||||
``` php
|
||||
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
|
||||
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Read title row and rows 20 - 30
|
||||
if ($row == 1 || ($row >= 20 && $row <= 30)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
|
||||
$reader->setReadFilter( new MyReadFilter() );
|
||||
$spreadsheet = $reader->load("06largescale.xml");
|
||||
```
|
||||
|
||||
## Symbolic LinK (SYLK)
|
||||
|
||||
Symbolic Link (SYLK) is a Microsoft file format typically used to
|
||||
exchange data between applications, specifically spreadsheets. SYLK
|
||||
files conventionally have a .slk suffix. Composed of only displayable
|
||||
ANSI characters, it can be easily created and processed by other
|
||||
applications, such as databases.
|
||||
|
||||
**SYLK limitations** Please note that SYLK file format has some limits
|
||||
regarding to styling cells and handling large spreadsheets via PHP.
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Slk
|
||||
|
||||
#### Reading a spreadsheet
|
||||
|
||||
You can read an .slk file using the following code:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
|
||||
$spreadsheet = $reader->load("05featuredemo.slk");
|
||||
```
|
||||
|
||||
#### Read specific cells only
|
||||
|
||||
You can set the option setReadFilter on the reader, to instruct the
|
||||
reader to only load the cells which match a given rule. A read filter
|
||||
can be any class which implements
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReadFilter`. By default, all cells are
|
||||
read using the `\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter`.
|
||||
|
||||
The following code will only read row 1 and rows 20 to 30 of any sheet
|
||||
in the SYLK file:
|
||||
|
||||
``` php
|
||||
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
|
||||
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Read title row and rows 20 - 30
|
||||
if ($row == 1 || ($row >= 20 && $row <= 30)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
|
||||
$reader->setReadFilter( new MyReadFilter() );
|
||||
$spreadsheet = $reader->load("06largescale.slk");
|
||||
```
|
||||
|
||||
## Open/Libre Office (.ods)
|
||||
|
||||
Open Office or Libre Office .ods files are the standard file format for
|
||||
Open Office or Libre Office Calc files.
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Ods
|
||||
|
||||
#### Reading a spreadsheet
|
||||
|
||||
You can read an .ods file using the following code:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
|
||||
$spreadsheet = $reader->load("05featuredemo.ods");
|
||||
```
|
||||
|
||||
#### Read specific cells only
|
||||
|
||||
You can set the option setReadFilter on the reader, to instruct the
|
||||
reader to only load the cells which match a given rule. A read filter
|
||||
can be any class which implements
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReadFilter`. By default, all cells are
|
||||
read using the `\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter`.
|
||||
|
||||
The following code will only read row 1 and rows 20 to 30 of any sheet
|
||||
in the Calc file:
|
||||
|
||||
``` php
|
||||
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
|
||||
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Read title row and rows 20 - 30
|
||||
if ($row == 1 || ($row >= 20 && $row <= 30)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$reader = new PhpOffice\PhpSpreadsheet\Reader\Ods();
|
||||
$reader->setReadFilter( new MyReadFilter() );
|
||||
$spreadsheet = $reader->load("06largescale.ods");
|
||||
```
|
||||
|
||||
## CSV (Comma Separated Values)
|
||||
|
||||
CSV (Comma Separated Values) are often used as an import/export file
|
||||
format with other systems. PhpSpreadsheet allows reading and writing to
|
||||
CSV files.
|
||||
|
||||
**CSV limitations** Please note that CSV file format has some limits
|
||||
regarding to styling cells, number formatting, ...
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Csv
|
||||
|
||||
#### Reading a CSV file
|
||||
|
||||
You can read a .csv file using the following code:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
|
||||
$spreadsheet = $reader->load("sample.csv");
|
||||
```
|
||||
|
||||
#### Setting CSV options
|
||||
|
||||
Often, CSV files are not really "comma separated", or use semicolon (`;`)
|
||||
as a separator. You can instruct
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\Csv` some options before reading a CSV
|
||||
file.
|
||||
|
||||
The separator will be auto-detected, so in most cases it should not be necessary
|
||||
to specify it. But in cases where auto-detection does not fit the use-case, then
|
||||
it can be set manually.
|
||||
|
||||
Note that `\PhpOffice\PhpSpreadsheet\Reader\Csv` by default assumes that
|
||||
the loaded CSV file is UTF-8 encoded. If you are reading CSV files that
|
||||
were created in Microsoft Office Excel the correct input encoding may
|
||||
rather be Windows-1252 (CP1252). Always make sure that the input
|
||||
encoding is set appropriately.
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
|
||||
$reader->setInputEncoding('CP1252');
|
||||
$reader->setDelimiter(';');
|
||||
$reader->setEnclosure('');
|
||||
$reader->setSheetIndex(0);
|
||||
|
||||
$spreadsheet = $reader->load("sample.csv");
|
||||
```
|
||||
|
||||
#### Read a specific worksheet
|
||||
|
||||
CSV files can only contain one worksheet. Therefore, you can specify
|
||||
which sheet to read from CSV:
|
||||
|
||||
``` php
|
||||
$reader->setSheetIndex(0);
|
||||
```
|
||||
|
||||
#### Read into existing spreadsheet
|
||||
|
||||
When working with CSV files, it might occur that you want to import CSV
|
||||
data into an existing `Spreadsheet` object. The following code loads a
|
||||
CSV file into an existing `$spreadsheet` containing some sheets, and
|
||||
imports onto the 6th sheet:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
|
||||
$reader->setDelimiter(';');
|
||||
$reader->setEnclosure('');
|
||||
$reader->setSheetIndex(5);
|
||||
|
||||
$reader->loadIntoExisting("05featuredemo.csv", $spreadsheet);
|
||||
```
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Writer\Csv
|
||||
|
||||
#### Writing a CSV file
|
||||
|
||||
You can write a .csv file using the following code:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
|
||||
$writer->save("05featuredemo.csv");
|
||||
```
|
||||
|
||||
#### Setting CSV options
|
||||
|
||||
Often, CSV files are not really "comma separated", or use semicolon (`;`)
|
||||
as a separator. You can instruct
|
||||
`\PhpOffice\PhpSpreadsheet\Writer\Csv` some options before writing a CSV
|
||||
file:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
|
||||
$writer->setDelimiter(';');
|
||||
$writer->setEnclosure('');
|
||||
$writer->setLineEnding("\r\n");
|
||||
$writer->setSheetIndex(0);
|
||||
|
||||
$writer->save("05featuredemo.csv");
|
||||
```
|
||||
|
||||
#### Write a specific worksheet
|
||||
|
||||
CSV files can only contain one worksheet. Therefore, you can specify
|
||||
which sheet to write to CSV:
|
||||
|
||||
``` php
|
||||
$writer->setSheetIndex(0);
|
||||
```
|
||||
|
||||
#### Formula pre-calculation
|
||||
|
||||
By default, this writer pre-calculates all formulas in the spreadsheet.
|
||||
This can be slow on large spreadsheets, and maybe even unwanted. You can
|
||||
however disable formula pre-calculation:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
|
||||
$writer->setPreCalculateFormulas(false);
|
||||
$writer->save("05featuredemo.csv");
|
||||
```
|
||||
|
||||
#### Writing UTF-8 CSV files
|
||||
|
||||
A CSV file can be marked as UTF-8 by writing a BOM file header. This can
|
||||
be enabled by using the following code:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
|
||||
$writer->setUseBOM(true);
|
||||
$writer->save("05featuredemo.csv");
|
||||
```
|
||||
|
||||
#### Decimal and thousands separators
|
||||
|
||||
If the worksheet you are exporting contains numbers with decimal or
|
||||
thousands separators then you should think about what characters you
|
||||
want to use for those before doing the export.
|
||||
|
||||
By default PhpSpreadsheet looks up in the server's locale settings to
|
||||
decide what characters to use. But to avoid problems it is recommended
|
||||
to set the characters explicitly as shown below.
|
||||
|
||||
English users will want to use this before doing the export:
|
||||
|
||||
``` php
|
||||
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setDecimalSeparator('.');
|
||||
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setThousandsSeparator(',');
|
||||
```
|
||||
|
||||
German users will want to use the opposite values.
|
||||
|
||||
``` php
|
||||
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setDecimalSeparator(',');
|
||||
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setThousandsSeparator('.');
|
||||
```
|
||||
|
||||
Note that the above code sets decimal and thousand separators as global
|
||||
options. This also affects how HTML and PDF is exported.
|
||||
|
||||
## HTML
|
||||
|
||||
PhpSpreadsheet allows you to read or write a spreadsheet as HTML format,
|
||||
for quick representation of the data in it to anyone who does not have a
|
||||
spreadsheet application on their PC, or loading files saved by other
|
||||
scripts that simply create HTML markup and give it a .xls file
|
||||
extension.
|
||||
|
||||
**HTML limitations** Please note that HTML file format has some limits
|
||||
regarding to styling cells, number formatting, ...
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Html
|
||||
|
||||
#### Reading a spreadsheet
|
||||
|
||||
You can read an .html or .htm file using the following code:
|
||||
|
||||
``` php
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
|
||||
|
||||
$spreadsheet = $reader->load("05featuredemo.html");
|
||||
```
|
||||
|
||||
**HTML limitations** Please note that HTML reader is still experimental
|
||||
and does not yet support merged cells or nested tables cleanly
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Writer\Html
|
||||
|
||||
Please note that `\PhpOffice\PhpSpreadsheet\Writer\Html` only outputs the
|
||||
first worksheet by default.
|
||||
|
||||
#### Writing a spreadsheet
|
||||
|
||||
You can write a .htm file using the following code:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
|
||||
|
||||
$writer->save("05featuredemo.htm");
|
||||
```
|
||||
|
||||
#### Write all worksheets
|
||||
|
||||
HTML files can contain one or more worksheets. If you want to write all
|
||||
sheets into a single HTML file, use the following code:
|
||||
|
||||
``` php
|
||||
$writer->writeAllSheets();
|
||||
```
|
||||
|
||||
#### Write a specific worksheet
|
||||
|
||||
HTML files can contain one or more worksheets. Therefore, you can
|
||||
specify which sheet to write to HTML:
|
||||
|
||||
``` php
|
||||
$writer->setSheetIndex(0);
|
||||
```
|
||||
|
||||
#### Setting the images root of the HTML file
|
||||
|
||||
There might be situations where you want to explicitly set the included
|
||||
images root. For example, instead of:
|
||||
|
||||
``` html
|
||||
<img src="./images/logo.jpg">
|
||||
```
|
||||
|
||||
You might want to see:
|
||||
|
||||
``` html
|
||||
<img src="http://www.domain.com/images/logo.jpg">
|
||||
```
|
||||
|
||||
You can use the following code to achieve this result:
|
||||
|
||||
``` php
|
||||
$writer->setImagesRoot('http://www.example.com');
|
||||
```
|
||||
|
||||
#### Formula pre-calculation
|
||||
|
||||
By default, this writer pre-calculates all formulas in the spreadsheet.
|
||||
This can be slow on large spreadsheets, and maybe even unwanted. You can
|
||||
however disable formula pre-calculation:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
|
||||
$writer->setPreCalculateFormulas(false);
|
||||
|
||||
$writer->save("05featuredemo.htm");
|
||||
```
|
||||
|
||||
#### Embedding generated HTML in a web page
|
||||
|
||||
There might be a situation where you want to embed the generated HTML in
|
||||
an existing website. \PhpOffice\PhpSpreadsheet\Writer\Html provides
|
||||
support to generate only specific parts of the HTML code, which allows
|
||||
you to use these parts in your website.
|
||||
|
||||
Supported methods:
|
||||
|
||||
- `generateHTMLHeader()`
|
||||
- `generateStyles()`
|
||||
- `generateSheetData()`
|
||||
- `generateHTMLFooter()`
|
||||
|
||||
Here's an example which retrieves all parts independently and merges
|
||||
them into a resulting HTML page:
|
||||
|
||||
``` php
|
||||
<?php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
|
||||
echo $writer->generateHTMLHeader();
|
||||
?>
|
||||
|
||||
<style>
|
||||
<!--
|
||||
html {
|
||||
font-family: Times New Roman;
|
||||
font-size: 9pt;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
<?php
|
||||
echo $writer->generateStyles(false); // do not write <style> and </style>
|
||||
?>
|
||||
|
||||
-->
|
||||
</style>
|
||||
|
||||
<?php
|
||||
echo $writer->generateSheetData();
|
||||
echo $writer->generateHTMLFooter();
|
||||
?>
|
||||
```
|
||||
|
||||
#### Writing UTF-8 HTML files
|
||||
|
||||
A HTML file can be marked as UTF-8 by writing a BOM file header. This
|
||||
can be enabled by using the following code:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
|
||||
$writer->setUseBOM(true);
|
||||
|
||||
$writer->save("05featuredemo.htm");
|
||||
```
|
||||
|
||||
#### Decimal and thousands separators
|
||||
|
||||
See section `\PhpOffice\PhpSpreadsheet\Writer\Csv` how to control the
|
||||
appearance of these.
|
||||
|
||||
## PDF
|
||||
|
||||
PhpSpreadsheet allows you to write a spreadsheet into PDF format, for
|
||||
fast distribution of represented data.
|
||||
|
||||
**PDF limitations** Please note that PDF file format has some limits
|
||||
regarding to styling cells, number formatting, ...
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Writer\Pdf
|
||||
|
||||
PhpSpreadsheet’s PDF Writer is a wrapper for a 3rd-Party PDF Rendering
|
||||
library such as TCPDF, mPDF or Dompdf. You must now install a PDF
|
||||
rendering library yourself; but PhpSpreadsheet will work with a number
|
||||
of different libraries.
|
||||
|
||||
Currently, the following libraries are supported:
|
||||
|
||||
Library | Downloadable from | PhpSpreadsheet writer
|
||||
--------|-------------------------------------|----------------------
|
||||
TCPDF | https://github.com/tecnickcom/tcpdf | Tcpdf
|
||||
mPDF | https://github.com/mpdf/mpdf | Mpdf
|
||||
Dompdf | https://github.com/dompdf/dompdf | Dompdf
|
||||
|
||||
The different libraries have different strengths and weaknesses. Some
|
||||
generate better formatted output than others, some are faster or use
|
||||
less memory than others, while some generate smaller .pdf files. It is
|
||||
the developers choice which one they wish to use, appropriate to their
|
||||
own circumstances.
|
||||
|
||||
You can instantiate a writer with its specific name, like so:
|
||||
|
||||
``` php
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');
|
||||
```
|
||||
|
||||
Or you can register which writer you are using with a more generic name,
|
||||
so you don't need to remember which library you chose, only that you want
|
||||
to write PDF files:
|
||||
|
||||
``` php
|
||||
$class = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class;
|
||||
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', $class);
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Pdf');
|
||||
```
|
||||
|
||||
Or you can instantiate directly the writer of your choice like so:
|
||||
|
||||
``` php
|
||||
$writer = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
|
||||
```
|
||||
|
||||
#### Custom implementation or configuration
|
||||
|
||||
If you need a custom implementation, or custom configuration, of a supported
|
||||
PDF library. You can extends the PDF library, and the PDF writer like so:
|
||||
|
||||
``` php
|
||||
class My_Custom_TCPDF extends TCPDF
|
||||
{
|
||||
// ...
|
||||
}
|
||||
|
||||
class My_Custom_TCPDF_Writer extends \PhpOffice\PhpSpreadsheet\Writer\Pdf\Tcpdf
|
||||
{
|
||||
protected function createExternalWriterInstance($orientation, $unit, $paperSize)
|
||||
{
|
||||
$instance = new My_Custom_TCPDF($orientation, $unit, $paperSize);
|
||||
|
||||
// more configuration of $instance
|
||||
|
||||
return $instance;
|
||||
}
|
||||
}
|
||||
|
||||
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', MY_TCPDF_WRITER::class);
|
||||
```
|
||||
|
||||
#### Writing a spreadsheet
|
||||
|
||||
Once you have identified the Renderer that you wish to use for PDF
|
||||
generation, you can write a .pdf file using the following code:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
|
||||
$writer->save("05featuredemo.pdf");
|
||||
```
|
||||
|
||||
Please note that `\PhpOffice\PhpSpreadsheet\Writer\Pdf` only outputs the
|
||||
first worksheet by default.
|
||||
|
||||
#### Write all worksheets
|
||||
|
||||
PDF files can contain one or more worksheets. If you want to write all
|
||||
sheets into a single PDF file, use the following code:
|
||||
|
||||
``` php
|
||||
$writer->writeAllSheets();
|
||||
```
|
||||
|
||||
#### Write a specific worksheet
|
||||
|
||||
PDF files can contain one or more worksheets. Therefore, you can specify
|
||||
which sheet to write to PDF:
|
||||
|
||||
``` php
|
||||
$writer->setSheetIndex(0);
|
||||
```
|
||||
|
||||
#### Formula pre-calculation
|
||||
|
||||
By default, this writer pre-calculates all formulas in the spreadsheet.
|
||||
This can be slow on large spreadsheets, and maybe even unwanted. You can
|
||||
however disable formula pre-calculation:
|
||||
|
||||
``` php
|
||||
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
|
||||
$writer->setPreCalculateFormulas(false);
|
||||
|
||||
$writer->save("05featuredemo.pdf");
|
||||
```
|
||||
|
||||
#### Decimal and thousands separators
|
||||
|
||||
See section `\PhpOffice\PhpSpreadsheet\Writer\Csv` how to control the
|
||||
appearance of these.
|
||||
|
||||
## Generating Excel files from templates (read, modify, write)
|
||||
|
||||
Readers and writers are the tools that allow you to generate Excel files
|
||||
from templates. This requires less coding effort than generating the
|
||||
Excel file from scratch, especially if your template has many styles,
|
||||
page setup properties, headers etc.
|
||||
|
||||
Here is an example how to open a template file, fill in a couple of
|
||||
fields and save it again:
|
||||
|
||||
``` php
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('template.xlsx');
|
||||
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$worksheet->getCell('A1')->setValue('John');
|
||||
$worksheet->getCell('A2')->setValue('Smith');
|
||||
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
|
||||
$writer->save('write.xls');
|
||||
```
|
||||
|
||||
Notice that it is ok to load an xlsx file and generate an xls file.
|
||||
|
||||
## Generating Excel files from HTML content
|
||||
|
||||
If you are generating an Excel file from pre-rendered HTML content you can do so
|
||||
automatically using the HTML Reader. This is most useful when you are generating
|
||||
Excel files from web application content that would be downloaded/sent to a user.
|
||||
|
||||
For example:
|
||||
|
||||
```php
|
||||
$htmlString = '<table>
|
||||
<tr>
|
||||
<td>Hello World</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hello<br />World</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hello<br>World</td>
|
||||
</tr>
|
||||
</table>';
|
||||
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
|
||||
$spreadsheet = $reader->loadFromString($htmlString);
|
||||
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
|
||||
$writer->save('write.xls');
|
||||
```
|
||||
|
||||
Suppose you have multiple worksheets you'd like created from html. This can be
|
||||
accomplished as follows.
|
||||
|
||||
```php
|
||||
$firstHtmlString = '<table>
|
||||
<tr>
|
||||
<td>Hello World</td>
|
||||
</tr>
|
||||
</table>';
|
||||
$secondHtmlString = '<table>
|
||||
<tr>
|
||||
<td>Hello World</td>
|
||||
</tr>
|
||||
</table>';
|
||||
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
|
||||
$spreadsheet = $reader->loadFromString($firstHtmlString);
|
||||
$reader->setSheetIndex(1);
|
||||
$spreadhseet = $reader->loadFromString($secondHtmlString, $spreadsheet);
|
||||
|
||||
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
|
||||
$writer->save('write.xls');
|
||||
```
|
||||
689
vendor/phpoffice/phpspreadsheet/docs/topics/reading-files.md
vendored
Normal file
@@ -0,0 +1,689 @@
|
||||
# Reading Files
|
||||
|
||||
## Security
|
||||
|
||||
XML-based formats such as OfficeOpen XML, Excel2003 XML, OASIS and
|
||||
Gnumeric are susceptible to XML External Entity Processing (XXE)
|
||||
injection attacks when reading spreadsheet files. This can lead to:
|
||||
|
||||
- Disclosure whether a file is existent
|
||||
- Server Side Request Forgery
|
||||
- Command Execution (depending on the installed PHP wrappers)
|
||||
|
||||
To prevent this, by default every XML-based Reader looks for XML
|
||||
entities declared inside the DOCTYPE and if any is found an exception
|
||||
is raised.
|
||||
|
||||
Read more [about of XXE injection](https://websec.io/2012/08/27/Preventing-XXE-in-PHP.html).
|
||||
|
||||
## Loading a Spreadsheet File
|
||||
|
||||
The simplest way to load a workbook file is to let PhpSpreadsheet's IO
|
||||
Factory identify the file type and load it, calling the static `load()`
|
||||
method of the `\PhpOffice\PhpSpreadsheet\IOFactory` class.
|
||||
|
||||
``` php
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/01_Simple_file_reader_using_IOFactory.php` for a working
|
||||
example of this code.
|
||||
|
||||
The `load()` method will attempt to identify the file type, and
|
||||
instantiate a loader for that file type; using it to load the file and
|
||||
store the data and any formatting in a `Spreadsheet` object.
|
||||
|
||||
The method makes an initial guess at the loader to instantiate based on
|
||||
the file extension; but will test the file before actually executing the
|
||||
load: so if (for example) the file is actually a CSV file or contains
|
||||
HTML markup, but that has been given a .xls extension (quite a common
|
||||
practise), it will reject the Xls loader that it would normally use for
|
||||
a .xls file; and test the file using the other loaders until it finds
|
||||
the appropriate loader, and then use that to read the file.
|
||||
|
||||
While easy to implement in your code, and you don't need to worry about
|
||||
the file type; this isn't the most efficient method to load a file; and
|
||||
it lacks the flexibility to configure the loader in any way before
|
||||
actually reading the file into a `Spreadsheet` object.
|
||||
|
||||
## Creating a Reader and Loading a Spreadsheet File
|
||||
|
||||
If you know the file type of the spreadsheet file that you need to load,
|
||||
you can instantiate a new reader object for that file type, then use the
|
||||
reader's `load()` method to read the file to a `Spreadsheet` object. It is
|
||||
possible to instantiate the reader objects for each of the different
|
||||
supported filetype by name. However, you may get unpredictable results
|
||||
if the file isn't of the right type (e.g. it is a CSV with an extension
|
||||
of .xls), although this type of exception should normally be trapped.
|
||||
|
||||
``` php
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
|
||||
/** Create a new Xls Reader **/
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
|
||||
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
||||
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
|
||||
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
|
||||
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
|
||||
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Gnumeric();
|
||||
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/02_Simple_file_reader_using_a_specified_reader.php`
|
||||
for a working example of this code.
|
||||
|
||||
Alternatively, you can use the IO Factory's `createReader()` method to
|
||||
instantiate the reader object for you, simply telling it the file type
|
||||
of the reader that you want instantiating.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Xls';
|
||||
// $inputFileType = 'Xlsx';
|
||||
// $inputFileType = 'Xml';
|
||||
// $inputFileType = 'Ods';
|
||||
// $inputFileType = 'Slk';
|
||||
// $inputFileType = 'Gnumeric';
|
||||
// $inputFileType = 'Csv';
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/03_Simple_file_reader_using_the_IOFactory_to_return_a_reader.php`
|
||||
for a working example of this code.
|
||||
|
||||
If you're uncertain of the filetype, you can use the `IOFactory::identify()`
|
||||
method to identify the reader that you need, before using the
|
||||
`createReader()` method to instantiate the reader object.
|
||||
|
||||
``` php
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
|
||||
/** Identify the type of $inputFileName **/
|
||||
$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($inputFileName);
|
||||
/** Create a new Reader of the type that has been identified **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/04_Simple_file_reader_using_the_IOFactory_to_identify_a_reader_to_use.php`
|
||||
for a working example of this code.
|
||||
|
||||
## Spreadsheet Reader Options
|
||||
|
||||
Once you have created a reader object for the workbook that you want to
|
||||
load, you have the opportunity to set additional options before
|
||||
executing the `load()` method.
|
||||
|
||||
### Reading Only Data from a Spreadsheet File
|
||||
|
||||
If you're only interested in the cell values in a workbook, but don't
|
||||
need any of the cell formatting information, then you can set the reader
|
||||
to read only the data values and any formulae from each cell using the
|
||||
`setReadDataOnly()` method.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Xls';
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Advise the Reader that we only want to load cell data **/
|
||||
$reader->setReadDataOnly(true);
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/05_Simple_file_reader_using_the_read_data_only_option.php`
|
||||
for a working example of this code.
|
||||
|
||||
It is important to note that Workbooks (and PhpSpreadsheet) store dates
|
||||
and times as simple numeric values: they can only be distinguished from
|
||||
other numeric values by the format mask that is applied to that cell.
|
||||
When setting read data only to true, PhpSpreadsheet doesn't read the
|
||||
cell format masks, so it is not possible to differentiate between
|
||||
dates/times and numbers.
|
||||
|
||||
The Gnumeric loader has been written to read the format masks for date
|
||||
values even when read data only has been set to true, so it can
|
||||
differentiate between dates/times and numbers; but this change hasn't
|
||||
yet been implemented for the other readers.
|
||||
|
||||
Reading Only Data from a Spreadsheet File applies to Readers:
|
||||
|
||||
Reader | Y/N |Reader | Y/N |Reader | Y/N |
|
||||
----------|:---:|--------|:---:|--------------|:---:|
|
||||
Xlsx | YES | Xls | YES | Xml | YES |
|
||||
Ods | YES | SYLK | NO | Gnumeric | YES |
|
||||
CSV | NO | HTML | NO
|
||||
|
||||
### Reading Only Named WorkSheets from a File
|
||||
|
||||
If your workbook contains a number of worksheets, but you are only
|
||||
interested in reading some of those, then you can use the
|
||||
`setLoadSheetsOnly()` method to identify those sheets you are interested
|
||||
in reading.
|
||||
|
||||
To read a single sheet, you can pass that sheet name as a parameter to
|
||||
the `setLoadSheetsOnly()` method.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Xls';
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
$sheetname = 'Data Sheet #2';
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Advise the Reader of which WorkSheets we want to load **/
|
||||
$reader->setLoadSheetsOnly($sheetname);
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/07_Simple_file_reader_loading_a_single_named_worksheet.php`
|
||||
for a working example of this code.
|
||||
|
||||
If you want to read more than just a single sheet, you can pass a list
|
||||
of sheet names as an array parameter to the `setLoadSheetsOnly()` method.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Xls';
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
$sheetnames = ['Data Sheet #1','Data Sheet #3'];
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Advise the Reader of which WorkSheets we want to load **/
|
||||
$reader->setLoadSheetsOnly($sheetnames);
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/08_Simple_file_reader_loading_several_named_worksheets.php`
|
||||
for a working example of this code.
|
||||
|
||||
To reset this option to the default, you can call the `setLoadAllSheets()`
|
||||
method.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Xls';
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Advise the Reader to load all Worksheets **/
|
||||
$reader->setLoadAllSheets();
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/06_Simple_file_reader_loading_all_worksheets.php` for a
|
||||
working example of this code.
|
||||
|
||||
Reading Only Named WorkSheets from a File applies to Readers:
|
||||
|
||||
Reader | Y/N |Reader | Y/N |Reader | Y/N |
|
||||
----------|:---:|--------|:---:|--------------|:---:|
|
||||
Xlsx | YES | Xls | YES | Xml | YES |
|
||||
Ods | YES | SYLK | NO | Gnumeric | YES |
|
||||
CSV | NO | HTML | NO
|
||||
|
||||
### Reading Only Specific Columns and Rows from a File (Read Filters)
|
||||
|
||||
If you are only interested in reading part of a worksheet, then you can
|
||||
write a filter class that identifies whether or not individual cells
|
||||
should be read by the loader. A read filter must implement the
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\IReadFilter` interface, and contain a
|
||||
`readCell()` method that accepts arguments of `$column`, `$row` and
|
||||
`$worksheetName`, and return a boolean true or false that indicates
|
||||
whether a workbook cell identified by those arguments should be read or
|
||||
not.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Xls';
|
||||
$inputFileName = './sampleData/example1.xls';
|
||||
$sheetname = 'Data Sheet #3';
|
||||
|
||||
/** Define a Read Filter class implementing \PhpOffice\PhpSpreadsheet\Reader\IReadFilter */
|
||||
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
|
||||
{
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Read rows 1 to 7 and columns A to E only
|
||||
if ($row >= 1 && $row <= 7) {
|
||||
if (in_array($column,range('A','E'))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** Create an Instance of our Read Filter **/
|
||||
$filterSubset = new MyReadFilter();
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Tell the Reader that we want to use the Read Filter **/
|
||||
$reader->setReadFilter($filterSubset);
|
||||
/** Load only the rows and columns that match our filter to Spreadsheet **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/09_Simple_file_reader_using_a_read_filter.php` for a
|
||||
working example of this code.
|
||||
|
||||
This example is not particularly useful, because it can only be used in
|
||||
a very specific circumstance (when you only want cells in the range
|
||||
A1:E7 from your worksheet. A generic Read Filter would probably be more
|
||||
useful:
|
||||
|
||||
``` php
|
||||
/** Define a Read Filter class implementing \PhpOffice\PhpSpreadsheet\Reader\IReadFilter */
|
||||
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
|
||||
{
|
||||
private $startRow = 0;
|
||||
private $endRow = 0;
|
||||
private $columns = [];
|
||||
|
||||
/** Get the list of rows and columns to read */
|
||||
public function __construct($startRow, $endRow, $columns) {
|
||||
$this->startRow = $startRow;
|
||||
$this->endRow = $endRow;
|
||||
$this->columns = $columns;
|
||||
}
|
||||
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Only read the rows and columns that were configured
|
||||
if ($row >= $this->startRow && $row <= $this->endRow) {
|
||||
if (in_array($column,$this->columns)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** Create an Instance of our Read Filter, passing in the cell range **/
|
||||
$filterSubset = new MyReadFilter(9,15,range('G','K'));
|
||||
```
|
||||
|
||||
See `samples/Reader/10_Simple_file_reader_using_a_configurable_read_filter.php`
|
||||
for a working example of this code.
|
||||
|
||||
This can be particularly useful for conserving memory, by allowing you
|
||||
to read and process a large workbook in "chunks": an example of this
|
||||
usage might be when transferring data from an Excel worksheet to a
|
||||
database.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Xls';
|
||||
$inputFileName = './sampleData/example2.xls';
|
||||
|
||||
/** Define a Read Filter class implementing \PhpOffice\PhpSpreadsheet\Reader\IReadFilter */
|
||||
class ChunkReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
|
||||
{
|
||||
private $startRow = 0;
|
||||
private $endRow = 0;
|
||||
|
||||
/** Set the list of rows that we want to read */
|
||||
public function setRows($startRow, $chunkSize) {
|
||||
$this->startRow = $startRow;
|
||||
$this->endRow = $startRow + $chunkSize;
|
||||
}
|
||||
|
||||
public function readCell($column, $row, $worksheetName = '') {
|
||||
// Only read the heading row, and the configured rows
|
||||
if (($row == 1) || ($row >= $this->startRow && $row < $this->endRow)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
|
||||
/** Define how many rows we want to read for each "chunk" **/
|
||||
$chunkSize = 2048;
|
||||
/** Create a new Instance of our Read Filter **/
|
||||
$chunkFilter = new ChunkReadFilter();
|
||||
|
||||
/** Tell the Reader that we want to use the Read Filter **/
|
||||
$reader->setReadFilter($chunkFilter);
|
||||
|
||||
/** Loop to read our worksheet in "chunk size" blocks **/
|
||||
for ($startRow = 2; $startRow <= 65536; $startRow += $chunkSize) {
|
||||
/** Tell the Read Filter which rows we want this iteration **/
|
||||
$chunkFilter->setRows($startRow,$chunkSize);
|
||||
/** Load only the rows that match our filter **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
// Do some processing here
|
||||
}
|
||||
```
|
||||
|
||||
See `samples/Reader/12_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_`
|
||||
for a working example of this code.
|
||||
|
||||
Using Read Filters applies to:
|
||||
|
||||
Reader | Y/N |Reader | Y/N |Reader | Y/N |
|
||||
----------|:---:|--------|:---:|--------------|:---:|
|
||||
Xlsx | YES | Xls | YES | Xml | YES |
|
||||
Ods | YES | SYLK | NO | Gnumeric | YES |
|
||||
CSV | YES | HTML | NO | | |
|
||||
|
||||
### Combining Multiple Files into a Single Spreadsheet Object
|
||||
|
||||
While you can limit the number of worksheets that are read from a
|
||||
workbook file using the `setLoadSheetsOnly()` method, certain readers also
|
||||
allow you to combine several individual "sheets" from different files
|
||||
into a single `Spreadsheet` object, where each individual file is a
|
||||
single worksheet within that workbook. For each file that you read, you
|
||||
need to indicate which worksheet index it should be loaded into using
|
||||
the `setSheetIndex()` method of the `$reader`, then use the
|
||||
`loadIntoExisting()` method rather than the `load()` method to actually read
|
||||
the file into that worksheet.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Csv';
|
||||
$inputFileNames = [
|
||||
'./sampleData/example1.csv',
|
||||
'./sampleData/example2.csv'
|
||||
'./sampleData/example3.csv'
|
||||
];
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
|
||||
/** Extract the first named file from the array list **/
|
||||
$inputFileName = array_shift($inputFileNames);
|
||||
/** Load the initial file to the first worksheet in a `Spreadsheet` Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
/** Set the worksheet title (to the filename that we've loaded) **/
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME));
|
||||
|
||||
/** Loop through all the remaining files in the list **/
|
||||
foreach($inputFileNames as $sheet => $inputFileName) {
|
||||
/** Increment the worksheet index pointer for the Reader **/
|
||||
$reader->setSheetIndex($sheet+1);
|
||||
/** Load the current file into a new worksheet in Spreadsheet **/
|
||||
$reader->loadIntoExisting($inputFileName,$spreadsheet);
|
||||
/** Set the worksheet title (to the filename that we've loaded) **/
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME));
|
||||
}
|
||||
```
|
||||
|
||||
See `samples/Reader/13_Simple_file_reader_for_multiple_CSV_files.php` for a
|
||||
working example of this code.
|
||||
|
||||
Note that using the same sheet index for multiple sheets won't append
|
||||
files into the same sheet, but overwrite the results of the previous
|
||||
load. You cannot load multiple CSV files into the same worksheet.
|
||||
|
||||
Combining Multiple Files into a Single Spreadsheet Object applies to:
|
||||
|
||||
Reader | Y/N |Reader | Y/N |Reader | Y/N |
|
||||
----------|:---:|--------|:---:|--------------|:---:|
|
||||
Xlsx | NO | Xls | NO | Xml | NO |
|
||||
Ods | NO | SYLK | YES | Gnumeric | NO |
|
||||
CSV | YES | HTML | NO
|
||||
|
||||
### Combining Read Filters with the `setSheetIndex()` method to split a large CSV file across multiple Worksheets
|
||||
|
||||
An Xls BIFF .xls file is limited to 65536 rows in a worksheet, while the
|
||||
Xlsx Microsoft Office Open XML SpreadsheetML .xlsx file is limited to
|
||||
1,048,576 rows in a worksheet; but a CSV file is not limited other than
|
||||
by available disk space. This means that we wouldn’t ordinarily be able
|
||||
to read all the rows from a very large CSV file that exceeded those
|
||||
limits, and save it as an Xls or Xlsx file. However, by using Read
|
||||
Filters to read the CSV file in "chunks" (using the ChunkReadFilter
|
||||
Class that we defined in [the above section](#reading-only-specific-columns-and-rows-from-a-file-read-filters),
|
||||
and the `setSheetIndex()` method of the `$reader`, we can split the CSV
|
||||
file across several individual worksheets.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Csv';
|
||||
$inputFileName = './sampleData/example2.csv';
|
||||
|
||||
echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
|
||||
/** Define how many rows we want to read for each "chunk" **/
|
||||
$chunkSize = 65530;
|
||||
/** Create a new Instance of our Read Filter **/
|
||||
$chunkFilter = new ChunkReadFilter();
|
||||
|
||||
/** Tell the Reader that we want to use the Read Filter **/
|
||||
/** and that we want to store it in contiguous rows/columns **/
|
||||
|
||||
$reader->setReadFilter($chunkFilter)
|
||||
->setContiguous(true);
|
||||
|
||||
/** Instantiate a new Spreadsheet object manually **/
|
||||
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
|
||||
|
||||
/** Set a sheet index **/
|
||||
$sheet = 0;
|
||||
/** Loop to read our worksheet in "chunk size" blocks **/
|
||||
/** $startRow is set to 2 initially because we always read the headings in row #1 **/
|
||||
for ($startRow = 2; $startRow <= 1000000; $startRow += $chunkSize) {
|
||||
/** Tell the Read Filter which rows we want to read this loop **/
|
||||
$chunkFilter->setRows($startRow,$chunkSize);
|
||||
|
||||
/** Increment the worksheet index pointer for the Reader **/
|
||||
$reader->setSheetIndex($sheet);
|
||||
/** Load only the rows that match our filter into a new worksheet **/
|
||||
$reader->loadIntoExisting($inputFileName,$spreadsheet);
|
||||
/** Set the worksheet title for the sheet that we've justloaded) **/
|
||||
/** and increment the sheet index as well **/
|
||||
$spreadsheet->getActiveSheet()->setTitle('Country Data #'.(++$sheet));
|
||||
}
|
||||
```
|
||||
|
||||
See `samples/Reader/14_Reading_a_large_CSV_file_in_chunks_to_split_across_multiple_worksheets.php`
|
||||
for a working example of this code.
|
||||
|
||||
This code will read 65,530 rows at a time from the CSV file that we’re
|
||||
loading, and store each "chunk" in a new worksheet.
|
||||
|
||||
The `setContiguous()` method for the Reader is important here. It is
|
||||
applicable only when working with a Read Filter, and identifies whether
|
||||
or not the cells should be stored by their position within the CSV file,
|
||||
or their position relative to the filter.
|
||||
|
||||
For example, if the filter returned true for cells in the range B2:C3,
|
||||
then with setContiguous set to false (the default) these would be loaded
|
||||
as B2:C3 in the `Spreadsheet` object; but with setContiguous set to
|
||||
true, they would be loaded as A1:B2.
|
||||
|
||||
Splitting a single loaded file across multiple worksheets applies to:
|
||||
|
||||
Reader | Y/N |Reader | Y/N |Reader | Y/N |
|
||||
----------|:---:|--------|:---:|--------------|:---:|
|
||||
Xlsx | NO | Xls | NO | Xml | NO |
|
||||
Ods | NO | SYLK | NO | Gnumeric | NO |
|
||||
CSV | YES | HTML | NO
|
||||
|
||||
### Pipe or Tab Separated Value Files
|
||||
|
||||
The CSV loader will attempt to auto-detect the separator used in the file. If it
|
||||
cannot auto-detect, it will default to the comma. If this does not fit your
|
||||
use-case, you can manually specify a separator by using the `setDelimiter()`
|
||||
method.
|
||||
|
||||
``` php
|
||||
$inputFileType = 'Csv';
|
||||
$inputFileName = './sampleData/example1.tsv';
|
||||
|
||||
/** Create a new Reader of the type defined in $inputFileType **/
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
/** Set the delimiter to a TAB character **/
|
||||
$reader->setDelimiter("\t");
|
||||
// $reader->setDelimiter('|');
|
||||
|
||||
/** Load the file to a Spreadsheet Object **/
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/15_Simple_file_reader_for_tab_separated_value_file_using_the_Advanced_Value_Binder.php`
|
||||
for a working example of this code.
|
||||
|
||||
In addition to the delimiter, you can also use the following methods to
|
||||
set other attributes for the data load:
|
||||
|
||||
Method | Default
|
||||
-------------------|----------
|
||||
setEnclosure() | `"`
|
||||
setInputEncoding() | `UTF-8`
|
||||
|
||||
Setting CSV delimiter applies to:
|
||||
|
||||
Reader | Y/N |Reader | Y/N |Reader | Y/N |
|
||||
----------|:---:|--------|:---:|--------------|:---:|
|
||||
Xlsx | NO | Xls | NO | Xml | NO |
|
||||
Ods | NO | SYLK | NO | Gnumeric | NO |
|
||||
CSV | YES | HTML | NO
|
||||
|
||||
### A Brief Word about the Advanced Value Binder
|
||||
|
||||
When loading data from a file that contains no formatting information,
|
||||
such as a CSV file, then data is read either as strings or numbers
|
||||
(float or integer). This means that PhpSpreadsheet does not
|
||||
automatically recognise dates/times (such as `16-Apr-2009` or `13:30`),
|
||||
booleans (`true` or `false`), percentages (`75%`), hyperlinks
|
||||
(`https://www.example.com`), etc as anything other than simple strings.
|
||||
However, you can apply additional processing that is executed against
|
||||
these values during the load process within a Value Binder.
|
||||
|
||||
A Value Binder is a class that implement the
|
||||
`\PhpOffice\PhpSpreadsheet\Cell\IValueBinder` interface. It must contain a
|
||||
`bindValue()` method that accepts a `\PhpOffice\PhpSpreadsheet\Cell\Cell` and a
|
||||
value as arguments, and return a boolean `true` or `false` that indicates
|
||||
whether the workbook cell has been populated with the value or not. The
|
||||
Advanced Value Binder implements such a class: amongst other tests, it
|
||||
identifies a string comprising "TRUE" or "FALSE" (based on locale
|
||||
settings) and sets it to a boolean; or a number in scientific format
|
||||
(e.g. "1.234e-5") and converts it to a float; or dates and times,
|
||||
converting them to their Excel timestamp value – before storing the
|
||||
value in the cell object. It also sets formatting for strings that are
|
||||
identified as dates, times or percentages. It could easily be extended
|
||||
to provide additional handling (including text or cell formatting) when
|
||||
it encountered a hyperlink, or HTML markup within a CSV file.
|
||||
|
||||
So using a Value Binder allows a great deal more flexibility in the
|
||||
loader logic when reading unformatted text files.
|
||||
|
||||
``` php
|
||||
/** Tell PhpSpreadsheet that we want to use the Advanced Value Binder **/
|
||||
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );
|
||||
|
||||
$inputFileType = 'Csv';
|
||||
$inputFileName = './sampleData/example1.tsv';
|
||||
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
$reader->setDelimiter("\t");
|
||||
$spreadsheet = $reader->load($inputFileName);
|
||||
```
|
||||
|
||||
See `samples/Reader/15_Simple_file_reader_for_tab_separated_value_file_using_the_Advanced_Value_Binder.php`
|
||||
for a working example of this code.
|
||||
|
||||
Loading using a Value Binder applies to:
|
||||
|
||||
Reader | Y/N |Reader | Y/N |Reader | Y/N
|
||||
----------|:---:|--------|:---:|--------------|:---:
|
||||
Xlsx | NO | Xls | NO | Xml | NO
|
||||
Ods | NO | SYLK | NO | Gnumeric | NO
|
||||
CSV | YES | HTML | YES
|
||||
|
||||
## Error Handling
|
||||
|
||||
Of course, you should always apply some error handling to your scripts
|
||||
as well. PhpSpreadsheet throws exceptions, so you can wrap all your code
|
||||
that accesses the library methods within Try/Catch blocks to trap for
|
||||
any problems that are encountered, and deal with them in an appropriate
|
||||
manner.
|
||||
|
||||
The PhpSpreadsheet Readers throw a
|
||||
`\PhpOffice\PhpSpreadsheet\Reader\Exception`.
|
||||
|
||||
``` php
|
||||
$inputFileName = './sampleData/example-1.xls';
|
||||
|
||||
try {
|
||||
/** Load $inputFileName to a Spreadsheet Object **/
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
|
||||
} catch(\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
|
||||
die('Error loading file: '.$e->getMessage());
|
||||
}
|
||||
```
|
||||
|
||||
See `samples/Reader/16_Handling_loader_exceptions_using_TryCatch.php` for a
|
||||
working example of this code.
|
||||
|
||||
## Helper Methods
|
||||
|
||||
You can retrieve a list of worksheet names contained in a file without
|
||||
loading the whole file by using the Reader’s `listWorksheetNames()`
|
||||
method; similarly, a `listWorksheetInfo()` method will retrieve the
|
||||
dimensions of worksheet in a file without needing to load and parse the
|
||||
whole file.
|
||||
|
||||
### listWorksheetNames
|
||||
|
||||
The `listWorksheetNames()` method returns a simple array listing each
|
||||
worksheet name within the workbook:
|
||||
|
||||
``` php
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
|
||||
$worksheetNames = $reader->listWorksheetNames($inputFileName);
|
||||
|
||||
echo '<h3>Worksheet Names</h3>';
|
||||
echo '<ol>';
|
||||
foreach ($worksheetNames as $worksheetName) {
|
||||
echo '<li>', $worksheetName, '</li>';
|
||||
}
|
||||
echo '</ol>';
|
||||
```
|
||||
|
||||
See `samples/Reader/18_Reading_list_of_worksheets_without_loading_entire_file.php`
|
||||
for a working example of this code.
|
||||
|
||||
### listWorksheetInfo
|
||||
|
||||
The `listWorksheetInfo()` method returns a nested array, with each entry
|
||||
listing the name and dimensions for a worksheet:
|
||||
|
||||
``` php
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
|
||||
|
||||
$worksheetData = $reader->listWorksheetInfo($inputFileName);
|
||||
|
||||
echo '<h3>Worksheet Information</h3>';
|
||||
echo '<ol>';
|
||||
foreach ($worksheetData as $worksheet) {
|
||||
echo '<li>', $worksheet['worksheetName'], '<br />';
|
||||
echo 'Rows: ', $worksheet['totalRows'],
|
||||
' Columns: ', $worksheet['totalColumns'], '<br />';
|
||||
echo 'Cell Range: A1:',
|
||||
$worksheet['lastColumnLetter'], $worksheet['totalRows'];
|
||||
echo '</li>';
|
||||
}
|
||||
echo '</ol>';
|
||||
```
|
||||
|
||||
See `samples/Reader/19_Reading_worksheet_information_without_loading_entire_file.php`
|
||||
for a working example of this code.
|
||||
1506
vendor/phpoffice/phpspreadsheet/docs/topics/recipes.md
vendored
Normal file
45
vendor/phpoffice/phpspreadsheet/docs/topics/settings.md
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# Configuration Settings
|
||||
|
||||
Once you have included the PhpSpreadsheet files in your script, but
|
||||
before instantiating a `Spreadsheet` object or loading a workbook file,
|
||||
there are a number of configuration options that can be set which will
|
||||
affect the subsequent behaviour of the script.
|
||||
|
||||
## Cell collection caching
|
||||
|
||||
By default, PhpSpreadsheet holds all cell objects in memory, but
|
||||
you can specify alternatives to reduce memory consumption at the cost of speed.
|
||||
Read more about [memory saving](./memory_saving.md).
|
||||
|
||||
To enable cell caching, you must provide your own implementation of cache like so:
|
||||
|
||||
``` php
|
||||
$cache = new MyCustomPsr16Implementation();
|
||||
|
||||
\PhpOffice\PhpSpreadsheet\Settings::setCache($cache);
|
||||
```
|
||||
|
||||
## Language/Locale
|
||||
|
||||
Some localisation elements have been included in PhpSpreadsheet. You can
|
||||
set a locale by changing the settings. To set the locale to Brazilian
|
||||
Portuguese you would use:
|
||||
|
||||
``` php
|
||||
$locale = 'pt_br';
|
||||
$validLocale = \PhpOffice\PhpSpreadsheet\Settings::setLocale($locale);
|
||||
if (!$validLocale) {
|
||||
echo 'Unable to set locale to ' . $locale . " - reverting to en_us" . PHP_EOL;
|
||||
}
|
||||
```
|
||||
|
||||
- If Brazilian Portuguese language files aren't available, then Portuguese
|
||||
will be enabled instead
|
||||
- If Portuguese language files aren't available,
|
||||
then the `setLocale()` method will return an error, and American English
|
||||
(en\_us) settings will be used throughout.
|
||||
|
||||
More details of the features available once a locale has been set,
|
||||
including a list of the languages and locales currently supported, can
|
||||
be found in [Locale Settings for
|
||||
Formulae](./recipes.md#locale-settings-for-formulae).
|
||||
128
vendor/phpoffice/phpspreadsheet/docs/topics/worksheets.md
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
# Worksheets
|
||||
|
||||
A worksheet is a collection of cells, formulae, images, graphs, etc. It
|
||||
holds all data necessary to represent a spreadsheet worksheet.
|
||||
|
||||
When you load a workbook from a spreadsheet file, it will be loaded with
|
||||
all its existing worksheets (unless you specified that only certain
|
||||
sheets should be loaded). When you load from non-spreadsheet files (such
|
||||
as a CSV or HTML file) or from spreadsheet formats that don't identify
|
||||
worksheets by name (such as SYLK), then a single worksheet called
|
||||
"WorkSheet1" will be created containing the data from that file.
|
||||
|
||||
When you instantiate a new workbook, PhpSpreadsheet will create it with
|
||||
a single worksheet called "WorkSheet1".
|
||||
|
||||
The `getSheetCount()` method will tell you the number of worksheets in
|
||||
the workbook; while the `getSheetNames()` method will return a list of
|
||||
all worksheets in the workbook, indexed by the order in which their
|
||||
"tabs" would appear when opened in MS Excel (or other appropriate
|
||||
Spreadsheet program).
|
||||
|
||||
Individual worksheets can be accessed by name, or by their index
|
||||
position in the workbook. The index position represents the order that
|
||||
each worksheet "tab" is shown when the workbook is opened in MS Excel
|
||||
(or other appropriate Spreadsheet program). To access a sheet by its
|
||||
index, use the `getSheet()` method.
|
||||
|
||||
``` php
|
||||
// Get the second sheet in the workbook
|
||||
// Note that sheets are indexed from 0
|
||||
$spreadsheet->getSheet(1);
|
||||
```
|
||||
|
||||
|
||||
Methods also exist allowing you to reorder the worksheets in the
|
||||
workbook.
|
||||
|
||||
To access a sheet by name, use the `getSheetByName()` method, specifying
|
||||
the name of the worksheet that you want to access.
|
||||
|
||||
``` php
|
||||
// Retrieve the worksheet called 'Worksheet 1'
|
||||
$spreadsheet->getSheetByName('Worksheet 1');
|
||||
```
|
||||
|
||||
Alternatively, one worksheet is always the currently active worksheet,
|
||||
and you can access that directly. The currently active worksheet is the
|
||||
one that will be active when the workbook is opened in MS Excel (or
|
||||
other appropriate Spreadsheet program).
|
||||
|
||||
``` php
|
||||
// Retrieve the current active worksheet
|
||||
$spreadsheet->getActiveSheet();
|
||||
```
|
||||
|
||||
You can change the currently active sheet by index or by name using the
|
||||
`setActiveSheetIndex()` and `setActiveSheetIndexByName()` methods.
|
||||
|
||||
## Adding a new Worksheet
|
||||
|
||||
You can add a new worksheet to the workbook using the `createSheet()`
|
||||
method of the `Spreadsheet` object. By default, this will be created as
|
||||
a new "last" sheet; but you can also specify an index position as an
|
||||
argument, and the worksheet will be inserted at that position, shuffling
|
||||
all subsequent worksheets in the collection down a place.
|
||||
|
||||
``` php
|
||||
$spreadsheet->createSheet();
|
||||
```
|
||||
|
||||
A new worksheet created using this method will be called
|
||||
`Worksheet<n>` where `<n>` is the lowest number possible to
|
||||
guarantee that the title is unique.
|
||||
|
||||
Alternatively, you can instantiate a new worksheet (setting the title to
|
||||
whatever you choose) and then insert it into your workbook using the
|
||||
`addSheet()` method.
|
||||
|
||||
``` php
|
||||
// Create a new worksheet called "My Data"
|
||||
$myWorkSheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, 'My Data');
|
||||
|
||||
// Attach the "My Data" worksheet as the first worksheet in the Spreadsheet object
|
||||
$spreadsheet->addSheet($myWorkSheet, 0);
|
||||
```
|
||||
|
||||
If you don't specify an index position as the second argument, then the
|
||||
new worksheet will be added after the last existing worksheet.
|
||||
|
||||
## Copying Worksheets
|
||||
|
||||
Sheets within the same workbook can be copied by creating a clone of the
|
||||
worksheet you wish to copy, and then using the `addSheet()` method to
|
||||
insert the clone into the workbook.
|
||||
|
||||
``` php
|
||||
$clonedWorksheet = clone $spreadsheet->getSheetByName('Worksheet 1');
|
||||
$clonedWorksheet->setTitle('Copy of Worksheet 1');
|
||||
$spreadsheet->addSheet($clonedWorksheet);
|
||||
```
|
||||
|
||||
You can also copy worksheets from one workbook to another, though this
|
||||
is more complex as PhpSpreadsheet also has to replicate the styling
|
||||
between the two workbooks. The `addExternalSheet()` method is provided for
|
||||
this purpose.
|
||||
|
||||
$clonedWorksheet = clone $spreadsheet1->getSheetByName('Worksheet 1');
|
||||
$spreadsheet->addExternalSheet($clonedWorksheet);
|
||||
|
||||
In both cases, it is the developer's responsibility to ensure that
|
||||
worksheet names are not duplicated. PhpSpreadsheet will throw an
|
||||
exception if you attempt to copy worksheets that will result in a
|
||||
duplicate name.
|
||||
|
||||
## Removing a Worksheet
|
||||
|
||||
You can delete a worksheet from a workbook, identified by its index
|
||||
position, using the `removeSheetByIndex()` method
|
||||
|
||||
``` php
|
||||
$sheetIndex = $spreadsheet->getIndex(
|
||||
$spreadsheet->getSheetByName('Worksheet 1')
|
||||
);
|
||||
$spreadsheet->removeSheetByIndex($sheetIndex);
|
||||
```
|
||||
|
||||
If the currently active worksheet is deleted, then the sheet at the
|
||||
previous index position will become the currently active sheet.
|
||||
7
vendor/phpoffice/phpspreadsheet/mkdocs.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
site_name: PhpSpreadsheet Documentation
|
||||
repo_url: https://github.com/PHPOffice/phpspreadsheet
|
||||
edit_uri: edit/master/docs/
|
||||
|
||||
theme: readthedocs
|
||||
extra_css:
|
||||
- extra/extra.css
|
||||
23
vendor/phpoffice/phpspreadsheet/phpunit.xml.dist
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/7.5/phpunit.xsd"
|
||||
bootstrap="./tests/bootstrap.php"
|
||||
backupGlobals="true"
|
||||
colors="true">
|
||||
<php>
|
||||
<ini name="memory_limit" value="2048M"/>
|
||||
</php>
|
||||
<testsuite name="PhpSpreadsheet Unit Test Suite">
|
||||
<directory suffix="Test.php">./tests/PhpSpreadsheetTests</directory>
|
||||
</testsuite>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">./src</directory>
|
||||
<exclude>
|
||||
<directory>./src/PhpSpreadsheet/Shared/JAMA</directory>
|
||||
<directory>./src/PhpSpreadsheet/Writer/PDF</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
101
vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter.php
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('PhpSpreadsheet Test Document')
|
||||
->setSubject('PhpSpreadsheet Test Document')
|
||||
->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
|
||||
->setKeywords('office PhpSpreadsheet php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create the worksheet
|
||||
$helper->log('Add data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Year')
|
||||
->setCellValue('B1', 'Quarter')
|
||||
->setCellValue('C1', 'Country')
|
||||
->setCellValue('D1', 'Sales');
|
||||
|
||||
$dataArray = [
|
||||
['2010', 'Q1', 'United States', 790],
|
||||
['2010', 'Q2', 'United States', 730],
|
||||
['2010', 'Q3', 'United States', 860],
|
||||
['2010', 'Q4', 'United States', 850],
|
||||
['2011', 'Q1', 'United States', 800],
|
||||
['2011', 'Q2', 'United States', 700],
|
||||
['2011', 'Q3', 'United States', 900],
|
||||
['2011', 'Q4', 'United States', 950],
|
||||
['2010', 'Q1', 'Belgium', 380],
|
||||
['2010', 'Q2', 'Belgium', 390],
|
||||
['2010', 'Q3', 'Belgium', 420],
|
||||
['2010', 'Q4', 'Belgium', 460],
|
||||
['2011', 'Q1', 'Belgium', 400],
|
||||
['2011', 'Q2', 'Belgium', 350],
|
||||
['2011', 'Q3', 'Belgium', 450],
|
||||
['2011', 'Q4', 'Belgium', 500],
|
||||
['2010', 'Q1', 'UK', 690],
|
||||
['2010', 'Q2', 'UK', 610],
|
||||
['2010', 'Q3', 'UK', 620],
|
||||
['2010', 'Q4', 'UK', 600],
|
||||
['2011', 'Q1', 'UK', 720],
|
||||
['2011', 'Q2', 'UK', 650],
|
||||
['2011', 'Q3', 'UK', 580],
|
||||
['2011', 'Q4', 'UK', 510],
|
||||
['2010', 'Q1', 'France', 510],
|
||||
['2010', 'Q2', 'France', 490],
|
||||
['2010', 'Q3', 'France', 460],
|
||||
['2010', 'Q4', 'France', 590],
|
||||
['2011', 'Q1', 'France', 620],
|
||||
['2011', 'Q2', 'France', 650],
|
||||
['2011', 'Q3', 'France', 415],
|
||||
['2011', 'Q4', 'France', 570],
|
||||
['2010', 'Q1', 'Germany', 720],
|
||||
['2010', 'Q2', 'Germany', 680],
|
||||
['2010', 'Q3', 'Germany', 640],
|
||||
['2010', 'Q4', 'Germany', 660],
|
||||
['2011', 'Q1', 'Germany', 680],
|
||||
['2011', 'Q2', 'Germany', 620],
|
||||
['2011', 'Q3', 'Germany', 710],
|
||||
['2011', 'Q4', 'Germany', 690],
|
||||
['2010', 'Q1', 'Spain', 510],
|
||||
['2010', 'Q2', 'Spain', 490],
|
||||
['2010', 'Q3', 'Spain', 470],
|
||||
['2010', 'Q4', 'Spain', 420],
|
||||
['2011', 'Q1', 'Spain', 460],
|
||||
['2011', 'Q2', 'Spain', 390],
|
||||
['2011', 'Q3', 'Spain', 430],
|
||||
['2011', 'Q4', 'Spain', 415],
|
||||
['2010', 'Q1', 'Italy', 440],
|
||||
['2010', 'Q2', 'Italy', 410],
|
||||
['2010', 'Q3', 'Italy', 420],
|
||||
['2010', 'Q4', 'Italy', 450],
|
||||
['2011', 'Q1', 'Italy', 430],
|
||||
['2011', 'Q2', 'Italy', 370],
|
||||
['2011', 'Q3', 'Italy', 350],
|
||||
['2011', 'Q4', 'Italy', 335],
|
||||
];
|
||||
$spreadsheet->getActiveSheet()->fromArray($dataArray, null, 'A2');
|
||||
|
||||
// Set title row bold
|
||||
$helper->log('Set title row bold');
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
|
||||
|
||||
// Set autofilter
|
||||
$helper->log('Set autofilter');
|
||||
// Always include the complete filter range!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
156
vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_1.php
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Shared\Date;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('PhpSpreadsheet Test Document')
|
||||
->setSubject('PhpSpreadsheet Test Document')
|
||||
->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
|
||||
->setKeywords('office PhpSpreadsheet php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create the worksheet
|
||||
$helper->log('Add data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Financial Year')
|
||||
->setCellValue('B1', 'Financial Period')
|
||||
->setCellValue('C1', 'Country')
|
||||
->setCellValue('D1', 'Date')
|
||||
->setCellValue('E1', 'Sales Value')
|
||||
->setCellValue('F1', 'Expenditure');
|
||||
$startYear = $endYear = $currentYear = date('Y');
|
||||
--$startYear;
|
||||
++$endYear;
|
||||
|
||||
$years = range($startYear, $endYear);
|
||||
$periods = range(1, 12);
|
||||
$countries = [
|
||||
'United States',
|
||||
'UK',
|
||||
'France',
|
||||
'Germany',
|
||||
'Italy',
|
||||
'Spain',
|
||||
'Portugal',
|
||||
'Japan',
|
||||
];
|
||||
|
||||
$row = 2;
|
||||
foreach ($years as $year) {
|
||||
foreach ($periods as $period) {
|
||||
foreach ($countries as $country) {
|
||||
$endDays = date('t', mktime(0, 0, 0, $period, 1, (int) $year));
|
||||
for ($i = 1; $i <= $endDays; ++$i) {
|
||||
$eDate = Date::formattedPHPToExcel(
|
||||
$year,
|
||||
$period,
|
||||
$i
|
||||
);
|
||||
$value = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
$salesValue = $invoiceValue = null;
|
||||
$incomeOrExpenditure = rand(-1, 1);
|
||||
if ($incomeOrExpenditure == -1) {
|
||||
$expenditure = rand(-500, -1000) * (1 + (rand(-1, 1) / 4));
|
||||
$income = null;
|
||||
} elseif ($incomeOrExpenditure == 1) {
|
||||
$expenditure = rand(-500, -1000) * (1 + (rand(-1, 1) / 4));
|
||||
$income = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
} else {
|
||||
$expenditure = null;
|
||||
$income = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
}
|
||||
$dataArray = [$year,
|
||||
$period,
|
||||
$country,
|
||||
$eDate,
|
||||
$income,
|
||||
$expenditure,
|
||||
];
|
||||
$spreadsheet->getActiveSheet()->fromArray($dataArray, null, 'A' . $row++);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
--$row;
|
||||
|
||||
// Set styling
|
||||
$helper->log('Set styling');
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setWrapText(true);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(12.5);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(10.5);
|
||||
$spreadsheet->getActiveSheet()->getStyle('D2:D' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD2);
|
||||
$spreadsheet->getActiveSheet()->getStyle('E2:F' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(14);
|
||||
$spreadsheet->getActiveSheet()->freezePane('A2');
|
||||
|
||||
// Set autofilter range
|
||||
$helper->log('Set autofilter range');
|
||||
// Always include the complete filter range!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
|
||||
// Set active filters
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$helper->log('Set active filters');
|
||||
// Filter the Country column on a filter value of countries beginning with the letter U (or Japan)
|
||||
// We use * as a wildcard, so specify as U* and using a wildcard requires customFilter
|
||||
$autoFilter->getColumn('C')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'u*'
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
$autoFilter->getColumn('C')
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'japan'
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
// Filter the Date column on a filter value of the first day of every period of the current year
|
||||
// We us a dateGroup ruletype for this, although it is still a standard filter
|
||||
foreach ($periods as $period) {
|
||||
$endDate = date('t', mktime(0, 0, 0, $period, 1, (int) $currentYear));
|
||||
|
||||
$autoFilter->getColumn('D')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
[
|
||||
'year' => $currentYear,
|
||||
'month' => $period,
|
||||
'day' => $endDate,
|
||||
]
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_DATEGROUP);
|
||||
}
|
||||
// Display only sales values that are blank
|
||||
// Standard filter, operator equals, and value of NULL
|
||||
$autoFilter->getColumn('E')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
''
|
||||
);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
148
vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_2.php
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Shared\Date;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('PhpSpreadsheet Test Document')
|
||||
->setSubject('PhpSpreadsheet Test Document')
|
||||
->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
|
||||
->setKeywords('office PhpSpreadsheet php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create the worksheet
|
||||
$helper->log('Add data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Financial Year')
|
||||
->setCellValue('B1', 'Financial Period')
|
||||
->setCellValue('C1', 'Country')
|
||||
->setCellValue('D1', 'Date')
|
||||
->setCellValue('E1', 'Sales Value')
|
||||
->setCellValue('F1', 'Expenditure');
|
||||
$startYear = $endYear = $currentYear = date('Y');
|
||||
--$startYear;
|
||||
++$endYear;
|
||||
|
||||
$years = range($startYear, $endYear);
|
||||
$periods = range(1, 12);
|
||||
$countries = [
|
||||
'United States',
|
||||
'UK',
|
||||
'France',
|
||||
'Germany',
|
||||
'Italy',
|
||||
'Spain',
|
||||
'Portugal',
|
||||
'Japan',
|
||||
];
|
||||
|
||||
$row = 2;
|
||||
foreach ($years as $year) {
|
||||
foreach ($periods as $period) {
|
||||
foreach ($countries as $country) {
|
||||
$endDays = date('t', mktime(0, 0, 0, $period, 1, (int) $year));
|
||||
for ($i = 1; $i <= $endDays; ++$i) {
|
||||
$eDate = Date::formattedPHPToExcel(
|
||||
$year,
|
||||
$period,
|
||||
$i
|
||||
);
|
||||
$value = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
$salesValue = $invoiceValue = null;
|
||||
$incomeOrExpenditure = rand(-1, 1);
|
||||
if ($incomeOrExpenditure == -1) {
|
||||
$expenditure = rand(-500, -1000) * (1 + (rand(-1, 1) / 4));
|
||||
$income = null;
|
||||
} elseif ($incomeOrExpenditure == 1) {
|
||||
$expenditure = rand(-500, -1000) * (1 + (rand(-1, 1) / 4));
|
||||
$income = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
} else {
|
||||
$expenditure = null;
|
||||
$income = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
}
|
||||
$dataArray = [$year,
|
||||
$period,
|
||||
$country,
|
||||
$eDate,
|
||||
$income,
|
||||
$expenditure,
|
||||
];
|
||||
$spreadsheet->getActiveSheet()->fromArray($dataArray, null, 'A' . $row++);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
--$row;
|
||||
|
||||
// Set styling
|
||||
$helper->log('Set styling');
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setWrapText(true);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(12.5);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(10.5);
|
||||
$spreadsheet->getActiveSheet()->getStyle('D2:D' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD2);
|
||||
$spreadsheet->getActiveSheet()->getStyle('E2:F' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(14);
|
||||
$spreadsheet->getActiveSheet()->freezePane('A2');
|
||||
|
||||
// Set autofilter range
|
||||
$helper->log('Set autofilter range');
|
||||
// Always include the complete filter range!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
|
||||
// Set active filters
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$helper->log('Set active filters');
|
||||
// Filter the Country column on a filter value of Germany
|
||||
// As it's just a simple value filter, we can use FILTERTYPE_FILTER
|
||||
$autoFilter->getColumn('C')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'Germany'
|
||||
);
|
||||
// Filter the Date column on a filter value of the year to date
|
||||
$autoFilter->getColumn('D')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
null,
|
||||
Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER);
|
||||
// Display only sales values that are between 400 and 600
|
||||
$autoFilter->getColumn('E')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
|
||||
400
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
$autoFilter->getColumn('E')
|
||||
->setJoin(Column::AUTOFILTER_COLUMN_JOIN_AND)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,
|
||||
600
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
170
vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_display.php
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Shared\Date;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('PhpSpreadsheet Test Document')
|
||||
->setSubject('PhpSpreadsheet Test Document')
|
||||
->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
|
||||
->setKeywords('office PhpSpreadsheet php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create the worksheet
|
||||
$helper->log('Add data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Financial Year')
|
||||
->setCellValue('B1', 'Financial Period')
|
||||
->setCellValue('C1', 'Country')
|
||||
->setCellValue('D1', 'Date')
|
||||
->setCellValue('E1', 'Sales Value')
|
||||
->setCellValue('F1', 'Expenditure');
|
||||
$startYear = $endYear = $currentYear = date('Y');
|
||||
--$startYear;
|
||||
++$endYear;
|
||||
|
||||
$years = range($startYear, $endYear);
|
||||
$periods = range(1, 12);
|
||||
$countries = [
|
||||
'United States',
|
||||
'UK',
|
||||
'France',
|
||||
'Germany',
|
||||
'Italy',
|
||||
'Spain',
|
||||
'Portugal',
|
||||
'Japan',
|
||||
];
|
||||
|
||||
$row = 2;
|
||||
foreach ($years as $year) {
|
||||
foreach ($periods as $period) {
|
||||
foreach ($countries as $country) {
|
||||
$endDays = date('t', mktime(0, 0, 0, $period, 1, (int) $year));
|
||||
for ($i = 1; $i <= $endDays; ++$i) {
|
||||
$eDate = Date::formattedPHPToExcel(
|
||||
$year,
|
||||
$period,
|
||||
$i
|
||||
);
|
||||
$value = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
$salesValue = $invoiceValue = null;
|
||||
$incomeOrExpenditure = rand(-1, 1);
|
||||
if ($incomeOrExpenditure == -1) {
|
||||
$expenditure = rand(-500, -1000) * (1 + (rand(-1, 1) / 4));
|
||||
$income = null;
|
||||
} elseif ($incomeOrExpenditure == 1) {
|
||||
$expenditure = rand(-500, -1000) * (1 + (rand(-1, 1) / 4));
|
||||
$income = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
} else {
|
||||
$expenditure = null;
|
||||
$income = rand(500, 1000) * (1 + (rand(-1, 1) / 4));
|
||||
}
|
||||
$dataArray = [$year,
|
||||
$period,
|
||||
$country,
|
||||
$eDate,
|
||||
$income,
|
||||
$expenditure,
|
||||
];
|
||||
$spreadsheet->getActiveSheet()->fromArray($dataArray, null, 'A' . $row++);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
--$row;
|
||||
|
||||
// Set styling
|
||||
$helper->log('Set styling');
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setWrapText(true);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(12.5);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(10.5);
|
||||
$spreadsheet->getActiveSheet()->getStyle('D2:D' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD2);
|
||||
$spreadsheet->getActiveSheet()->getStyle('E2:F' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(14);
|
||||
$spreadsheet->getActiveSheet()->freezePane('A2');
|
||||
|
||||
// Set autofilter range
|
||||
$helper->log('Set autofilter range');
|
||||
// Always include the complete filter range!
|
||||
// Excel does support setting only the caption
|
||||
// row, but that's not a best practise...
|
||||
$spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
|
||||
|
||||
// Set active filters
|
||||
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
|
||||
$helper->log('Set active filters');
|
||||
// Filter the Country column on a filter value of countries beginning with the letter U (or Japan)
|
||||
// We use * as a wildcard, so specify as U* and using a wildcard requires customFilter
|
||||
$autoFilter->getColumn('C')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'u*'
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
$autoFilter->getColumn('C')
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
'japan'
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
|
||||
// Filter the Date column on a filter value of the first day of every period of the current year
|
||||
// We us a dateGroup ruletype for this, although it is still a standard filter
|
||||
foreach ($periods as $period) {
|
||||
$endDate = date('t', mktime(0, 0, 0, $period, 1, (int) $currentYear));
|
||||
|
||||
$autoFilter->getColumn('D')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
[
|
||||
'year' => $currentYear,
|
||||
'month' => $period,
|
||||
'day' => $endDate,
|
||||
]
|
||||
)
|
||||
->setRuleType(Rule::AUTOFILTER_RULETYPE_DATEGROUP);
|
||||
}
|
||||
// Display only sales values that are blank
|
||||
// Standard filter, operator equals, and value of NULL
|
||||
$autoFilter->getColumn('E')
|
||||
->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER)
|
||||
->createRule()
|
||||
->setRule(
|
||||
Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
|
||||
''
|
||||
);
|
||||
|
||||
// Execute filtering
|
||||
$helper->log('Execute filtering');
|
||||
$autoFilter->showHideRows();
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
// Display Results of filtering
|
||||
$helper->log('Display filtered rows');
|
||||
foreach ($spreadsheet->getActiveSheet()->getRowIterator() as $row) {
|
||||
if ($spreadsheet->getActiveSheet()->getRowDimension($row->getRowIndex())->getVisible()) {
|
||||
$helper->log(' Row number - ' . $row->getRowIndex());
|
||||
$helper->log($spreadsheet->getActiveSheet()->getCell('C' . $row->getRowIndex())->getValue());
|
||||
$helper->log($spreadsheet->getActiveSheet()->getCell('D' . $row->getRowIndex())->getFormattedValue());
|
||||
}
|
||||
}
|
||||
65
vendor/phpoffice/phpspreadsheet/samples/Basic/01_Simple.php
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()
|
||||
->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('PhpSpreadsheet Test Document')
|
||||
->setSubject('PhpSpreadsheet Test Document')
|
||||
->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
|
||||
->setKeywords('office PhpSpreadsheet php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A1', 'Hello')
|
||||
->setCellValue('B2', 'world!')
|
||||
->setCellValue('C1', 'Hello')
|
||||
->setCellValue('D2', 'world!');
|
||||
|
||||
// Miscellaneous glyphs, UTF-8
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A4', 'Miscellaneous glyphs')
|
||||
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A8', "Hello\nWorld");
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getRowDimension(8)
|
||||
->setRowHeight(-1);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('A8')
|
||||
->getAlignment()
|
||||
->setWrapText(true);
|
||||
|
||||
$value = "-ValueA\n-Value B\n-Value C";
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A10', $value);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getRowDimension(10)
|
||||
->setRowHeight(-1);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('A10')
|
||||
->getAlignment()
|
||||
->setWrapText(true);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('A10')
|
||||
->setQuotePrefix(true);
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setTitle('Simple');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
61
vendor/phpoffice/phpspreadsheet/samples/Basic/01_Simple_download_ods.php
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Helper\Sample;
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require_once __DIR__ . '/../../src/Bootstrap.php';
|
||||
|
||||
$helper = new Sample();
|
||||
if ($helper->isCli()) {
|
||||
$helper->log('This example should only be run from a Web Browser' . PHP_EOL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A1', 'Hello')
|
||||
->setCellValue('B2', 'world!')
|
||||
->setCellValue('C1', 'Hello')
|
||||
->setCellValue('D2', 'world!');
|
||||
|
||||
// Miscellaneous glyphs, UTF-8
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A4', 'Miscellaneous glyphs')
|
||||
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
|
||||
|
||||
// Rename worksheet
|
||||
$spreadsheet->getActiveSheet()->setTitle('Simple');
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
// Redirect output to a client’s web browser (Ods)
|
||||
header('Content-Type: application/vnd.oasis.opendocument.spreadsheet');
|
||||
header('Content-Disposition: attachment;filename="01simple.ods"');
|
||||
header('Cache-Control: max-age=0');
|
||||
// If you're serving to IE 9, then the following may be needed
|
||||
header('Cache-Control: max-age=1');
|
||||
|
||||
// If you're serving to IE over SSL, then the following may be needed
|
||||
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
|
||||
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
|
||||
header('Pragma: public'); // HTTP/1.0
|
||||
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Ods');
|
||||
$writer->save('php://output');
|
||||
exit;
|
||||
56
vendor/phpoffice/phpspreadsheet/samples/Basic/01_Simple_download_pdf.php
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Helper\Sample;
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require_once __DIR__ . '/../../src/Bootstrap.php';
|
||||
|
||||
$helper = new Sample();
|
||||
if ($helper->isCli()) {
|
||||
$helper->log('This example should only be run from a Web Browser' . PHP_EOL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('PDF Test Document')
|
||||
->setSubject('PDF Test Document')
|
||||
->setDescription('Test document for PDF, generated using PHP classes.')
|
||||
->setKeywords('pdf php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A1', 'Hello')
|
||||
->setCellValue('B2', 'world!')
|
||||
->setCellValue('C1', 'Hello')
|
||||
->setCellValue('D2', 'world!');
|
||||
|
||||
// Miscellaneous glyphs, UTF-8
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A4', 'Miscellaneous glyphs')
|
||||
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
|
||||
|
||||
// Rename worksheet
|
||||
$spreadsheet->getActiveSheet()->setTitle('Simple');
|
||||
$spreadsheet->getActiveSheet()->setShowGridLines(false);
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class);
|
||||
|
||||
// Redirect output to a client’s web browser (PDF)
|
||||
header('Content-Type: application/pdf');
|
||||
header('Content-Disposition: attachment;filename="01simple.pdf"');
|
||||
header('Cache-Control: max-age=0');
|
||||
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Pdf');
|
||||
$writer->save('php://output');
|
||||
exit;
|
||||
61
vendor/phpoffice/phpspreadsheet/samples/Basic/01_Simple_download_xls.php
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Helper\Sample;
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require_once __DIR__ . '/../../src/Bootstrap.php';
|
||||
|
||||
$helper = new Sample();
|
||||
if ($helper->isCli()) {
|
||||
$helper->log('This example should only be run from a Web Browser' . PHP_EOL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A1', 'Hello')
|
||||
->setCellValue('B2', 'world!')
|
||||
->setCellValue('C1', 'Hello')
|
||||
->setCellValue('D2', 'world!');
|
||||
|
||||
// Miscellaneous glyphs, UTF-8
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A4', 'Miscellaneous glyphs')
|
||||
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
|
||||
|
||||
// Rename worksheet
|
||||
$spreadsheet->getActiveSheet()->setTitle('Simple');
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
// Redirect output to a client’s web browser (Xls)
|
||||
header('Content-Type: application/vnd.ms-excel');
|
||||
header('Content-Disposition: attachment;filename="01simple.xls"');
|
||||
header('Cache-Control: max-age=0');
|
||||
// If you're serving to IE 9, then the following may be needed
|
||||
header('Cache-Control: max-age=1');
|
||||
|
||||
// If you're serving to IE over SSL, then the following may be needed
|
||||
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
|
||||
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
|
||||
header('Pragma: public'); // HTTP/1.0
|
||||
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
|
||||
$writer->save('php://output');
|
||||
exit;
|
||||
60
vendor/phpoffice/phpspreadsheet/samples/Basic/01_Simple_download_xlsx.php
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Helper\Sample;
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require_once __DIR__ . '/../../src/Bootstrap.php';
|
||||
|
||||
$helper = new Sample();
|
||||
if ($helper->isCli()) {
|
||||
$helper->log('This example should only be run from a Web Browser' . PHP_EOL);
|
||||
|
||||
return;
|
||||
}
|
||||
// Create new Spreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A1', 'Hello')
|
||||
->setCellValue('B2', 'world!')
|
||||
->setCellValue('C1', 'Hello')
|
||||
->setCellValue('D2', 'world!');
|
||||
|
||||
// Miscellaneous glyphs, UTF-8
|
||||
$spreadsheet->setActiveSheetIndex(0)
|
||||
->setCellValue('A4', 'Miscellaneous glyphs')
|
||||
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
|
||||
|
||||
// Rename worksheet
|
||||
$spreadsheet->getActiveSheet()->setTitle('Simple');
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
// Redirect output to a client’s web browser (Xlsx)
|
||||
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
||||
header('Content-Disposition: attachment;filename="01simple.xlsx"');
|
||||
header('Cache-Control: max-age=0');
|
||||
// If you're serving to IE 9, then the following may be needed
|
||||
header('Cache-Control: max-age=1');
|
||||
|
||||
// If you're serving to IE over SSL, then the following may be needed
|
||||
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
|
||||
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
|
||||
header('Pragma: public'); // HTTP/1.0
|
||||
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
|
||||
$writer->save('php://output');
|
||||
exit;
|
||||
162
vendor/phpoffice/phpspreadsheet/samples/Basic/02_Types.php
vendored
Normal file
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\RichText\RichText;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\Date;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Color;
|
||||
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()
|
||||
->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Set default font
|
||||
$helper->log('Set default font');
|
||||
$spreadsheet->getDefaultStyle()
|
||||
->getFont()
|
||||
->setName('Arial')
|
||||
->setSize(10);
|
||||
|
||||
// Add some data, resembling some different data types
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A1', 'String')
|
||||
->setCellValue('B1', 'Simple')
|
||||
->setCellValue('C1', 'PhpSpreadsheet');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A2', 'String')
|
||||
->setCellValue('B2', 'Symbols')
|
||||
->setCellValue('C2', '!+&=()~§±æþ');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A3', 'String')
|
||||
->setCellValue('B3', 'UTF-8')
|
||||
->setCellValue('C3', 'Создать MS Excel Книги из PHP скриптов');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A4', 'Number')
|
||||
->setCellValue('B4', 'Integer')
|
||||
->setCellValue('C4', 12);
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A5', 'Number')
|
||||
->setCellValue('B5', 'Float')
|
||||
->setCellValue('C5', 34.56);
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A6', 'Number')
|
||||
->setCellValue('B6', 'Negative')
|
||||
->setCellValue('C6', -7.89);
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A7', 'Boolean')
|
||||
->setCellValue('B7', 'True')
|
||||
->setCellValue('C7', true);
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A8', 'Boolean')
|
||||
->setCellValue('B8', 'False')
|
||||
->setCellValue('C8', false);
|
||||
|
||||
$dateTimeNow = time();
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A9', 'Date/Time')
|
||||
->setCellValue('B9', 'Date')
|
||||
->setCellValue('C9', Date::PHPToExcel($dateTimeNow));
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('C9')
|
||||
->getNumberFormat()
|
||||
->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD2);
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A10', 'Date/Time')
|
||||
->setCellValue('B10', 'Time')
|
||||
->setCellValue('C10', Date::PHPToExcel($dateTimeNow));
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('C10')
|
||||
->getNumberFormat()
|
||||
->setFormatCode(NumberFormat::FORMAT_DATE_TIME4);
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A11', 'Date/Time')
|
||||
->setCellValue('B11', 'Date and Time')
|
||||
->setCellValue('C11', Date::PHPToExcel($dateTimeNow));
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('C11')
|
||||
->getNumberFormat()
|
||||
->setFormatCode(NumberFormat::FORMAT_DATE_DATETIME);
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A12', 'NULL')
|
||||
->setCellValue('C12', null);
|
||||
|
||||
$richText = new RichText();
|
||||
$richText->createText('你好 ');
|
||||
|
||||
$payable = $richText->createTextRun('你 好 吗?');
|
||||
$payable->getFont()->setBold(true);
|
||||
$payable->getFont()->setItalic(true);
|
||||
$payable->getFont()->setColor(new Color(Color::COLOR_DARKGREEN));
|
||||
|
||||
$richText->createText(', unless specified otherwise on the invoice.');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A13', 'Rich Text')
|
||||
->setCellValue('C13', $richText);
|
||||
|
||||
$richText2 = new RichText();
|
||||
$richText2->createText("black text\n");
|
||||
|
||||
$red = $richText2->createTextRun('red text');
|
||||
$red->getFont()->setColor(new Color(Color::COLOR_RED));
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getCell('C14')
|
||||
->setValue($richText2);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('C14')
|
||||
->getAlignment()->setWrapText(true);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A17', 'Hyperlink');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('C17', 'PhpSpreadsheet Web Site');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getCell('C17')
|
||||
->getHyperlink()
|
||||
->setUrl('https://github.com/PHPOffice/PhpSpreadsheet')
|
||||
->setTooltip('Navigate to PhpSpreadsheet website');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('C18', '=HYPERLINK("mailto:abc@def.com","abc@def.com")');
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getColumnDimension('B')
|
||||
->setAutoSize(true);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getColumnDimension('C')
|
||||
->setAutoSize(true);
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()->setTitle('Datatypes');
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
81
vendor/phpoffice/phpspreadsheet/samples/Basic/03_Formulas.php
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data, we will use some formulas here
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A5', 'Sum:');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B1', 'Range #1')
|
||||
->setCellValue('B2', 3)
|
||||
->setCellValue('B3', 7)
|
||||
->setCellValue('B4', 13)
|
||||
->setCellValue('B5', '=SUM(B2:B4)');
|
||||
$helper->log('Sum of Range #1 is ' . $spreadsheet->getActiveSheet()->getCell('B5')->getCalculatedValue());
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C1', 'Range #2')
|
||||
->setCellValue('C2', 5)
|
||||
->setCellValue('C3', 11)
|
||||
->setCellValue('C4', 17)
|
||||
->setCellValue('C5', '=SUM(C2:C4)');
|
||||
$helper->log('Sum of Range #2 is ' . $spreadsheet->getActiveSheet()->getCell('C5')->getCalculatedValue());
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A7', 'Total of both ranges:');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('B7', '=SUM(B5:C5)');
|
||||
$helper->log('Sum of both Ranges is ' . $spreadsheet->getActiveSheet()->getCell('B7')->getCalculatedValue());
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A8', 'Minimum of both ranges:');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('B8', '=MIN(B2:C4)');
|
||||
$helper->log('Minimum value in either Range is ' . $spreadsheet->getActiveSheet()->getCell('B8')->getCalculatedValue());
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A9', 'Maximum of both ranges:');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('B9', '=MAX(B2:C4)');
|
||||
$helper->log('Maximum value in either Range is ' . $spreadsheet->getActiveSheet()->getCell('B9')->getCalculatedValue());
|
||||
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A10', 'Average of both ranges:');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('B10', '=AVERAGE(B2:C4)');
|
||||
$helper->log('Average value of both Ranges is ' . $spreadsheet->getActiveSheet()->getCell('B10')->getCalculatedValue());
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getColumnDimension('A')
|
||||
->setAutoSize(true);
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setTitle('Formulas');
|
||||
|
||||
//
|
||||
// If we set Pre Calculated Formulas to true then PhpSpreadsheet will calculate all formulae in the
|
||||
// workbook before saving. This adds time and memory overhead, and can cause some problems with formulae
|
||||
// using functions or features (such as array formulae) that aren't yet supported by the calculation engine
|
||||
// If the value is false (the default) for the Xlsx Writer, then MS Excel (or the application used to
|
||||
// open the file) will need to recalculate values itself to guarantee that the correct results are available.
|
||||
//
|
||||
//$writer->setPreCalculateFormulas(true);
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
64
vendor/phpoffice/phpspreadsheet/samples/Basic/04_Printing.php
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data, we will use printing features
|
||||
$helper->log('Add some data');
|
||||
for ($i = 1; $i < 200; ++$i) {
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A' . $i, $i);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B' . $i, 'Test value');
|
||||
}
|
||||
|
||||
// Set header and footer. When no different headers for odd/even are used, odd header is assumed.
|
||||
$helper->log('Set header/footer');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getHeaderFooter()
|
||||
->setOddHeader('&L&G&C&HPlease treat this document as confidential!');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getHeaderFooter()
|
||||
->setOddFooter('&L&B' . $spreadsheet->getProperties()->getTitle() . '&RPage &P of &N');
|
||||
|
||||
// Add a drawing to the header
|
||||
$helper->log('Add a drawing to the header');
|
||||
$drawing = new HeaderFooterDrawing();
|
||||
$drawing->setName('PhpSpreadsheet logo');
|
||||
$drawing->setPath(__DIR__ . '/../images/PhpSpreadsheet_logo.png');
|
||||
$drawing->setHeight(36);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getHeaderFooter()
|
||||
->addImage($drawing, HeaderFooter::IMAGE_HEADER_LEFT);
|
||||
|
||||
// Set page orientation and size
|
||||
$helper->log('Set page orientation and size');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getPageSetup()
|
||||
->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getPageSetup()
|
||||
->setPaperSize(PageSetup::PAPERSIZE_A4);
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()->setTitle('Printing');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
7
vendor/phpoffice/phpspreadsheet/samples/Basic/05_Feature_demo.php
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
$spreadsheet = require __DIR__ . '/../templates/sampleSpreadsheet.php';
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
8
vendor/phpoffice/phpspreadsheet/samples/Basic/06_Largescale.php
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$spreadsheet = require __DIR__ . '/../templates/largeSpreadsheet.php';
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
19
vendor/phpoffice/phpspreadsheet/samples/Basic/07_Reader.php
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create temporary file that will be read
|
||||
$sampleSpreadsheet = require __DIR__ . '/../templates/sampleSpreadsheet.php';
|
||||
$filename = $helper->getTemporaryFilename();
|
||||
$writer = new Xlsx($sampleSpreadsheet);
|
||||
$writer->save($filename);
|
||||
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheet = IOFactory::load($filename);
|
||||
$helper->logRead('Xlsx', $filename, $callStartTime);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
115
vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting.php
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Color;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Conditional;
|
||||
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create a first sheet, representing sales data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Description')
|
||||
->setCellValue('B1', 'Amount');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A2', 'Paycheck received')
|
||||
->setCellValue('B2', 100);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A3', 'Cup of coffee bought')
|
||||
->setCellValue('B3', -1.5);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A4', 'Cup of coffee bought')
|
||||
->setCellValue('B4', -1.5);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A5', 'Cup of tea bought')
|
||||
->setCellValue('B5', -1.2);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A6', 'Found some money')
|
||||
->setCellValue('B6', 8);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A7', 'Total:')
|
||||
->setCellValue('B7', '=SUM(B2:B6)');
|
||||
|
||||
// Set column widths
|
||||
$helper->log('Set column widths');
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(12);
|
||||
|
||||
// Add conditional formatting
|
||||
$helper->log('Add conditional formatting');
|
||||
$conditional1 = new Conditional();
|
||||
$conditional1->setConditionType(Conditional::CONDITION_CELLIS)
|
||||
->setOperatorType(Conditional::OPERATOR_BETWEEN)
|
||||
->addCondition('200')
|
||||
->addCondition('400');
|
||||
$conditional1->getStyle()->getFont()->getColor()->setARGB(Color::COLOR_YELLOW);
|
||||
$conditional1->getStyle()->getFont()->setBold(true);
|
||||
$conditional1->getStyle()->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
|
||||
|
||||
$conditional2 = new Conditional();
|
||||
$conditional2->setConditionType(Conditional::CONDITION_CELLIS)
|
||||
->setOperatorType(Conditional::OPERATOR_LESSTHAN)
|
||||
->addCondition('0');
|
||||
$conditional2->getStyle()->getFont()->getColor()->setARGB(Color::COLOR_RED);
|
||||
$conditional2->getStyle()->getFont()->setItalic(true);
|
||||
$conditional2->getStyle()->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
|
||||
|
||||
$conditional3 = new Conditional();
|
||||
$conditional3->setConditionType(Conditional::CONDITION_CELLIS)
|
||||
->setOperatorType(Conditional::OPERATOR_GREATERTHANOREQUAL)
|
||||
->addCondition('0');
|
||||
$conditional3->getStyle()->getFont()->getColor()->setARGB(Color::COLOR_GREEN);
|
||||
$conditional3->getStyle()->getFont()->setItalic(true);
|
||||
$conditional3->getStyle()->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
|
||||
|
||||
$conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('B2')->getConditionalStyles();
|
||||
$conditionalStyles[] = $conditional1;
|
||||
$conditionalStyles[] = $conditional2;
|
||||
$conditionalStyles[] = $conditional3;
|
||||
$spreadsheet->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles);
|
||||
|
||||
// duplicate the conditional styles across a range of cells
|
||||
$helper->log('Duplicate the conditional formatting across a range of cells');
|
||||
$spreadsheet->getActiveSheet()->duplicateConditionalStyle(
|
||||
$spreadsheet->getActiveSheet()->getStyle('B2')->getConditionalStyles(),
|
||||
'B3:B7'
|
||||
);
|
||||
|
||||
// Set fonts
|
||||
$helper->log('Set fonts');
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:B1')->getFont()->setBold(true);
|
||||
//$spreadsheet->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
|
||||
$spreadsheet->getActiveSheet()->getStyle('A7:B7')->getFont()->setBold(true);
|
||||
//$spreadsheet->getActiveSheet()->getStyle('B7')->getFont()->setBold(true);
|
||||
// Set header and footer. When no different headers for odd/even are used, odd header is assumed.
|
||||
$helper->log('Set header/footer');
|
||||
$spreadsheet->getActiveSheet()->getHeaderFooter()->setOddHeader('&L&BPersonal cash register&RPrinted on &D');
|
||||
$spreadsheet->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $spreadsheet->getProperties()->getTitle() . '&RPage &P of &N');
|
||||
|
||||
// Set page orientation and size
|
||||
$helper->log('Set page orientation and size');
|
||||
$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_PORTRAIT);
|
||||
$spreadsheet->getActiveSheet()->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4);
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()->setTitle('Invoice');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
70
vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting_2.php
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Color;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Conditional;
|
||||
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create a first sheet, representing sales data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->setCellValue('A1', '-0.5')
|
||||
->setCellValue('A2', '-0.25')
|
||||
->setCellValue('A3', '0.0')
|
||||
->setCellValue('A4', '0.25')
|
||||
->setCellValue('A5', '0.5')
|
||||
->setCellValue('A6', '0.75')
|
||||
->setCellValue('A7', '1.0')
|
||||
->setCellValue('A8', '1.25');
|
||||
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:A8')
|
||||
->getNumberFormat()
|
||||
->setFormatCode(
|
||||
NumberFormat::FORMAT_PERCENTAGE_00
|
||||
);
|
||||
|
||||
// Add conditional formatting
|
||||
$helper->log('Add conditional formatting');
|
||||
$conditional1 = new Conditional();
|
||||
$conditional1->setConditionType(Conditional::CONDITION_CELLIS)
|
||||
->setOperatorType(Conditional::OPERATOR_LESSTHAN)
|
||||
->addCondition('0');
|
||||
$conditional1->getStyle()->getFont()->getColor()->setARGB(Color::COLOR_RED);
|
||||
|
||||
$conditional3 = new Conditional();
|
||||
$conditional3->setConditionType(Conditional::CONDITION_CELLIS)
|
||||
->setOperatorType(Conditional::OPERATOR_GREATERTHANOREQUAL)
|
||||
->addCondition('1');
|
||||
$conditional3->getStyle()->getFont()->getColor()->setARGB(Color::COLOR_GREEN);
|
||||
|
||||
$conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('A1')->getConditionalStyles();
|
||||
$conditionalStyles[] = $conditional1;
|
||||
$conditionalStyles[] = $conditional3;
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1')->setConditionalStyles($conditionalStyles);
|
||||
|
||||
// duplicate the conditional styles across a range of cells
|
||||
$helper->log('Duplicate the conditional formatting across a range of cells');
|
||||
$spreadsheet->getActiveSheet()->duplicateConditionalStyle(
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1')->getConditionalStyles(),
|
||||
'A2:A8'
|
||||
);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
63
vendor/phpoffice/phpspreadsheet/samples/Basic/09_Pagebreaks.php
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create a first sheet
|
||||
$helper->log('Add data and page breaks');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Firstname')
|
||||
->setCellValue('B1', 'Lastname')
|
||||
->setCellValue('C1', 'Phone')
|
||||
->setCellValue('D1', 'Fax')
|
||||
->setCellValue('E1', 'Is Client ?');
|
||||
|
||||
// Add data
|
||||
for ($i = 2; $i <= 50; ++$i) {
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A' . $i, "FName $i");
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B' . $i, "LName $i");
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C' . $i, "PhoneNo $i");
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D' . $i, "FaxNo $i");
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E' . $i, true);
|
||||
|
||||
// Add page breaks every 10 rows
|
||||
if ($i % 10 == 0) {
|
||||
// Add a page break
|
||||
$spreadsheet->getActiveSheet()->setBreak('A' . $i, Worksheet::BREAK_ROW);
|
||||
}
|
||||
}
|
||||
|
||||
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setTitle('Printing Options');
|
||||
|
||||
// Set print headers
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getHeaderFooter()->setOddHeader('&C&24&K0000FF&B&U&A');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getHeaderFooter()->setEvenHeader('&C&24&K0000FF&B&U&A');
|
||||
|
||||
// Set print footers
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getHeaderFooter()->setOddFooter('&R&D &T&C&F&LPage &P / &N');
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getHeaderFooter()->setEvenFooter('&L&D &T&C&F&RPage &P / &N');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
48
vendor/phpoffice/phpspreadsheet/samples/Basic/11_Documentsecurity.php
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Hello');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B2', 'world!');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C1', 'Hello');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D2', 'world!');
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()->setTitle('Simple');
|
||||
|
||||
// Set document security
|
||||
$helper->log('Set document security');
|
||||
$spreadsheet->getSecurity()->setLockWindows(true);
|
||||
$spreadsheet->getSecurity()->setLockStructure(true);
|
||||
$spreadsheet->getSecurity()->setWorkbookPassword('PhpSpreadsheet');
|
||||
|
||||
// Set sheet security
|
||||
$helper->log('Set sheet security');
|
||||
$spreadsheet->getActiveSheet()->getProtection()->setPassword('PhpSpreadsheet');
|
||||
$spreadsheet->getActiveSheet()->getProtection()->setSheet(true); // This should be enabled in order to enable any of the following!
|
||||
$spreadsheet->getActiveSheet()->getProtection()->setSort(true);
|
||||
$spreadsheet->getActiveSheet()->getProtection()->setInsertRows(true);
|
||||
$spreadsheet->getActiveSheet()->getProtection()->setFormatCells(true);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
47
vendor/phpoffice/phpspreadsheet/samples/Basic/12_CellProtection.php
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Protection;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Mark Baker')
|
||||
->setLastModifiedBy('Mark Baker')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Crouching');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B1', 'Tiger');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A2', 'Hidden');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B2', 'Dragon');
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()->setTitle('Simple');
|
||||
|
||||
// Set document security
|
||||
$helper->log('Set cell protection');
|
||||
|
||||
// Set sheet security
|
||||
$helper->log('Set sheet security');
|
||||
$spreadsheet->getActiveSheet()->getProtection()->setSheet(true);
|
||||
$spreadsheet->getActiveSheet()
|
||||
->getStyle('A2:B2')
|
||||
->getProtection()->setLocked(
|
||||
Protection::PROTECTION_UNPROTECTED
|
||||
);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
176
vendor/phpoffice/phpspreadsheet/samples/Basic/13_Calculation.php
vendored
Normal file
@@ -0,0 +1,176 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
mt_srand(1234567890);
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// List functions
|
||||
$helper->log('List implemented functions');
|
||||
$calc = Calculation::getInstance();
|
||||
print_r($calc->getImplementedFunctionNames());
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Add some data, we will use some formulas here
|
||||
$helper->log('Add some data and formulas');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A14', 'Count:')
|
||||
->setCellValue('A15', 'Sum:')
|
||||
->setCellValue('A16', 'Max:')
|
||||
->setCellValue('A17', 'Min:')
|
||||
->setCellValue('A18', 'Average:')
|
||||
->setCellValue('A19', 'Median:')
|
||||
->setCellValue('A20', 'Mode:');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A22', 'CountA:')
|
||||
->setCellValue('A23', 'MaxA:')
|
||||
->setCellValue('A24', 'MinA:');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A26', 'StDev:')
|
||||
->setCellValue('A27', 'StDevA:')
|
||||
->setCellValue('A28', 'StDevP:')
|
||||
->setCellValue('A29', 'StDevPA:');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A31', 'DevSq:')
|
||||
->setCellValue('A32', 'Var:')
|
||||
->setCellValue('A33', 'VarA:')
|
||||
->setCellValue('A34', 'VarP:')
|
||||
->setCellValue('A35', 'VarPA:');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A37', 'Date:');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B1', 'Range 1')
|
||||
->setCellValue('B2', 2)
|
||||
->setCellValue('B3', 8)
|
||||
->setCellValue('B4', 10)
|
||||
->setCellValue('B5', true)
|
||||
->setCellValue('B6', false)
|
||||
->setCellValue('B7', 'Text String')
|
||||
->setCellValue('B9', '22')
|
||||
->setCellValue('B10', 4)
|
||||
->setCellValue('B11', 6)
|
||||
->setCellValue('B12', 12);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B14', '=COUNT(B2:B12)')
|
||||
->setCellValue('B15', '=SUM(B2:B12)')
|
||||
->setCellValue('B16', '=MAX(B2:B12)')
|
||||
->setCellValue('B17', '=MIN(B2:B12)')
|
||||
->setCellValue('B18', '=AVERAGE(B2:B12)')
|
||||
->setCellValue('B19', '=MEDIAN(B2:B12)')
|
||||
->setCellValue('B20', '=MODE(B2:B12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B22', '=COUNTA(B2:B12)')
|
||||
->setCellValue('B23', '=MAXA(B2:B12)')
|
||||
->setCellValue('B24', '=MINA(B2:B12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B26', '=STDEV(B2:B12)')
|
||||
->setCellValue('B27', '=STDEVA(B2:B12)')
|
||||
->setCellValue('B28', '=STDEVP(B2:B12)')
|
||||
->setCellValue('B29', '=STDEVPA(B2:B12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B31', '=DEVSQ(B2:B12)')
|
||||
->setCellValue('B32', '=VAR(B2:B12)')
|
||||
->setCellValue('B33', '=VARA(B2:B12)')
|
||||
->setCellValue('B34', '=VARP(B2:B12)')
|
||||
->setCellValue('B35', '=VARPA(B2:B12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B37', '=DATE(2007, 12, 21)')
|
||||
->setCellValue('B38', '=DATEDIF( DATE(2007, 12, 21), DATE(2007, 12, 22), "D" )')
|
||||
->setCellValue('B39', '=DATEVALUE("01-Feb-2006 10:06 AM")')
|
||||
->setCellValue('B40', '=DAY( DATE(2006, 1, 2) )')
|
||||
->setCellValue('B41', '=DAYS360( DATE(2002, 2, 3), DATE(2005, 5, 31) )');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C1', 'Range 2')
|
||||
->setCellValue('C2', 1)
|
||||
->setCellValue('C3', 2)
|
||||
->setCellValue('C4', 2)
|
||||
->setCellValue('C5', 3)
|
||||
->setCellValue('C6', 3)
|
||||
->setCellValue('C7', 3)
|
||||
->setCellValue('C8', '0')
|
||||
->setCellValue('C9', 4)
|
||||
->setCellValue('C10', 4)
|
||||
->setCellValue('C11', 4)
|
||||
->setCellValue('C12', 4);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C14', '=COUNT(C2:C12)')
|
||||
->setCellValue('C15', '=SUM(C2:C12)')
|
||||
->setCellValue('C16', '=MAX(C2:C12)')
|
||||
->setCellValue('C17', '=MIN(C2:C12)')
|
||||
->setCellValue('C18', '=AVERAGE(C2:C12)')
|
||||
->setCellValue('C19', '=MEDIAN(C2:C12)')
|
||||
->setCellValue('C20', '=MODE(C2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C22', '=COUNTA(C2:C12)')
|
||||
->setCellValue('C23', '=MAXA(C2:C12)')
|
||||
->setCellValue('C24', '=MINA(C2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C26', '=STDEV(C2:C12)')
|
||||
->setCellValue('C27', '=STDEVA(C2:C12)')
|
||||
->setCellValue('C28', '=STDEVP(C2:C12)')
|
||||
->setCellValue('C29', '=STDEVPA(C2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C31', '=DEVSQ(C2:C12)')
|
||||
->setCellValue('C32', '=VAR(C2:C12)')
|
||||
->setCellValue('C33', '=VARA(C2:C12)')
|
||||
->setCellValue('C34', '=VARP(C2:C12)')
|
||||
->setCellValue('C35', '=VARPA(C2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D1', 'Range 3')
|
||||
->setCellValue('D2', 2)
|
||||
->setCellValue('D3', 3)
|
||||
->setCellValue('D4', 4);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D14', '=((D2 * D3) + D4) & " should be 10"');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E12', 'Other functions')
|
||||
->setCellValue('E14', '=PI()')
|
||||
->setCellValue('E15', '=RAND()')
|
||||
->setCellValue('E16', '=RANDBETWEEN(5, 10)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E17', 'Count of both ranges:')
|
||||
->setCellValue('F17', '=COUNT(B2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E18', 'Total of both ranges:')
|
||||
->setCellValue('F18', '=SUM(B2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E19', 'Maximum of both ranges:')
|
||||
->setCellValue('F19', '=MAX(B2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E20', 'Minimum of both ranges:')
|
||||
->setCellValue('F20', '=MIN(B2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E21', 'Average of both ranges:')
|
||||
->setCellValue('F21', '=AVERAGE(B2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E22', 'Median of both ranges:')
|
||||
->setCellValue('F22', '=MEDIAN(B2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E23', 'Mode of both ranges:')
|
||||
->setCellValue('F23', '=MODE(B2:C12)');
|
||||
|
||||
// Calculated data
|
||||
$helper->log('Calculated data');
|
||||
for ($col = 'B'; $col != 'G'; ++$col) {
|
||||
for ($row = 14; $row <= 41; ++$row) {
|
||||
if ((($formula = $spreadsheet->getActiveSheet()->getCell($col . $row)->getValue()) !== null) &&
|
||||
($formula[0] == '=')) {
|
||||
$helper->log('Value of ' . $col . $row . ' [' . $formula . ']: ' . $spreadsheet->getActiveSheet()->getCell($col . $row)->getCalculatedValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// If we set Pre Calculated Formulas to true then PhpSpreadsheet will calculate all formulae in the
|
||||
// workbook before saving. This adds time and memory overhead, and can cause some problems with formulae
|
||||
// using functions or features (such as array formulae) that aren't yet supported by the calculation engine
|
||||
// If the value is false (the default) for the Xlsx Writer, then MS Excel (or the application used to
|
||||
// open the file) will need to recalculate values itself to guarantee that the correct results are available.
|
||||
//
|
||||
//$writer->setPreCalculateFormulas(true);
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
33
vendor/phpoffice/phpspreadsheet/samples/Basic/13_CalculationCyclicFormulae.php
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Add some data, we will use some formulas here
|
||||
$helper->log('Add some data and formulas');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', '=B1')
|
||||
->setCellValue('A2', '=B2+1')
|
||||
->setCellValue('B1', '=A1+1')
|
||||
->setCellValue('B2', '=A2');
|
||||
|
||||
Calculation::getInstance($spreadsheet)->cyclicFormulaCount = 100;
|
||||
|
||||
// Calculated data
|
||||
$helper->log('Calculated data');
|
||||
for ($row = 1; $row <= 2; ++$row) {
|
||||
for ($col = 'A'; $col != 'C'; ++$col) {
|
||||
if ((($formula = $spreadsheet->getActiveSheet()->getCell($col . $row)->getValue()) !== null) &&
|
||||
($formula[0] == '=')) {
|
||||
$helper->log('Value of ' . $col . $row . ' [' . $formula . ']: ' . $spreadsheet->getActiveSheet()->getCell($col . $row)->getCalculatedValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
13
vendor/phpoffice/phpspreadsheet/samples/Basic/14_Xls.php
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
$spreadsheet = require __DIR__ . '/../templates/sampleSpreadsheet.php';
|
||||
|
||||
$filename = $helper->getFilename(__FILE__, 'xls');
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
|
||||
|
||||
$callStartTime = microtime(true);
|
||||
$writer->save($filename);
|
||||
$helper->logWrite($writer, $filename, $callStartTime);
|
||||
80
vendor/phpoffice/phpspreadsheet/samples/Basic/15_Datavalidation.php
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Create a first sheet
|
||||
$helper->log('Add data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Cell B3 and B5 contain data validation...')
|
||||
->setCellValue('A3', 'Number:')
|
||||
->setCellValue('B3', '10')
|
||||
->setCellValue('A5', 'List:')
|
||||
->setCellValue('B5', 'Item A')
|
||||
->setCellValue('A7', 'List #2:')
|
||||
->setCellValue('B7', 'Item #2')
|
||||
->setCellValue('D2', 'Item #1')
|
||||
->setCellValue('D3', 'Item #2')
|
||||
->setCellValue('D4', 'Item #3')
|
||||
->setCellValue('D5', 'Item #4')
|
||||
->setCellValue('D6', 'Item #5');
|
||||
|
||||
// Set data validation
|
||||
$helper->log('Set data validation');
|
||||
$validation = $spreadsheet->getActiveSheet()->getCell('B3')->getDataValidation();
|
||||
$validation->setType(DataValidation::TYPE_WHOLE);
|
||||
$validation->setErrorStyle(DataValidation::STYLE_STOP);
|
||||
$validation->setAllowBlank(true);
|
||||
$validation->setShowInputMessage(true);
|
||||
$validation->setShowErrorMessage(true);
|
||||
$validation->setErrorTitle('Input error');
|
||||
$validation->setError('Only numbers between 10 and 20 are allowed!');
|
||||
$validation->setPromptTitle('Allowed input');
|
||||
$validation->setPrompt('Only numbers between 10 and 20 are allowed.');
|
||||
$validation->setFormula1(10);
|
||||
$validation->setFormula2(20);
|
||||
|
||||
$validation = $spreadsheet->getActiveSheet()->getCell('B5')->getDataValidation();
|
||||
$validation->setType(DataValidation::TYPE_LIST);
|
||||
$validation->setErrorStyle(DataValidation::STYLE_INFORMATION);
|
||||
$validation->setAllowBlank(false);
|
||||
$validation->setShowInputMessage(true);
|
||||
$validation->setShowErrorMessage(true);
|
||||
$validation->setShowDropDown(true);
|
||||
$validation->setErrorTitle('Input error');
|
||||
$validation->setError('Value is not in list.');
|
||||
$validation->setPromptTitle('Pick from list');
|
||||
$validation->setPrompt('Please pick a value from the drop-down list.');
|
||||
$validation->setFormula1('"Item A,Item B,Item C"'); // Make sure to put the list items between " and " if your list is simply a comma-separated list of values !!!
|
||||
|
||||
$validation = $spreadsheet->getActiveSheet()->getCell('B7')->getDataValidation();
|
||||
$validation->setType(DataValidation::TYPE_LIST);
|
||||
$validation->setErrorStyle(DataValidation::STYLE_INFORMATION);
|
||||
$validation->setAllowBlank(false);
|
||||
$validation->setShowInputMessage(true);
|
||||
$validation->setShowErrorMessage(true);
|
||||
$validation->setShowDropDown(true);
|
||||
$validation->setErrorTitle('Input error');
|
||||
$validation->setError('Value is not in list.');
|
||||
$validation->setPromptTitle('Pick from list');
|
||||
$validation->setPrompt('Please pick a value from the drop-down list.');
|
||||
$validation->setFormula1('$D$2:$D$6'); // Make sure NOT to put a range of cells or a formula between " and "
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
41
vendor/phpoffice/phpspreadsheet/samples/Basic/16_Csv.php
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
$spreadsheet = require __DIR__ . '/../templates/sampleSpreadsheet.php';
|
||||
|
||||
$helper->log('Write to CSV format');
|
||||
/** @var \PhpOffice\PhpSpreadsheet\Writer\Csv $writer */
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Csv')->setDelimiter(',')
|
||||
->setEnclosure('"')
|
||||
->setSheetIndex(0);
|
||||
|
||||
$callStartTime = microtime(true);
|
||||
$filename = $helper->getTemporaryFilename('csv');
|
||||
$writer->save($filename);
|
||||
$helper->logWrite($writer, $filename, $callStartTime);
|
||||
|
||||
$helper->log('Read from CSV format');
|
||||
|
||||
/** @var \PhpOffice\PhpSpreadsheet\Reader\Csv $reader */
|
||||
$reader = IOFactory::createReader('Csv')->setDelimiter(',')
|
||||
->setEnclosure('"')
|
||||
->setSheetIndex(0);
|
||||
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheetFromCSV = $reader->load($filename);
|
||||
$helper->logRead('Csv', $filename, $callStartTime);
|
||||
|
||||
// Write Xlsx
|
||||
$helper->write($spreadsheetFromCSV, __FILE__, ['Xlsx']);
|
||||
|
||||
// Write CSV
|
||||
$filenameCSV = $helper->getFilename(__FILE__, 'csv');
|
||||
/** @var \PhpOffice\PhpSpreadsheet\Writer\Csv $writerCSV */
|
||||
$writerCSV = IOFactory::createWriter($spreadsheetFromCSV, 'Csv');
|
||||
$writerCSV->setExcelCompatibility(true);
|
||||
|
||||
$callStartTime = microtime(true);
|
||||
$writerCSV->save($filenameCSV);
|
||||
$helper->logWrite($writerCSV, $filenameCSV, $callStartTime);
|
||||
13
vendor/phpoffice/phpspreadsheet/samples/Basic/17_Html.php
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
$spreadsheet = require __DIR__ . '/../templates/sampleSpreadsheet.php';
|
||||
|
||||
$filename = $helper->getFilename(__FILE__, 'html');
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Html');
|
||||
|
||||
$callStartTime = microtime(true);
|
||||
$writer->save($filename);
|
||||
$helper->logWrite($writer, $filename, $callStartTime);
|
||||
69
vendor/phpoffice/phpspreadsheet/samples/Basic/18_Extendedcalculation.php
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// List functions
|
||||
$helper->log('List implemented functions');
|
||||
$calc = Calculation::getInstance();
|
||||
print_r($calc->getImplementedFunctionNames());
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Add some data, we will use some formulas here
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A14', 'Count:');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B1', 'Range 1');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B2', 2);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B3', 8);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B4', 10);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B5', true);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B6', false);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B7', 'Text String');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B9', '22');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B10', 4);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B11', 6);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B12', 12);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B14', '=COUNT(B2:B12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C1', 'Range 2');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C2', 1);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C3', 2);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C4', 2);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C5', 3);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C6', 3);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C7', 3);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C8', '0');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C9', 4);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C10', 4);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C11', 4);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C12', 4);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('C14', '=COUNT(C2:C12)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D1', 'Range 3');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D2', 2);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D3', 3);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D4', 4);
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('D5', '=((D2 * D3) + D4) & " should be 10"');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E1', 'Other functions');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E2', '=PI()');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E3', '=RAND()');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E4', '=RANDBETWEEN(5, 10)');
|
||||
|
||||
$spreadsheet->getActiveSheet()->setCellValue('E14', 'Count of both ranges:');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('F14', '=COUNT(B2:C12)');
|
||||
|
||||
// Calculated data
|
||||
$helper->log('Calculated data');
|
||||
$helper->log('Value of B14 [=COUNT(B2:B12)]: ' . $spreadsheet->getActiveSheet()->getCell('B14')->getCalculatedValue());
|
||||
|
||||
$helper->logEndingNotes();
|
||||
70
vendor/phpoffice/phpspreadsheet/samples/Basic/19_Namedrange.php
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\NamedRange;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Firstname:')
|
||||
->setCellValue('A2', 'Lastname:')
|
||||
->setCellValue('A3', 'Fullname:')
|
||||
->setCellValue('B1', 'Maarten')
|
||||
->setCellValue('B2', 'Balliauw')
|
||||
->setCellValue('B3', '=B1 & " " & B2');
|
||||
|
||||
// Define named ranges
|
||||
$helper->log('Define named ranges');
|
||||
$spreadsheet->addNamedRange(new NamedRange('PersonName', $spreadsheet->getActiveSheet(), 'B1'));
|
||||
$spreadsheet->addNamedRange(new NamedRange('PersonLN', $spreadsheet->getActiveSheet(), 'B2'));
|
||||
|
||||
// Rename named ranges
|
||||
$helper->log('Rename named ranges');
|
||||
$spreadsheet->getNamedRange('PersonName')->setName('PersonFN');
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()->setTitle('Person');
|
||||
|
||||
// Create a new worksheet, after the default sheet
|
||||
$helper->log('Create new Worksheet object');
|
||||
$spreadsheet->createSheet();
|
||||
|
||||
// Add some data to the second sheet, resembling some different data types
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(1);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Firstname:')
|
||||
->setCellValue('A2', 'Lastname:')
|
||||
->setCellValue('A3', 'Fullname:')
|
||||
->setCellValue('B1', '=PersonFN')
|
||||
->setCellValue('B2', '=PersonLN')
|
||||
->setCellValue('B3', '=PersonFN & " " & PersonLN');
|
||||
|
||||
// Resolve range
|
||||
$helper->log('Resolve range');
|
||||
$helper->log('Cell B1 {=PersonFN}: ' . $spreadsheet->getActiveSheet()->getCell('B1')->getCalculatedValue());
|
||||
$helper->log('Cell B3 {=PersonFN & " " & PersonLN}: ' . $spreadsheet->getActiveSheet()->getCell('B3')->getCalculatedValue());
|
||||
$helper->log('Cell Person!B1: ' . $spreadsheet->getActiveSheet()->getCell('Person!B1')->getCalculatedValue());
|
||||
|
||||
// Rename worksheet
|
||||
$helper->log('Rename worksheet');
|
||||
$spreadsheet->getActiveSheet()->setTitle('Person (cloned)');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
13
vendor/phpoffice/phpspreadsheet/samples/Basic/20_Read_Excel2003XML.php
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$filename = __DIR__ . '/../templates/Excel2003XMLTest.xml';
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheet = IOFactory::load($filename);
|
||||
$helper->logRead('Xml', $filename, $callStartTime);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
13
vendor/phpoffice/phpspreadsheet/samples/Basic/20_Read_Gnumeric.php
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$filename = __DIR__ . '/../templates/GnumericTest.gnumeric';
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheet = IOFactory::load($filename);
|
||||
$helper->logRead('Gnumeric', $filename, $callStartTime);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
13
vendor/phpoffice/phpspreadsheet/samples/Basic/20_Read_Ods.php
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$filename = __DIR__ . '/../templates/OOCalcTest.ods';
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheet = IOFactory::load($filename);
|
||||
$helper->logRead('Ods', $filename, $callStartTime);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
13
vendor/phpoffice/phpspreadsheet/samples/Basic/20_Read_Sylk.php
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$filename = __DIR__ . '/../templates/SylkTest.slk';
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheet = IOFactory::load($filename);
|
||||
$helper->logRead('Slk', $filename, $callStartTime);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
22
vendor/phpoffice/phpspreadsheet/samples/Basic/20_Read_Xls.php
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$spreadsheet = require __DIR__ . '/../templates/sampleSpreadsheet.php';
|
||||
|
||||
// Write temporary file
|
||||
$filename = $helper->getTemporaryFilename('xls');
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
|
||||
$callStartTime = microtime(true);
|
||||
$writer->save($filename);
|
||||
$helper->logWrite($writer, $filename, $callStartTime);
|
||||
|
||||
// Read Xls file
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheet = IOFactory::load($filename);
|
||||
$helper->logRead('Xls', $filename, $callStartTime);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
48
vendor/phpoffice/phpspreadsheet/samples/Basic/22_Heavily_formatted.php
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Border;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
$spreadsheet->getActiveSheet()->getStyle('A1:T100')->applyFromArray(
|
||||
['fill' => [
|
||||
'fillType' => Fill::FILL_SOLID,
|
||||
'color' => ['argb' => 'FFCCFFCC'],
|
||||
],
|
||||
'borders' => [
|
||||
'bottom' => ['borderStyle' => Border::BORDER_THIN],
|
||||
'right' => ['borderStyle' => Border::BORDER_MEDIUM],
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$spreadsheet->getActiveSheet()->getStyle('C5:R95')->applyFromArray(
|
||||
['fill' => [
|
||||
'fillType' => Fill::FILL_SOLID,
|
||||
'color' => ['argb' => 'FFFFFF00'],
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
59
vendor/phpoffice/phpspreadsheet/samples/Basic/23_Sharedstyles.php
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Border;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Style;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Add some data
|
||||
$helper->log('Add some data');
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
|
||||
$sharedStyle1 = new Style();
|
||||
$sharedStyle2 = new Style();
|
||||
|
||||
$sharedStyle1->applyFromArray(
|
||||
['fill' => [
|
||||
'fillType' => Fill::FILL_SOLID,
|
||||
'color' => ['argb' => 'FFCCFFCC'],
|
||||
],
|
||||
'borders' => [
|
||||
'bottom' => ['borderStyle' => Border::BORDER_THIN],
|
||||
'right' => ['borderStyle' => Border::BORDER_MEDIUM],
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$sharedStyle2->applyFromArray(
|
||||
['fill' => [
|
||||
'fillType' => Fill::FILL_SOLID,
|
||||
'color' => ['argb' => 'FFFFFF00'],
|
||||
],
|
||||
'borders' => [
|
||||
'bottom' => ['borderStyle' => Border::BORDER_THIN],
|
||||
'right' => ['borderStyle' => Border::BORDER_MEDIUM],
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$spreadsheet->getActiveSheet()->duplicateStyle($sharedStyle1, 'A1:T100');
|
||||
$spreadsheet->getActiveSheet()->duplicateStyle($sharedStyle2, 'C5:R95');
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
41
vendor/phpoffice/phpspreadsheet/samples/Basic/24_Readfilter.php
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheet;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\IReadFilter;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Write temporary file
|
||||
$largeSpreadsheet = require __DIR__ . '/../templates/largeSpreadsheet.php';
|
||||
$writer = new Xlsx($largeSpreadsheet);
|
||||
$filename = $helper->getTemporaryFilename();
|
||||
$callStartTime = microtime(true);
|
||||
$writer->save($filename);
|
||||
$helper->logWrite($writer, $filename, $callStartTime);
|
||||
|
||||
class MyReadFilter implements IReadFilter
|
||||
{
|
||||
public function readCell($column, $row, $worksheetName = '')
|
||||
{
|
||||
// Read title row and rows 20 - 30
|
||||
if ($row == 1 || ($row >= 20 && $row <= 30)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$helper->log('Load from Xlsx file');
|
||||
$reader = IOFactory::createReader('Xlsx');
|
||||
$reader->setReadFilter(new MyReadFilter());
|
||||
$callStartTime = microtime(true);
|
||||
$spreadsheet = $reader->load($filename);
|
||||
$helper->logRead('Xlsx', $filename, $callStartTime);
|
||||
$helper->log('Remove unnecessary rows');
|
||||
$spreadsheet->getActiveSheet()->removeRow(2, 18);
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__);
|
||||
40
vendor/phpoffice/phpspreadsheet/samples/Basic/25_In_memory_image.php
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Create new Spreadsheet object
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
||||
// Set document properties
|
||||
$helper->log('Set document properties');
|
||||
$spreadsheet->getProperties()->setCreator('Maarten Balliauw')
|
||||
->setLastModifiedBy('Maarten Balliauw')
|
||||
->setTitle('Office 2007 XLSX Test Document')
|
||||
->setSubject('Office 2007 XLSX Test Document')
|
||||
->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.')
|
||||
->setKeywords('office 2007 openxml php')
|
||||
->setCategory('Test result file');
|
||||
|
||||
// Generate an image
|
||||
$helper->log('Generate an image');
|
||||
$gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
|
||||
$textColor = imagecolorallocate($gdImage, 255, 255, 255);
|
||||
imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor);
|
||||
|
||||
// Add a drawing to the worksheet
|
||||
$helper->log('Add a drawing to the worksheet');
|
||||
$drawing = new MemoryDrawing();
|
||||
$drawing->setName('Sample image');
|
||||
$drawing->setDescription('Sample image');
|
||||
$drawing->setImageResource($gdImage);
|
||||
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_JPEG);
|
||||
$drawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT);
|
||||
$drawing->setHeight(36);
|
||||
$drawing->setWorksheet($spreadsheet->getActiveSheet());
|
||||
|
||||
// Save
|
||||
$helper->write($spreadsheet, __FILE__, ['Xlsx', 'Html']);
|
||||
40
vendor/phpoffice/phpspreadsheet/samples/Basic/26_Utf8.php
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
// Read from Xlsx (.xlsx) template
|
||||
$helper->log('Load Xlsx template file');
|
||||
$reader = IOFactory::createReader('Xlsx');
|
||||
$spreadsheet = $reader->load(__DIR__ . '/../templates/26template.xlsx');
|
||||
|
||||
// at this point, we could do some manipulations with the template, but we skip this step
|
||||
$helper->write($spreadsheet, __FILE__, ['Xlsx', 'Xls', 'Html']);
|
||||
|
||||
// Export to PDF (.pdf)
|
||||
$helper->log('Write to PDF format');
|
||||
IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf::class);
|
||||
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
||||
|
||||
// Remove first two rows with field headers before exporting to CSV
|
||||
$helper->log('Removing first two heading rows for CSV export');
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
$worksheet->removeRow(1, 2);
|
||||
|
||||
// Export to CSV (.csv)
|
||||
$helper->log('Write to CSV format');
|
||||
/** @var \PhpOffice\PhpSpreadsheet\Writer\Csv $writer */
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Csv');
|
||||
$filename = $helper->getFilename(__FILE__, 'csv');
|
||||
$callStartTime = microtime(true);
|
||||
$writer->save($filename);
|
||||
$helper->logWrite($writer, $filename, $callStartTime);
|
||||
|
||||
// Export to CSV with BOM (.csv)
|
||||
$filename = str_replace('.csv', '-bom.csv', $filename);
|
||||
$helper->log('Write to CSV format (with BOM)');
|
||||
$writer->setUseBOM(true);
|
||||
$callStartTime = microtime(true);
|
||||
$writer->save($filename);
|
||||
$helper->logWrite($writer, $filename, $callStartTime);
|
||||