Merge branch 'master' into writerSave
This commit is contained in:
commit
e8a03fb410
38
CHANGELOG.md
38
CHANGELOG.md
|
|
@ -9,15 +9,28 @@ and this project adheres to [Semantic Versioning](https://semver.org).
|
|||
|
||||
### Added
|
||||
|
||||
- Nothing
|
||||
- Implementation of the new `TEXTBEFORE()`, `TEXTAFTER()` and `TEXTSPLIT()` Excel Functions
|
||||
- Implementation of the `ARRAYTOTEXT()` and `VALUETOTEXT()` Excel Functions
|
||||
- Support for [mitoteam/jpgraph](https://packagist.org/packages/mitoteam/jpgraph) implementation of
|
||||
JpGraph library to render charts added.
|
||||
- Charts: Add Gradients, Transparency, Hidden Axes, Rounded Corners, Trendlines, Date Axes.
|
||||
|
||||
### Changed
|
||||
|
||||
- Nothing
|
||||
- Allow variant behaviour when merging cells [Issue #3065](https://github.com/PHPOffice/PhpSpreadsheet/issues/3065)
|
||||
- Merge methods now allow an additional `$behaviour` argument. Permitted values are:
|
||||
- Worksheet::MERGE_CELL_CONTENT_EMPTY - Empty the content of the hidden cells (the default behaviour)
|
||||
- Worksheet::MERGE_CELL_CONTENT_HIDE - Keep the content of the hidden cells
|
||||
- Worksheet::MERGE_CELL_CONTENT_MERGE - Move the content of the hidden cells into the first cell
|
||||
|
||||
### Deprecated
|
||||
|
||||
- Nothing
|
||||
- Axis getLineProperty deprecated in favor of getLineColorProperty.
|
||||
- Moved majorGridlines and minorGridlines from Chart to Axis. Setting either in Chart constructor or through Chart methods, or getting either using Chart methods is deprecated.
|
||||
- Chart::EXCEL_COLOR_TYPE_* copied from Properties to ChartColor; use in Properties is deprecated.
|
||||
- ChartColor::EXCEL_COLOR_TYPE_ARGB deprecated in favor of EXCEL_COLOR_TYPE_RGB ("A" component was never allowed).
|
||||
- Misspelled Properties::LINE_STYLE_DASH_SQUERE_DOT deprecated in favor of LINE_STYLE_DASH_SQUARE_DOT.
|
||||
- Clone not permitted for Spreadsheet. Spreadsheet->copy() can be used instead.
|
||||
|
||||
### Removed
|
||||
|
||||
|
|
@ -25,12 +38,29 @@ and this project adheres to [Semantic Versioning](https://semver.org).
|
|||
|
||||
### Fixed
|
||||
|
||||
- Nothing
|
||||
- Fix DataValidation sqRef when inserting/deleting rows/columns [Issue #3056](https://github.com/PHPOffice/PhpSpreadsheet/issues/3056) [PR #3074](https://github.com/PHPOffice/PhpSpreadsheet/pull/3074)
|
||||
- Named ranges not usable as anchors in OFFSET function [Issue #3013](https://github.com/PHPOffice/PhpSpreadsheet/issues/3013)
|
||||
- Fully flatten an array [Issue #2955](https://github.com/PHPOffice/PhpSpreadsheet/issues/2955) [PR #2956](https://github.com/PHPOffice/PhpSpreadsheet/pull/2956)
|
||||
- cellExists() and getCell() methods should support UTF-8 named cells [Issue #2987](https://github.com/PHPOffice/PhpSpreadsheet/issues/2987) [PR #2988](https://github.com/PHPOffice/PhpSpreadsheet/pull/2988)
|
||||
- Spreadsheet copy fixed, clone disabled. [PR #2951](https://github.com/PHPOffice/PhpSpreadsheet/pull/2951)
|
||||
- Fix PDF problems with text rotation and paper size. [Issue #1747](https://github.com/PHPOffice/PhpSpreadsheet/issues/1747) [Issue #1713](https://github.com/PHPOffice/PhpSpreadsheet/issues/1713) [PR #2960](https://github.com/PHPOffice/PhpSpreadsheet/pull/2960)
|
||||
- Limited support for chart titles as formulas [Issue #2965](https://github.com/PHPOffice/PhpSpreadsheet/issues/2965) [Issue #749](https://github.com/PHPOffice/PhpSpreadsheet/issues/749) [PR #2971](https://github.com/PHPOffice/PhpSpreadsheet/pull/2971)
|
||||
- Add Gradients, Transparency, and Hidden Axes to Chart [Issue #2257](https://github.com/PHPOffice/PhpSpreadsheet/issues/2257) [Issue #2229](https://github.com/PHPOffice/PhpSpreadsheet/issues/2929) [Issue #2935](https://github.com/PHPOffice/PhpSpreadsheet/issues/2935) [PR #2950](https://github.com/PHPOffice/PhpSpreadsheet/pull/2950)
|
||||
- Chart Support for Rounded Corners and Trendlines [Issue #2968](https://github.com/PHPOffice/PhpSpreadsheet/issues/2968) [Issue #2815](https://github.com/PHPOffice/PhpSpreadsheet/issues/2815) [PR #2976](https://github.com/PHPOffice/PhpSpreadsheet/pull/2976)
|
||||
- Add setName Method for Chart [Issue #2991](https://github.com/PHPOffice/PhpSpreadsheet/issues/2991) [PR #3001](https://github.com/PHPOffice/PhpSpreadsheet/pull/3001)
|
||||
- Eliminate partial dependency on php-intl in StringHelper [Issue #2982](https://github.com/PHPOffice/PhpSpreadsheet/issues/2982) [PR #2994](https://github.com/PHPOffice/PhpSpreadsheet/pull/2994)
|
||||
- Minor changes for Pdf [Issue #2999](https://github.com/PHPOffice/PhpSpreadsheet/issues/2999) [PR #3002](https://github.com/PHPOffice/PhpSpreadsheet/pull/3002) [PR #3006](https://github.com/PHPOffice/PhpSpreadsheet/pull/3006)
|
||||
- Html/Pdf Do net set background color for cells using (default) nofill [PR #3016](https://github.com/PHPOffice/PhpSpreadsheet/pull/3016)
|
||||
- Add support for Date Axis to Chart [Issue #2967](https://github.com/PHPOffice/PhpSpreadsheet/issues/2967) [PR #3018](https://github.com/PHPOffice/PhpSpreadsheet/pull/3018)
|
||||
- Reconcile Differences Between Css and Excel for Cell Alignment [PR #3048](https://github.com/PHPOffice/PhpSpreadsheet/pull/3048)
|
||||
- R1C1 Format Internationalization and Better Support for Relative Offsets [Issue #1704](https://github.com/PHPOffice/PhpSpreadsheet/issues/1704) [PR #3052](https://github.com/PHPOffice/PhpSpreadsheet/pull/3052)
|
||||
- Minor Fix for Percentage Formatting [Issue #1929](https://github.com/PHPOffice/PhpSpreadsheet/issues/1929) [PR #3053](https://github.com/PHPOffice/PhpSpreadsheet/pull/3053)
|
||||
|
||||
## 1.24.1 - 2022-07-18
|
||||
|
||||
### Added
|
||||
|
||||
- Support for SimpleCache Interface versions 1.0, 2.0 and 3.0
|
||||
- Add Chart Axis Option textRotation [Issue #2705](https://github.com/PHPOffice/PhpSpreadsheet/issues/2705) [PR #2940](https://github.com/PHPOffice/PhpSpreadsheet/pull/2940)
|
||||
|
||||
### Changed
|
||||
|
|
|
|||
14
README.md
14
README.md
|
|
@ -29,7 +29,7 @@ composer require phpoffice/phpspreadsheet
|
|||
```
|
||||
|
||||
If you are building your installation on a development machine that is on a different PHP version to the server where it will be deployed, or if your PHP CLI version is not the same as your run-time such as `php-fpm` or Apache's `mod_php`, then you might want to add the following to your `composer.json` before installing:
|
||||
```json lines
|
||||
```json
|
||||
{
|
||||
"require": {
|
||||
"phpoffice/phpspreadsheet": "^1.23"
|
||||
|
|
@ -71,15 +71,19 @@ or the appropriate PDF Writer wrapper for the library that you have chosen to in
|
|||
|
||||
#### Chart Export
|
||||
|
||||
For Chart export, we support, which you will also need to install yourself
|
||||
- jpgraph/jpgraph
|
||||
For Chart export, we support following packages, which you will also need to install yourself using `composer require`
|
||||
- [jpgraph/jpgraph](https://packagist.org/packages/jpgraph/jpgraph) (this package was abandoned at version 4.0.
|
||||
You can manually download the latest version that supports PHP 8 and above from [jpgraph.net](https://jpgraph.net/))
|
||||
- [mitoteam/jpgraph](https://packagist.org/packages/mitoteam/jpgraph) (fork with php 8.1 support)
|
||||
|
||||
and then configure PhpSpreadsheet using:
|
||||
```php
|
||||
Settings::setChartRenderer(\PhpOffice\PhpSpreadsheet\Chart\Renderer\JpGraph::class);
|
||||
Settings::setChartRenderer(\PhpOffice\PhpSpreadsheet\Chart\Renderer\JpGraph::class); // to use jpgraph/jpgraph
|
||||
//or
|
||||
Settings::setChartRenderer(\PhpOffice\PhpSpreadsheet\Chart\Renderer\MtJpGraphRenderer::class); // to use mitoteam/jpgraph
|
||||
```
|
||||
|
||||
You can `composer/require` the github version of jpgraph, but this was abandoned at version 4.0; or manually download the latest version that supports PHP 8 and above from [jpgraph.net](https://jpgraph.net/)
|
||||
One or the other of these libraries is necessary if you want to generate HTML or PDF files that include charts.
|
||||
|
||||
## Documentation
|
||||
|
||||
|
|
|
|||
|
|
@ -69,32 +69,33 @@
|
|||
"ext-xmlwriter": "*",
|
||||
"ext-zip": "*",
|
||||
"ext-zlib": "*",
|
||||
"ezyang/htmlpurifier": "^4.13",
|
||||
"ezyang/htmlpurifier": "4.15",
|
||||
"maennchen/zipstream-php": "^2.1",
|
||||
"markbaker/complex": "^3.0",
|
||||
"markbaker/matrix": "^3.0",
|
||||
"psr/http-client": "^1.0",
|
||||
"psr/http-factory": "^1.0",
|
||||
"psr/simple-cache": "^1.0 || ^2.0"
|
||||
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "dev-master",
|
||||
"dompdf/dompdf": "^1.0 || ^2.0",
|
||||
"friendsofphp/php-cs-fixer": "^3.2",
|
||||
"jpgraph/jpgraph": "^4.0",
|
||||
"mitoteam/jpgraph": "10.2.4",
|
||||
"mpdf/mpdf": "8.1.1",
|
||||
"phpcompatibility/php-compatibility": "^9.3",
|
||||
"phpstan/phpstan": "^1.1",
|
||||
"phpstan/phpstan-phpunit": "^1.0",
|
||||
"phpunit/phpunit": "^8.5 || ^9.0",
|
||||
"squizlabs/php_codesniffer": "^3.7",
|
||||
"tecnickcom/tcpdf": "^6.4"
|
||||
"tecnickcom/tcpdf": "6.5"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "PHP Internationalization Functions",
|
||||
"mpdf/mpdf": "Option for rendering PDF with PDF Writer",
|
||||
"dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
|
||||
"tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
|
||||
"jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers"
|
||||
"dompdf/dompdf": "Option for rendering PDF with PDF Writer",
|
||||
"tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer",
|
||||
"mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -53,7 +53,7 @@ composer require phpoffice/phpspreadsheet --prefer-source
|
|||
```
|
||||
|
||||
If you are building your installation on a development machine that is on a different PHP version to the server where it will be deployed, or if your PHP CLI version is not the same as your run-time such as `php-fpm` or Apache's `mod_php`, then you might want to add the following to your `composer.json` before installing:
|
||||
```json lines
|
||||
```json
|
||||
{
|
||||
"require": {
|
||||
"phpoffice/phpspreadsheet": "^1.23"
|
||||
|
|
|
|||
|
|
@ -22,6 +22,13 @@ with PhpSpreadsheet, it evaluates to the value "64":
|
|||
|
||||

|
||||
|
||||
When writing a formula to a cell, formulae should always be set as they would appear in an English version of Microsoft Office Excel, and PhpSpreadsheet handles all formulae internally in this format. This means that the following rules hold:
|
||||
|
||||
- Decimal separator is `.` (period)
|
||||
- Function argument separator is `,` (comma)
|
||||
- Matrix row separator is `;` (semicolon)
|
||||
- English function names must be used
|
||||
|
||||
Another nice feature of PhpSpreadsheet's formula parser, is that it can
|
||||
automatically adjust a formula when inserting/removing rows/columns.
|
||||
Here's an example:
|
||||
|
|
@ -43,6 +50,11 @@ inserted 2 new rows), changed to "SUM(E4:E11)". Also, the inserted cells
|
|||
duplicate style information of the previous cell, just like Excel's
|
||||
behaviour. Note that you can both insert rows and columns.
|
||||
|
||||
If you want to "anchor" a specific cell for a formula, then you prefix the column and/or the row with a `$` symbol, exactly as you would in MS Excel itself.
|
||||
So if a formula contains "SUM(E$4:E9)", and you insert 2 new rows after row 1, the formula will be adjusted to read "SUM(E$4:E11)", with the `$` fixing row 4 as the start of the range.
|
||||
|
||||
|
||||
|
||||
## Calculation Cache
|
||||
|
||||
Once the Calculation engine has evaluated the formula in a cell, the result
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
|
|
@ -282,6 +282,7 @@ 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.
|
||||
Also, only files using charset UTF-8 are supported.
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Xml
|
||||
|
||||
|
|
@ -701,6 +702,7 @@ extension.
|
|||
|
||||
**HTML limitations** Please note that HTML file format has some limits
|
||||
regarding to styling cells, number formatting, ...
|
||||
Also, only files using charset UTF-8 are supported.
|
||||
|
||||
### \PhpOffice\PhpSpreadsheet\Reader\Html
|
||||
|
||||
|
|
|
|||
|
|
@ -1161,7 +1161,7 @@ A column's width can be set using the following code:
|
|||
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(12);
|
||||
```
|
||||
|
||||
If you want to set a column width using a different unit of measure,
|
||||
If you want to set a column width using a different UoM (Unit of Measure),
|
||||
then you can do so by telling PhpSpreadsheet what UoM the width value
|
||||
that you are setting is measured in.
|
||||
Valid units are `pt` (points), `px` (pixels), `pc` (pica), `in` (inches),
|
||||
|
|
@ -1258,7 +1258,7 @@ Excel measures row height in points, where 1 pt is 1/72 of an inch (or
|
|||
about 0.35mm). The default value is 12.75 pts; and the permitted range
|
||||
of values is between 0 and 409 pts, where 0 pts is a hidden row.
|
||||
|
||||
If you want to set a row height using a different unit of measure,
|
||||
If you want to set a row height using a different UoM (Unit of Measure),
|
||||
then you can do so by telling PhpSpreadsheet what UoM the height value
|
||||
that you are setting is measured in.
|
||||
Valid units are `pt` (points), `px` (pixels), `pc` (pica), `in` (inches),
|
||||
|
|
@ -1332,22 +1332,72 @@ rows (default), or above. The following code adds the summary above:
|
|||
$spreadsheet->getActiveSheet()->setShowSummaryBelow(false);
|
||||
```
|
||||
|
||||
## Merge/unmerge cells
|
||||
## Merge/Unmerge cells
|
||||
|
||||
If you have a big piece of data you want to display in a worksheet, you
|
||||
can merge two or more cells together, to become one cell. This can be
|
||||
done using the following code:
|
||||
If you have a big piece of data you want to display in a worksheet, or a
|
||||
heading that needs to span multiple sub-heading columns, you can merge
|
||||
two or more cells together, to become one cell. This can be done using
|
||||
the following code:
|
||||
|
||||
```php
|
||||
$spreadsheet->getActiveSheet()->mergeCells('A18:E22');
|
||||
```
|
||||
|
||||
Removing a merge can be done using the unmergeCells method:
|
||||
Removing a merge can be done using the `unmergeCells()` method:
|
||||
|
||||
```php
|
||||
$spreadsheet->getActiveSheet()->unmergeCells('A18:E22');
|
||||
```
|
||||
|
||||
MS Excel itself doesn't yet offer the functionality to simply hide the merged cells, or to merge the content of cells into a single cell, but it is available in Open/Libre Office.
|
||||
|
||||
### Merge with MERGE_CELL_CONTENT_EMPTY
|
||||
|
||||
The default behaviour is to empty all cells except for the top-left corner cell in the merge range; and this is also the default behaviour for the `mergeCells()` method in PhpSpreadsheet.
|
||||
When this behaviour is applied, those cell values will be set to null; and if they are subsequently Unmerged, they will be empty cells.
|
||||
|
||||
Passing an extra flag value to the `mergeCells()` method in PhpSpreadsheet can change this behaviour.
|
||||
|
||||

|
||||
|
||||
Possible flag values are:
|
||||
- Worksheet::MERGE_CELL_CONTENT_EMPTY (the default)
|
||||
- Worksheet::MERGE_CELL_CONTENT_HIDE
|
||||
- Worksheet::MERGE_CELL_CONTENT_MERGE
|
||||
|
||||
### Merge with MERGE_CELL_CONTENT_HIDE
|
||||
|
||||
The first alternative, available only in OpenOffice, is to hide those cells, but to leave their content intact.
|
||||
When a file saved as `Xlsx` in those applications is opened in MS Excel, and those cells are unmerged, the original content will still be present.
|
||||
|
||||
```php
|
||||
$spreadsheet->getActiveSheet()->mergeCells('A1:C3', Worksheet::MERGE_CELL_CONTENT_HIDE);
|
||||
```
|
||||
|
||||
Will replicate that behaviour.
|
||||
|
||||
### Merge with MERGE_CELL_CONTENT_MERGE
|
||||
|
||||
The second alternative, available in both OpenOffice and LibreOffice is to merge the content of every cell in the merge range into the top-left cell, while setting those hidden cells to empty.
|
||||
|
||||
```php
|
||||
$spreadsheet->getActiveSheet()->mergeCells('A1:C3', Worksheet::MERGE_CELL_CONTENT_MERGE);
|
||||
```
|
||||
|
||||
Particularly when the merged cells contain formulae, the logic for this merge seems strange:
|
||||
walking through the merge range, each cell is calculated in turn, and appended to the "master" cell, then it is emptied, so any subsequent calculations that reference the cell see an empty cell, not the pre-merge value.
|
||||
For example, suppose our spreadsheet contains
|
||||
|
||||

|
||||
|
||||
where `B2` is the formula `=5-B1` and `C2` is the formula `=A2/B2`,
|
||||
and we want to merge cells `A2` to `C2` with all the cell values merged.
|
||||
The result is:
|
||||
|
||||

|
||||
|
||||
The cell value `12` from cell `A2` is fixed; the value from `B2` is the result of the formula `=5-B1` (`4`, which is appended to our merged value), and cell `B2` is then emptied, so when we evaluate cell `C2` with the formula `=A2/B2` it gives us `12 / 0` which results in a `#DIV/0!` error (so the error `#DIV/0!` is appended to our merged value rather than the original calculation result of `3`).
|
||||
|
||||
## Inserting or Removing rows/columns
|
||||
|
||||
You can insert/remove rows/columns at a specific position. The following
|
||||
|
|
@ -1670,7 +1720,7 @@ $spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
|
|||
Excel measures column width in its own proprietary units, based on the number
|
||||
of characters that will be displayed in the default font.
|
||||
|
||||
If you want to set the default column width using a different unit of measure,
|
||||
If you want to set the default column width using a different UoM (Unit of Measure),
|
||||
then you can do so by telling PhpSpreadsheet what UoM the width value
|
||||
that you are setting is measured in.
|
||||
Valid units are `pt` (points), `px` (pixels), `pc` (pica), `in` (inches),
|
||||
|
|
@ -1693,7 +1743,7 @@ Excel measures row height in points, where 1 pt is 1/72 of an inch (or
|
|||
about 0.35mm). The default value is 12.75 pts; and the permitted range
|
||||
of values is between 0 and 409 pts, where 0 pts is a hidden row.
|
||||
|
||||
If you want to set a row height using a different unit of measure,
|
||||
If you want to set a row height using a different UoM (Unit of Measure),
|
||||
then you can do so by telling PhpSpreadsheet what UoM the height value
|
||||
that you are setting is measured in.
|
||||
Valid units are `pt` (points), `px` (pixels), `pc` (pica), `in` (inches),
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class DocumentGenerator
|
|||
private static function tableRow(array $lengths, ?array $values = null): string
|
||||
{
|
||||
$result = '';
|
||||
foreach (array_map(null, $lengths, $values ?? []) as $i => [$length, $value]) {
|
||||
foreach (array_map(/** @scrutinizer ignore-type */ null, $lengths, $values ?? []) as $i => [$length, $value]) {
|
||||
$pad = $value === null ? '-' : ' ';
|
||||
if ($i > 0) {
|
||||
$result .= '|' . $pad;
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ class LocaleGenerator
|
|||
$translationValue = $translationCell->getValue();
|
||||
if ($this->isFunctionCategoryEntry($translationCell)) {
|
||||
$this->writeFileSectionHeader($functionFile, "{$translationValue} ({$functionName})");
|
||||
} elseif (!array_key_exists($functionName, $this->phpSpreadsheetFunctions)) {
|
||||
} elseif (!array_key_exists($functionName, $this->phpSpreadsheetFunctions) && substr($functionName, 0, 1) !== '*') {
|
||||
$this->log("Function {$functionName} is not defined in PhpSpreadsheet");
|
||||
} elseif (!empty($translationValue)) {
|
||||
$functionTranslation = "{$functionName} = {$translationValue}" . self::EOL;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -11,17 +11,13 @@ parameters:
|
|||
- tests/
|
||||
excludePaths:
|
||||
- src/PhpSpreadsheet/Chart/Renderer/JpGraph.php
|
||||
- src/PhpSpreadsheet/Chart/Renderer/JpGraphRendererBase.php
|
||||
parallel:
|
||||
processTimeout: 300.0
|
||||
checkMissingIterableValueType: false
|
||||
ignoreErrors:
|
||||
- '~^Parameter \#1 \$im(age)? of function (imagedestroy|imageistruecolor|imagealphablending|imagesavealpha|imagecolortransparent|imagecolorsforindex|imagesavealpha|imagesx|imagesy) expects (GdImage|resource), GdImage\|resource given\.$~'
|
||||
- '~^Parameter \#1 \$im(age)? of function (imagedestroy|imageistruecolor|imagealphablending|imagesavealpha|imagecolortransparent|imagecolorsforindex|imagesavealpha|imagesx|imagesy|imagepng) expects (GdImage|resource), GdImage\|resource given\.$~'
|
||||
- '~^Parameter \#2 \$src_im(age)? of function imagecopy expects (GdImage|resource), GdImage\|resource given\.$~'
|
||||
# Accept a bit anything for assert methods
|
||||
- '~^Parameter \#2 .* of static method PHPUnit\\Framework\\Assert\:\:assert\w+\(\) expects .*, .* given\.$~'
|
||||
- '~^Method PhpOffice\\PhpSpreadsheetTests\\.*\:\:test.*\(\) has parameter \$args with no type specified\.$~'
|
||||
|
||||
# Some issues in Xls/Parser between 1.6.3 and 1.7.7
|
||||
-
|
||||
message: "#^Offset '(left|right|value)' does not exist on (non-empty-array\\|string|array\\|null)\\.$#"
|
||||
path: src/PhpSpreadsheet/Writer/Xls/Parser.php
|
||||
|
|
|
|||
|
|
@ -12,12 +12,10 @@ $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']);
|
||||
|
||||
if (\PHP_VERSION_ID < 80000) {
|
||||
// Export to PDF (.pdf)
|
||||
$helper->log('Write to PDF format');
|
||||
IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf::class);
|
||||
$helper->write($spreadsheet, __FILE__, ['Pdf']);
|
||||
}
|
||||
// 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');
|
||||
|
|
|
|||
|
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Style\Alignment;
|
||||
|
||||
require __DIR__ . '/../Header.php';
|
||||
|
||||
$helper->log('Create new Spreadsheet object');
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$spreadsheet->getProperties()->setTitle('Alignment');
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$hi = 'Hi There';
|
||||
$ju = 'This is a longer than normal sentence';
|
||||
$sheet->fromArray([
|
||||
['', 'default', 'bottom', 'top', 'center', 'justify', 'distributed'],
|
||||
['default', $hi, $hi, $hi, $hi, $hi, $hi],
|
||||
['left', $hi, $hi, $hi, $hi, $hi, $hi],
|
||||
['right', $hi, $hi, $hi, $hi, $hi, $hi],
|
||||
['center', $hi, $hi, $hi, $hi, $hi, $hi],
|
||||
['justify', $ju, $ju, $ju, $ju, $ju, $ju],
|
||||
['distributed', $ju, $ju, $ju, $ju, $ju, $ju],
|
||||
]);
|
||||
$sheet->getColumnDimension('B')->setWidth(20);
|
||||
$sheet->getColumnDimension('C')->setWidth(20);
|
||||
$sheet->getColumnDimension('D')->setWidth(20);
|
||||
$sheet->getColumnDimension('E')->setWidth(20);
|
||||
$sheet->getColumnDimension('F')->setWidth(20);
|
||||
$sheet->getColumnDimension('G')->setWidth(20);
|
||||
$sheet->getRowDimension(2)->setRowHeight(30);
|
||||
$sheet->getRowDimension(3)->setRowHeight(30);
|
||||
$sheet->getRowDimension(4)->setRowHeight(30);
|
||||
$sheet->getRowDimension(5)->setRowHeight(30);
|
||||
$sheet->getRowDimension(6)->setRowHeight(40);
|
||||
$sheet->getRowDimension(7)->setRowHeight(40);
|
||||
$minRow = 2;
|
||||
$maxRow = 7;
|
||||
$minCol = 'B';
|
||||
$maxCol = 'g';
|
||||
$sheet->getStyle("C$minRow:C$maxRow")
|
||||
->getAlignment()
|
||||
->setVertical(Alignment::VERTICAL_BOTTOM);
|
||||
$sheet->getStyle("D$minRow:D$maxRow")
|
||||
->getAlignment()
|
||||
->setVertical(Alignment::VERTICAL_TOP);
|
||||
$sheet->getStyle("E$minRow:E$maxRow")
|
||||
->getAlignment()
|
||||
->setVertical(Alignment::VERTICAL_CENTER);
|
||||
$sheet->getStyle("F$minRow:F$maxRow")
|
||||
->getAlignment()
|
||||
->setVertical(Alignment::VERTICAL_JUSTIFY);
|
||||
$sheet->getStyle("G$minRow:G$maxRow")
|
||||
->getAlignment()
|
||||
->setVertical(Alignment::VERTICAL_DISTRIBUTED);
|
||||
$sheet->getStyle("{$minCol}3:{$maxCol}3")
|
||||
->getAlignment()
|
||||
->setHorizontal(Alignment::HORIZONTAL_LEFT);
|
||||
$sheet->getStyle("{$minCol}4:{$maxCol}4")
|
||||
->getAlignment()
|
||||
->setHorizontal(Alignment::HORIZONTAL_RIGHT);
|
||||
$sheet->getStyle("{$minCol}5:{$maxCol}5")
|
||||
->getAlignment()
|
||||
->setHorizontal(Alignment::HORIZONTAL_CENTER);
|
||||
$sheet->getStyle("{$minCol}6:{$maxCol}6")
|
||||
->getAlignment()
|
||||
->setHorizontal(Alignment::HORIZONTAL_JUSTIFY);
|
||||
$sheet->getStyle("{$minCol}7:{$maxCol}7")
|
||||
->getAlignment()
|
||||
->setHorizontal(Alignment::HORIZONTAL_DISTRIBUTED);
|
||||
|
||||
$sheet->getCell('A9')->setValue('Center Continuous A9-C9');
|
||||
$sheet->getStyle('A9:C9')
|
||||
->getAlignment()
|
||||
->setHorizontal(Alignment::HORIZONTAL_CENTER_CONTINUOUS);
|
||||
$sheet->getCell('A10')->setValue('Fill');
|
||||
$sheet->getStyle('A10')
|
||||
->getAlignment()
|
||||
->setHorizontal(Alignment::HORIZONTAL_FILL);
|
||||
$sheet->setSelectedCells('A1');
|
||||
|
||||
$helper->write($spreadsheet, __FILE__, ['Xlsx', 'Html', 'Xls']);
|
||||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Returns the average of selected database entries.');
|
||||
$category = 'Database';
|
||||
$functionName = 'DAVERAGE';
|
||||
$description = 'Returns the average of selected database entries that match criteria';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -36,21 +40,19 @@ $worksheet->setCellValue('B13', '=DAVERAGE(A4:E10,3,A1:A3)');
|
|||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:B2', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DAVERAGE() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DAVERAGE() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -3,7 +3,12 @@
|
|||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
$helper->log('Counts the cells that contain numbers in a database.');
|
||||
|
||||
$category = 'Database';
|
||||
$functionName = 'DCOUNT';
|
||||
$description = 'Counts the cells that contain numbers in a set of database records that match criteria';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -14,9 +19,9 @@ $database = [['Tree', 'Height', 'Age', 'Yield', 'Profit'],
|
|||
['Apple', 18, 20, 14, 105.00],
|
||||
['Pear', 12, 12, 10, 96.00],
|
||||
['Cherry', 13, 14, 9, 105.00],
|
||||
['Apple', 14, 15, 10, 75.00],
|
||||
['Pear', 9, 8, 8, 76.80],
|
||||
['Apple', 8, 9, 6, 45.00],
|
||||
['Apple', 14, 'N/A', 10, 75.00],
|
||||
['Pear', 9, 8, 8, 77.00],
|
||||
['Apple', 12, 11, 6, 45.00],
|
||||
];
|
||||
$criteria = [['Tree', 'Height', 'Age', 'Yield', 'Profit', 'Height'],
|
||||
['="=Apple"', '>10', null, null, null, '<16'],
|
||||
|
|
@ -26,30 +31,28 @@ $criteria = [['Tree', 'Height', 'Age', 'Yield', 'Profit', 'Height'],
|
|||
$worksheet->fromArray($criteria, null, 'A1');
|
||||
$worksheet->fromArray($database, null, 'A4');
|
||||
|
||||
$worksheet->setCellValue('A12', 'The Number of Apple trees over 10\' in height');
|
||||
$worksheet->setCellValue('B12', '=DCOUNT(A4:E10,"Yield",A1:B2)');
|
||||
$worksheet->setCellValue('A12', 'The Number of Apple trees between 10\' and 16\' in height whose age is known');
|
||||
$worksheet->setCellValue('B12', '=DCOUNT(A4:E10,"Age",A1:F2)');
|
||||
|
||||
$worksheet->setCellValue('A13', 'The Number of Apple and Pear trees in the orchard');
|
||||
$worksheet->setCellValue('A13', 'The Number of Apple and Pear trees in the orchard with a numeric value in column 3 ("Age")');
|
||||
$worksheet->setCellValue('B13', '=DCOUNT(A4:E10,3,A1:A3)');
|
||||
|
||||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:B2', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$criteriaData = $worksheet->rangeToArray('A1:F2', null, true, true, true);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DCOUNT() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DCOUNT() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Database';
|
||||
$functionName = 'DCOUNTA';
|
||||
$description = 'Counts the cells in a set of database records that match criteria';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$database = [['Tree', 'Height', 'Age', 'Yield', 'Profit'],
|
||||
['Apple', 18, 20, 14, 105.00],
|
||||
['Pear', 12, 12, 10, 96.00],
|
||||
['Cherry', 13, 14, 9, 105.00],
|
||||
['Apple', 14, 'N/A', 10, 75.00],
|
||||
['Pear', 9, 8, 8, 77.00],
|
||||
['Apple', 12, 11, 6, 45.00],
|
||||
];
|
||||
$criteria = [['Tree', 'Height', 'Age', 'Yield', 'Profit', 'Height'],
|
||||
['="=Apple"', '>10', null, null, null, '<16'],
|
||||
['="=Pear"', null, null, null, null, null],
|
||||
];
|
||||
|
||||
$worksheet->fromArray($criteria, null, 'A1');
|
||||
$worksheet->fromArray($database, null, 'A4');
|
||||
|
||||
$worksheet->setCellValue('A12', 'The Number of Apple trees between 10\' and 16\' in height');
|
||||
$worksheet->setCellValue('B12', '=DCOUNTA(A4:E10,"Age",A1:F2)');
|
||||
|
||||
$worksheet->setCellValue('A13', 'The Number of Apple and Pear trees in the orchard');
|
||||
$worksheet->setCellValue('B13', '=DCOUNTA(A4:E10,3,A1:A3)');
|
||||
|
||||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:F2', null, true, true, true);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Extracts a single value from a column of a list or database that matches conditions that you specify.');
|
||||
$category = 'Database';
|
||||
$functionName = 'DGET';
|
||||
$description = 'Extracts a single value from a column of a list or database that matches criteria that you specify';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -21,7 +25,7 @@ $database = [['Tree', 'Height', 'Age', 'Yield', 'Profit'],
|
|||
];
|
||||
$criteria = [['Tree', 'Height', 'Age', 'Yield', 'Profit', 'Height'],
|
||||
['="=Apple"', '>10', null, null, null, '<16'],
|
||||
['="=Pear"', null, null, null, null, null],
|
||||
['="=Pear"', '>12', null, null, null, null],
|
||||
];
|
||||
|
||||
$worksheet->fromArray($criteria, null, 'A1');
|
||||
|
|
@ -30,23 +34,25 @@ $worksheet->fromArray($database, null, 'A4');
|
|||
$worksheet->setCellValue('A12', 'The height of the Apple tree between 10\' and 16\' tall');
|
||||
$worksheet->setCellValue('B12', '=DGET(A4:E10,"Height",A1:F2)');
|
||||
|
||||
$worksheet->setCellValue('A13', 'The height of the Apple tree (will return an Excel error, because there is more than one apple tree)');
|
||||
$worksheet->setCellValue('B13', '=DGET(A4:E10,"Height",A1:A2)');
|
||||
|
||||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$helper->log('ALL');
|
||||
$criteriaData = $worksheet->rangeToArray('A1:F2', null, true, true, true);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DMAX() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A2', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DMAX() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Returns the maximum value from selected database entries.');
|
||||
$category = 'Database';
|
||||
$functionName = 'DMAX';
|
||||
$description = 'Returns the maximum value from selected database entries';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -36,20 +40,18 @@ $worksheet->setCellValue('B13', '=DMAX(A4:E10,3,A1:A2)');
|
|||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$helper->log('ALL');
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DMAX() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A2', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DMAX() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Returns the minimum value from selected database entries.');
|
||||
$category = 'Database';
|
||||
$functionName = 'DMIN';
|
||||
$description = 'Returns the minimum value from selected database entries';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -36,20 +40,18 @@ $worksheet->setCellValue('B13', '=DMIN(A4:E10,3,A1:A2)');
|
|||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$helper->log('ALL');
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DMIN() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A2', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DMIN() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Multiplies the values in a column of a list or database that match conditions that you specify.');
|
||||
$category = 'Database';
|
||||
$functionName = 'DPRODUCT';
|
||||
$description = 'Multiplies the values in a column of a list or database that match conditions that you specify';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -16,7 +20,7 @@ $database = [['Tree', 'Height', 'Age', 'Yield', 'Profit'],
|
|||
['Pear', 12, 12, 10, 96.00],
|
||||
['Cherry', 13, 14, 9, 105.00],
|
||||
['Apple', 14, 15, 10, 75.00],
|
||||
['Pear', 9, 8, 8, 76.80],
|
||||
['Pear', 9, 8, 8, 77.00],
|
||||
['Apple', 8, 9, 6, 45.00],
|
||||
];
|
||||
$criteria = [['Tree', 'Height', 'Age', 'Yield', 'Profit', 'Height'],
|
||||
|
|
@ -30,23 +34,25 @@ $worksheet->fromArray($database, null, 'A4');
|
|||
$worksheet->setCellValue('A12', 'The product of the yields of all Apple trees over 10\' in the orchard');
|
||||
$worksheet->setCellValue('B12', '=DPRODUCT(A4:E10,"Yield",A1:B2)');
|
||||
|
||||
$worksheet->setCellValue('A13', 'The product of the yields of all Apple trees in the orchard');
|
||||
$worksheet->setCellValue('B13', '=DPRODUCT(A4:E10,"Yield",A1:A2)');
|
||||
|
||||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$helper->log('ALL');
|
||||
$criteriaData = $worksheet->rangeToArray('A1:B2', null, true, true, true);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DMAX() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A2', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DMAX() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Estimates the standard deviation based on a sample of selected database entries.');
|
||||
$category = 'Database';
|
||||
$functionName = 'DSTDEV';
|
||||
$description = 'Estimates the standard deviation based on a sample of selected database entries';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -36,21 +40,19 @@ $worksheet->setCellValue('B13', '=DSTDEV(A4:E10,2,A1:A3)');
|
|||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DSTDEV() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DSTDEV() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -3,7 +3,12 @@
|
|||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
$helper->log('Calculates the standard deviation based on the entire population of selected database entries.');
|
||||
|
||||
$category = 'Database';
|
||||
$functionName = 'DSTDEVP';
|
||||
$description = 'Calculates the standard deviation based on the entire population of selected database entries';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -35,21 +40,19 @@ $worksheet->setCellValue('B13', '=DSTDEVP(A4:E10,2,A1:A3)');
|
|||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DSTDEVP() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DSTDEVP() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Database';
|
||||
$functionName = 'DSUM';
|
||||
$description = 'Returns the sum of selected database entries';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$database = [['Tree', 'Height', 'Age', 'Yield', 'Profit'],
|
||||
['Apple', 18, 20, 14, 105.00],
|
||||
['Pear', 12, 12, 10, 96.00],
|
||||
['Cherry', 13, 14, 9, 105.00],
|
||||
['Apple', 14, 15, 10, 75.00],
|
||||
['Pear', 9, 8, 8, 76.80],
|
||||
['Apple', 8, 9, 6, 45.00],
|
||||
];
|
||||
$criteria = [['Tree', 'Height', 'Age', 'Yield', 'Profit', 'Height'],
|
||||
['="=Apple"', '>10', null, null, null, '<16'],
|
||||
['="=Pear"', null, null, null, null, null],
|
||||
];
|
||||
|
||||
$worksheet->fromArray($criteria, null, 'A1');
|
||||
$worksheet->fromArray($database, null, 'A4');
|
||||
|
||||
$worksheet->setCellValue('A12', 'The total profit from apple trees');
|
||||
$worksheet->setCellValue('B12', '=DSUM(A4:E10,"Profit",A1:A2)');
|
||||
|
||||
$worksheet->setCellValue('A13', 'Total profit from apple trees with a height between 10 and 16 feet, and all pear trees');
|
||||
$worksheet->setCellValue('B13', '=DSUM(A4:E10,"Profit",A1:F3)');
|
||||
|
||||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A2', null, true, true, true);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:F3', null, true, true, true);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
@ -3,7 +3,12 @@
|
|||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
$helper->log('Estimates variance based on a sample from selected database entries.');
|
||||
|
||||
$category = 'Database';
|
||||
$functionName = 'DVAR';
|
||||
$description = 'Estimates variance based on a sample from selected database entries';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -35,21 +40,19 @@ $worksheet->setCellValue('B13', '=DVAR(A4:E10,2,A1:A3)');
|
|||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DVAR() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DVAR() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Calculates variance based on the entire population of selected database entries,');
|
||||
$category = 'Database';
|
||||
$functionName = 'DVARP';
|
||||
$description = 'Calculates variance based on the entire population of selected database entries';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -36,21 +40,19 @@ $worksheet->setCellValue('B13', '=DVARP(A4:E10,2,A1:A3)');
|
|||
$helper->log('Database');
|
||||
|
||||
$databaseData = $worksheet->rangeToArray('A4:E10', null, true, true, true);
|
||||
var_dump($databaseData);
|
||||
$helper->displayGrid($databaseData);
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A12')->getValue());
|
||||
$helper->log('DVARP() Result is ' . $worksheet->getCell('B12')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B12', 'A12');
|
||||
|
||||
$helper->log('Criteria');
|
||||
|
||||
$criteriaData = $worksheet->rangeToArray('A1:A3', null, true, true, true);
|
||||
var_dump($criteriaData);
|
||||
$helper->displayGrid($criteriaData);
|
||||
|
||||
$helper->log($worksheet->getCell('A13')->getValue());
|
||||
$helper->log('DVARP() Result is ' . $worksheet->getCell('B13')->getCalculatedValue());
|
||||
$helper->logCalculationResult($worksheet, $functionName, 'B13', 'A13');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Returns the serial number of a particular date.');
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DATE';
|
||||
$description = 'Returns the Excel serial number of a particular date';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -27,15 +31,15 @@ for ($row = 1; $row <= $testDateCount; ++$row) {
|
|||
}
|
||||
$worksheet->getStyle('E1:E' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mmm-dd');
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log('Year: ' . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log('Month: ' . $worksheet->getCell('B' . $row)->getFormattedValue());
|
||||
$helper->log('Day: ' . $worksheet->getCell('C' . $row)->getFormattedValue());
|
||||
$helper->log("(A{$row}) Year: " . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log("(B{$row}) Month: " . $worksheet->getCell('B' . $row)->getFormattedValue());
|
||||
$helper->log("(C{$row}) Day: " . $worksheet->getCell('C' . $row)->getFormattedValue());
|
||||
$helper->log('Formula: ' . $worksheet->getCell('D' . $row)->getValue());
|
||||
$helper->log('Excel DateStamp: ' . $worksheet->getCell('D' . $row)->getFormattedValue());
|
||||
$helper->log('Excel DateStamp: ' . $worksheet->getCell('D' . $row)->getCalculatedValue());
|
||||
$helper->log('Formatted DateStamp: ' . $worksheet->getCell('E' . $row)->getFormattedValue());
|
||||
$helper->log('');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DATEDIF';
|
||||
$description = 'Calculates the number of days, months, or years between two dates';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 1, 1],
|
||||
[1936, 3, 17],
|
||||
[1960, 12, 19],
|
||||
[1999, 12, 31],
|
||||
[2000, 1, 1],
|
||||
[2019, 2, 14],
|
||||
[2020, 7, 4],
|
||||
[2020, 2, 29],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=TODAY()');
|
||||
$worksheet->setCellValue('G' . $row, '=DATEDIF(D' . $row . ', F' . $row . ', "Y")');
|
||||
$worksheet->setCellValue('H' . $row, '=DATEDIF(D' . $row . ', F' . $row . ', "M")');
|
||||
$worksheet->setCellValue('I' . $row, '=DATEDIF(D' . $row . ', F' . $row . ', "D")');
|
||||
$worksheet->setCellValue('J' . $row, '=DATEDIF(D' . $row . ', F' . $row . ', "MD")');
|
||||
$worksheet->setCellValue('K' . $row, '=DATEDIF(D' . $row . ', F' . $row . ', "YM")');
|
||||
$worksheet->setCellValue('L' . $row, '=DATEDIF(D' . $row . ', F' . $row . ', "YD")');
|
||||
}
|
||||
$worksheet->getStyle('E1:F' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'Between: %s and %s',
|
||||
$worksheet->getCell('E' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('F' . $row)->getFormattedValue()
|
||||
));
|
||||
$helper->log('In years ("Y"): ' . $worksheet->getCell('G' . $row)->getCalculatedValue());
|
||||
$helper->log('In months ("M"): ' . $worksheet->getCell('H' . $row)->getCalculatedValue());
|
||||
$helper->log('In days ("D"): ' . $worksheet->getCell('I' . $row)->getCalculatedValue());
|
||||
$helper->log('In days ignoring months and years ("MD"): ' . $worksheet->getCell('J' . $row)->getCalculatedValue());
|
||||
$helper->log('In months ignoring days and years ("YM"): ' . $worksheet->getCell('K' . $row)->getCalculatedValue());
|
||||
$helper->log('In days ignoring years ("YD"): ' . $worksheet->getCell('L' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Converts a date in the form of text to a serial number.');
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DATEVALUE';
|
||||
$description = 'Converts a date in the form of text to an Excel serial number';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -13,8 +17,8 @@ $worksheet = $spreadsheet->getActiveSheet();
|
|||
// Add some data
|
||||
$testDates = ['26 March 2012', '29 Feb 2012', 'April 1, 2012', '25/12/2012',
|
||||
'2012-Oct-31', '5th November', 'January 1st', 'April 2012',
|
||||
'17-03', '03-2012', '29 Feb 2011', '03-05-07',
|
||||
'03-MAY-07', '03-13-07',
|
||||
'17-03', '03-17', '03-2012', '29 Feb 2011', '03-05-07',
|
||||
'03-MAY-07', '03-13-07', '13-03-07', '03/13/07', '13/03/07',
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
|
|
@ -26,14 +30,14 @@ for ($row = 1; $row <= $testDateCount; ++$row) {
|
|||
|
||||
$worksheet->getStyle('C1:C' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mmm-dd');
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('<strong>Warning: </strong>The PhpSpreadsheet DATEVALUE() function accepts a wider range of date formats than MS Excel DATEFORMAT() function.');
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log('Date String: ' . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log("(A{$row}) Date String: " . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log('Formula: ' . $worksheet->getCell('B' . $row)->getValue());
|
||||
$helper->log('Excel DateStamp: ' . $worksheet->getCell('B' . $row)->getFormattedValue());
|
||||
$helper->log('Formatted DateStamp' . $worksheet->getCell('C' . $row)->getFormattedValue());
|
||||
$helper->log('Excel DateStamp: ' . $worksheet->getCell('B' . $row)->getCalculatedValue());
|
||||
$helper->log('Formatted DateStamp: ' . $worksheet->getCell('C' . $row)->getFormattedValue());
|
||||
$helper->log('');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DAY';
|
||||
$description = 'Returns the day of a date, an integer ranging from 1 to 31';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 2, 14],
|
||||
[1936, 3, 17],
|
||||
[1964, 4, 29],
|
||||
[1999, 5, 18],
|
||||
[2000, 6, 21],
|
||||
[2019, 7, 4],
|
||||
[2020, 8, 31],
|
||||
[1956, 9, 10],
|
||||
[2010, 10, 10],
|
||||
[1982, 11, 30],
|
||||
[1960, 12, 19],
|
||||
['=YEAR(TODAY())', '=MONTH(TODAY())', '=DAY(TODAY())'],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=DAY(D' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('Day is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DAYS';
|
||||
$description = 'Returns the number of days between two dates';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 1, 1],
|
||||
[1936, 3, 17],
|
||||
[1960, 12, 19],
|
||||
[1999, 12, 31],
|
||||
[2000, 1, 1],
|
||||
[2019, 2, 14],
|
||||
[2020, 7, 4],
|
||||
[2020, 2, 29],
|
||||
[2029, 12, 31],
|
||||
[2525, 1, 1],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=TODAY()');
|
||||
$worksheet->setCellValue('G' . $row, '=DAYS(D' . $row . ', F' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:F' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'Between: %s and %s',
|
||||
$worksheet->getCell('E' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('F' . $row)->getFormattedValue()
|
||||
));
|
||||
$helper->log('Days: ' . $worksheet->getCell('G' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DAYS360';
|
||||
$description = 'Returns the number of days between two dates based on a 360-day year';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 1, 1],
|
||||
[1936, 3, 17],
|
||||
[1960, 12, 19],
|
||||
[1999, 12, 31],
|
||||
[2000, 1, 1],
|
||||
[2019, 2, 14],
|
||||
[2020, 7, 4],
|
||||
[2029, 12, 31],
|
||||
[2525, 1, 1],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=DATE(2022,12,31)');
|
||||
$worksheet->setCellValue('G' . $row, '=DAYS360(D' . $row . ', F' . $row . ', FALSE)');
|
||||
$worksheet->setCellValue('H' . $row, '=DAYS360(D' . $row . ', F' . $row . ', TRUE)');
|
||||
}
|
||||
$worksheet->getStyle('E1:F' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'Between: %s and %s',
|
||||
$worksheet->getCell('E' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('F' . $row)->getFormattedValue()
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'Days: %d (US) %d (European)',
|
||||
$worksheet->getCell('G' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('H' . $row)->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'EDATE';
|
||||
$description = 'Returns the serial number that represents the date that is the indicated number of months before or after a specified date';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$months = range(-12, 12);
|
||||
$testDateCount = count($months);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('A' . $row, '=DATE(2020,12,31)');
|
||||
$worksheet->setCellValue('B' . $row, '=A' . $row);
|
||||
$worksheet->setCellValue('C' . $row, $months[$row - 1]);
|
||||
$worksheet->setCellValue('D' . $row, '=EDATE(B' . $row . ', C' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('B1:B' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
$worksheet->getStyle('D1:D' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'%s and %d months is %d (%s)',
|
||||
$worksheet->getCell('B' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('C' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('D' . $row)->getFormattedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'EOMONTH';
|
||||
$description = 'Returns the serial number for the last day of the month that is the indicated number of months before or after start_date';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$months = range(-12, 12);
|
||||
$testDateCount = count($months);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('A' . $row, '=DATE(2020,1,1)');
|
||||
$worksheet->setCellValue('B' . $row, '=A' . $row);
|
||||
$worksheet->setCellValue('C' . $row, $months[$row - 1]);
|
||||
$worksheet->setCellValue('D' . $row, '=EOMONTH(B' . $row . ', C' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('B1:B' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
$worksheet->getStyle('D1:D' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'%s and %d months is %d (%s)',
|
||||
$worksheet->getCell('B' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('C' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('D' . $row)->getFormattedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'HOUR';
|
||||
$description = 'Returns the hour of a time value. The hour is given as an integer, ranging from 0 (12:00 AM) to 23 (11:00 PM)';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testTimes = [
|
||||
[0, 6, 0],
|
||||
[1, 12, 15],
|
||||
[3, 30, 12],
|
||||
[5, 17, 31],
|
||||
[8, 15, 45],
|
||||
[12, 45, 11],
|
||||
[14, 0, 30],
|
||||
[17, 55, 50],
|
||||
[19, 21, 8],
|
||||
[21, 10, 10],
|
||||
[23, 59, 59],
|
||||
];
|
||||
$testTimeCount = count($testTimes);
|
||||
|
||||
$worksheet->fromArray($testTimes, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testTimeCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=TIME(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=HOUR(D' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testTimeCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('hh:mm:ss');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testTimeCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('Hour is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'ISOWEEKNUM';
|
||||
$description = 'Returns number of the ISO week number of the year for a given date. (ISO-8601)';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 2, 14],
|
||||
[1936, 3, 17],
|
||||
[1964, 4, 29],
|
||||
[1999, 5, 18],
|
||||
[2000, 6, 21],
|
||||
[2019, 7, 4],
|
||||
[2020, 8, 31],
|
||||
[1956, 9, 10],
|
||||
[2010, 10, 10],
|
||||
[1982, 11, 30],
|
||||
[1960, 12, 19],
|
||||
['=YEAR(TODAY())', '=MONTH(TODAY())', '=DAY(TODAY())'],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=ISOWEEKNUM(D' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('ISO Week number is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'MINUTE';
|
||||
$description = 'Returns the minute of a time value. The minute is given as an integer, ranging from 0 to 59';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testTimes = [
|
||||
[0, 6, 0],
|
||||
[1, 12, 15],
|
||||
[3, 30, 12],
|
||||
[5, 17, 31],
|
||||
[8, 15, 45],
|
||||
[12, 45, 11],
|
||||
[14, 0, 30],
|
||||
[17, 55, 50],
|
||||
[19, 21, 8],
|
||||
[21, 10, 10],
|
||||
[23, 59, 59],
|
||||
];
|
||||
$testTimeCount = count($testTimes);
|
||||
|
||||
$worksheet->fromArray($testTimes, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testTimeCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=TIME(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=MINUTE(D' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testTimeCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('hh:mm:ss');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testTimeCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('Minute is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'MONTH';
|
||||
$description = 'Returns the month of a date, an integer ranging from 1 to 12';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 2, 14],
|
||||
[1936, 3, 17],
|
||||
[1964, 4, 29],
|
||||
[1999, 5, 18],
|
||||
[2000, 6, 21],
|
||||
[2019, 7, 4],
|
||||
[2020, 8, 31],
|
||||
[1956, 9, 10],
|
||||
[2010, 10, 10],
|
||||
[1982, 11, 30],
|
||||
[1960, 12, 19],
|
||||
['=YEAR(TODAY())', '=MONTH(TODAY())', '=DAY(TODAY())'],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=MONTH(D' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('Month is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'NETWORKDAYS';
|
||||
$description = 'Returns the number of whole working days between start_date and end_date. Working days exclude weekends and any dates identified in holidays';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$publicHolidays = [
|
||||
[2022, 1, 3, '=DATE(G1, H1, I1)', 'New Year'],
|
||||
[2022, 4, 15, '=DATE(G2, H2, I2)', 'Good Friday'],
|
||||
[2022, 4, 18, '=DATE(G3, H3, I3)', 'Easter Monday'],
|
||||
[2022, 5, 2, '=DATE(G4, H4, I4)', 'Early May Bank Holiday'],
|
||||
[2022, 6, 2, '=DATE(G5, H5, I5)', 'Spring Bank Holiday'],
|
||||
[2022, 6, 3, '=DATE(G6, H6, I6)', 'Platinum Jubilee Bank Holiday'],
|
||||
[2022, 8, 29, '=DATE(G7, H7, I7)', 'Summer Bank Holiday'],
|
||||
[2022, 12, 26, '=DATE(G8, H8, I8)', 'Boxing Day'],
|
||||
[2022, 12, 27, '=DATE(G9, H9, I9)', 'Christmas Day'],
|
||||
];
|
||||
|
||||
$holidayCount = count($publicHolidays);
|
||||
$worksheet->fromArray($publicHolidays, null, 'G1', true);
|
||||
|
||||
$worksheet->getStyle('J1:J' . $holidayCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
$worksheet->setCellValue('A1', '=DATE(2022,1,1)');
|
||||
|
||||
for ($numberOfMonths = 0; $numberOfMonths < 12; ++$numberOfMonths) {
|
||||
$worksheet->setCellValue('B' . ($numberOfMonths + 1), '=EOMONTH(A1, ' . $numberOfMonths . ')');
|
||||
$worksheet->setCellValue('C' . ($numberOfMonths + 1), '=NETWORKDAYS(A1, B' . ($numberOfMonths + 1) . ')');
|
||||
$worksheet->setCellValue('D' . ($numberOfMonths + 1), '=NETWORKDAYS(A1, B' . ($numberOfMonths + 1) . ', J1:J' . $holidayCount . ')');
|
||||
}
|
||||
|
||||
$worksheet->getStyle('A1')
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
$worksheet->getStyle('B1:B12')
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('UK Public Holidays');
|
||||
$holidayData = $worksheet->rangeToArray('J1:K' . $holidayCount, null, true, true, true);
|
||||
$helper->displayGrid($holidayData);
|
||||
|
||||
for ($row = 1; $row <= 12; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'Between %s and %s is %d working days; %d with public holidays',
|
||||
$worksheet->getCell('A1')->getFormattedValue(),
|
||||
$worksheet->getCell('B' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'NOW';
|
||||
$description = 'Returns the serial number of the current date and time';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$worksheet->setCellValue('A1', '=NOW()');
|
||||
$worksheet->getStyle('A1')
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd hh:mm:ss');
|
||||
|
||||
// Test the formulae
|
||||
$helper->log(sprintf(
|
||||
'Today is %f (%s)',
|
||||
$worksheet->getCell('A1')->getCalculatedValue(),
|
||||
$worksheet->getCell('A1')->getFormattedValue()
|
||||
));
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'SECOND';
|
||||
$description = 'Returns the second of a time value. The second is given as an integer, ranging from 0 to 59';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testTimes = [
|
||||
[0, 6, 0],
|
||||
[1, 12, 15],
|
||||
[3, 30, 12],
|
||||
[5, 17, 31],
|
||||
[8, 15, 45],
|
||||
[12, 45, 11],
|
||||
[14, 0, 30],
|
||||
[17, 55, 50],
|
||||
[19, 21, 8],
|
||||
[21, 10, 10],
|
||||
[23, 59, 59],
|
||||
];
|
||||
$testTimeCount = count($testTimes);
|
||||
|
||||
$worksheet->fromArray($testTimes, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testTimeCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=TIME(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=SECOND(D' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testTimeCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('hh:mm:ss');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testTimeCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('Second is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Returns the serial number of a particular time.');
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'TIME';
|
||||
$description = 'Returns the Excel serial number of a particular time';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -29,11 +33,11 @@ $worksheet->getStyle('E1:E' . $testDateCount)
|
|||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log('Hour: ' . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log('Minute: ' . $worksheet->getCell('B' . $row)->getFormattedValue());
|
||||
$helper->log('Second: ' . $worksheet->getCell('C' . $row)->getFormattedValue());
|
||||
$helper->log("(A{$row}) Hour: " . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log("(B{$row}) Minute: " . $worksheet->getCell('B' . $row)->getFormattedValue());
|
||||
$helper->log("(C{$row}) Second: " . $worksheet->getCell('C' . $row)->getFormattedValue());
|
||||
$helper->log('Formula: ' . $worksheet->getCell('D' . $row)->getValue());
|
||||
$helper->log('Excel TimeStamp: ' . $worksheet->getCell('D' . $row)->getFormattedValue());
|
||||
$helper->log('Excel TimeStamp: ' . $worksheet->getCell('D' . $row)->getCalculatedValue());
|
||||
$helper->log('Formatted TimeStamp: ' . $worksheet->getCell('E' . $row)->getFormattedValue());
|
||||
$helper->log('');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$helper->log('Converts a time in the form of text to a serial number.');
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DATEVALUE';
|
||||
$description = 'Converts a time in the form of text to an Excel serial number';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
|
|
@ -27,7 +31,7 @@ $worksheet->getStyle('C1:C' . $testDateCount)
|
|||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log('Time String: ' . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log("(A{$row}) Time String: " . $worksheet->getCell('A' . $row)->getFormattedValue());
|
||||
$helper->log('Formula: ' . $worksheet->getCell('B' . $row)->getValue());
|
||||
$helper->log('Excel TimeStamp: ' . $worksheet->getCell('B' . $row)->getFormattedValue());
|
||||
$helper->log('Formatted TimeStamp: ' . $worksheet->getCell('C' . $row)->getFormattedValue());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'TODAY';
|
||||
$description = 'Returns the serial number of the current date';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$worksheet->setCellValue('A1', '=TODAY()');
|
||||
$worksheet->getStyle('A1')
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
$helper->log(sprintf(
|
||||
'Today is %d (%s)',
|
||||
$worksheet->getCell('A1')->getCalculatedValue(),
|
||||
$worksheet->getCell('A1')->getFormattedValue()
|
||||
));
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'WEEKDAY';
|
||||
$description = 'Returns the day of the week corresponding to a date';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 2, 14],
|
||||
[1936, 3, 17],
|
||||
[1964, 4, 29],
|
||||
[1999, 5, 18],
|
||||
[2000, 6, 21],
|
||||
[2019, 7, 4],
|
||||
[2020, 8, 31],
|
||||
[1956, 9, 10],
|
||||
[2010, 10, 10],
|
||||
[1982, 11, 30],
|
||||
[1960, 12, 19],
|
||||
['=YEAR(TODAY())', '=MONTH(TODAY())', '=DAY(TODAY())'],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=WEEKDAY(D' . $row . ')');
|
||||
$worksheet->setCellValue('G' . $row, '=WEEKDAY(D' . $row . ', 2)');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log(sprintf(
|
||||
'Weekday is: %d (1-7 = Sun-Sat)',
|
||||
$worksheet->getCell('F' . $row)->getCalculatedValue()
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'Weekday is: %d (1-7 = Mon-Sun)',
|
||||
$worksheet->getCell('G' . $row)->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'WEEKNUM';
|
||||
$description = 'Returns the week number of a specific date';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 2, 14],
|
||||
[1936, 3, 17],
|
||||
[1964, 4, 29],
|
||||
[1999, 5, 18],
|
||||
[2000, 6, 21],
|
||||
[2019, 7, 4],
|
||||
[2020, 8, 31],
|
||||
[1956, 9, 10],
|
||||
[2010, 10, 10],
|
||||
[1982, 11, 30],
|
||||
[1960, 12, 19],
|
||||
['=YEAR(TODAY())', '=MONTH(TODAY())', '=DAY(TODAY())'],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=WEEKNUM(D' . $row . ')');
|
||||
$worksheet->setCellValue('G' . $row, '=WEEKNUM(D' . $row . ', 21)');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('System 1 Week number is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
$helper->log('System 2 (ISO-8601) Week number is: ' . $worksheet->getCell('G' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'WORKDAY';
|
||||
$description = 'Returns a number that represents a date that is the indicated number of working days before or after a starting date. Working days exclude weekends and any dates identified as holidays';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$publicHolidays = [
|
||||
[2022, 1, 3, '=DATE(G1, H1, I1)', 'New Year'],
|
||||
[2022, 4, 15, '=DATE(G2, H2, I2)', 'Good Friday'],
|
||||
[2022, 4, 18, '=DATE(G3, H3, I3)', 'Easter Monday'],
|
||||
[2022, 5, 2, '=DATE(G4, H4, I4)', 'Early May Bank Holiday'],
|
||||
[2022, 6, 2, '=DATE(G5, H5, I5)', 'Spring Bank Holiday'],
|
||||
[2022, 6, 3, '=DATE(G6, H6, I6)', 'Platinum Jubilee Bank Holiday'],
|
||||
[2022, 8, 29, '=DATE(G7, H7, I7)', 'Summer Bank Holiday'],
|
||||
[2022, 12, 26, '=DATE(G8, H8, I8)', 'Boxing Day'],
|
||||
[2022, 12, 27, '=DATE(G9, H9, I9)', 'Christmas Day'],
|
||||
];
|
||||
|
||||
$holidayCount = count($publicHolidays);
|
||||
$worksheet->fromArray($publicHolidays, null, 'G1', true);
|
||||
|
||||
$worksheet->getStyle('J1:J' . $holidayCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
$worksheet->setCellValue('A1', '=DATE(2022,1,1)');
|
||||
|
||||
$workdayStep = 10;
|
||||
for ($days = $workdayStep; $days <= 366; $days += $workdayStep) {
|
||||
$worksheet->setCellValue('B' . ((int) $days / $workdayStep + 1), $days);
|
||||
$worksheet->setCellValue('C' . ((int) $days / $workdayStep + 1), '=WORKDAY(A1, B' . ((int) $days / $workdayStep + 1) . ')');
|
||||
$worksheet->setCellValue('D' . ((int) $days / $workdayStep + 1), '=WORKDAY(A1, B' . ((int) $days / $workdayStep + 1) . ', J1:J' . $holidayCount . ')');
|
||||
}
|
||||
|
||||
$worksheet->getStyle('A1')
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
$worksheet->getStyle('C1:D50')
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('UK Public Holidays');
|
||||
$holidayData = $worksheet->rangeToArray('J1:K' . $holidayCount, null, true, true, true);
|
||||
$helper->displayGrid($holidayData);
|
||||
|
||||
for ($days = $workdayStep; $days <= 366; $days += $workdayStep) {
|
||||
$helper->log(sprintf(
|
||||
'%d workdays from %s is %s; %s with public holidays',
|
||||
$worksheet->getCell('B' . ((int) $days / $workdayStep + 1))->getFormattedValue(),
|
||||
$worksheet->getCell('A1')->getFormattedValue(),
|
||||
$worksheet->getCell('C' . ((int) $days / $workdayStep + 1))->getFormattedValue(),
|
||||
$worksheet->getCell('D' . ((int) $days / $workdayStep + 1))->getFormattedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'YEAR';
|
||||
$description = 'Returns the year of a date, an integer ranging from 1900 to 9999';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 2, 14],
|
||||
[1936, 3, 17],
|
||||
[1964, 4, 29],
|
||||
[1999, 5, 18],
|
||||
[2000, 6, 21],
|
||||
[2019, 7, 4],
|
||||
[2020, 8, 31],
|
||||
[1956, 9, 10],
|
||||
[2010, 10, 10],
|
||||
[1982, 11, 30],
|
||||
[1960, 12, 19],
|
||||
['=YEAR(TODAY())', '=MONTH(TODAY())', '=DAY(TODAY())'],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=YEAR(D' . $row . ')');
|
||||
}
|
||||
$worksheet->getStyle('E1:E' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf('(E%d): %s', $row, $worksheet->getCell('E' . $row)->getFormattedValue()));
|
||||
$helper->log('Year is: ' . $worksheet->getCell('F' . $row)->getCalculatedValue());
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Date/Time';
|
||||
$functionName = 'DAYS360';
|
||||
$description = 'Returns the number of days between two dates based on a 360-day year';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testDates = [
|
||||
[1900, 1, 1],
|
||||
[1904, 1, 1],
|
||||
[1936, 3, 17],
|
||||
[1960, 12, 19],
|
||||
[1999, 12, 31],
|
||||
[2000, 1, 1],
|
||||
[2019, 2, 14],
|
||||
[2020, 7, 4],
|
||||
[2020, 2, 29],
|
||||
[2029, 12, 31],
|
||||
[2525, 1, 1],
|
||||
];
|
||||
$testDateCount = count($testDates);
|
||||
|
||||
$worksheet->fromArray($testDates, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=DATE(A' . $row . ',B' . $row . ',C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=D' . $row);
|
||||
$worksheet->setCellValue('F' . $row, '=DATE(2022,12,31)');
|
||||
$worksheet->setCellValue('G' . $row, '=YEARFRAC(D' . $row . ', F' . $row . ')');
|
||||
$worksheet->setCellValue('H' . $row, '=YEARFRAC(D' . $row . ', F' . $row . ', 1)');
|
||||
$worksheet->setCellValue('I' . $row, '=YEARFRAC(D' . $row . ', F' . $row . ', 2)');
|
||||
$worksheet->setCellValue('J' . $row, '=YEARFRAC(D' . $row . ', F' . $row . ', 3)');
|
||||
$worksheet->setCellValue('K' . $row, '=YEARFRAC(D' . $row . ', F' . $row . ', 4)');
|
||||
}
|
||||
$worksheet->getStyle('E1:F' . $testDateCount)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('yyyy-mm-dd');
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDateCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'Between: %s and %s',
|
||||
$worksheet->getCell('E' . $row)->getFormattedValue(),
|
||||
$worksheet->getCell('F' . $row)->getFormattedValue()
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'Days: %f - US (NASD) 30/360',
|
||||
$worksheet->getCell('G' . $row)->getCalculatedValue()
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'Days: %f - Actual',
|
||||
$worksheet->getCell('H' . $row)->getCalculatedValue()
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'Days: %f - Actual/360',
|
||||
$worksheet->getCell('I' . $row)->getCalculatedValue()
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'Days: %f - Actual/365',
|
||||
$worksheet->getCell('J' . $row)->getCalculatedValue()
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'Days: %f - European 30/360',
|
||||
$worksheet->getCell('K' . $row)->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BESSELI';
|
||||
$description = 'Returns the modified Bessel function, which is equivalent to the Bessel function evaluated for purely imaginary arguments';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
for ($n = 0; $n <= 5; ++$n) {
|
||||
for ($x = 0; $x <= 5; $x = $x + 0.25) {
|
||||
Calculation::getInstance($spreadsheet)->flushInstance();
|
||||
$worksheet->setCellValue('A1', "=BESSELI({$x}, {$n})");
|
||||
|
||||
$helper->log(sprintf(
|
||||
'%s = %f',
|
||||
$worksheet->getCell('A1')->getValue(),
|
||||
$worksheet->getCell('A1')->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BESSELJ';
|
||||
$description = 'Returns the Bessel function';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
for ($n = 0; $n <= 5; ++$n) {
|
||||
for ($x = 0; $x <= 5; $x = $x + 0.25) {
|
||||
Calculation::getInstance($spreadsheet)->flushInstance();
|
||||
$worksheet->setCellValue('A1', "=BESSELJ({$x}, {$n})");
|
||||
|
||||
$helper->log(sprintf(
|
||||
'%s = %f',
|
||||
$worksheet->getCell('A1')->getValue(),
|
||||
$worksheet->getCell('A1')->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BESSELK';
|
||||
$description = 'Returns the modified Bessel function, which is equivalent to the Bessel functions evaluated for purely imaginary arguments';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
for ($n = 0; $n <= 5; ++$n) {
|
||||
for ($x = 0; $x <= 5; $x = $x + 0.25) {
|
||||
Calculation::getInstance($spreadsheet)->flushInstance();
|
||||
$worksheet->setCellValue('A1', "=BESSELK({$x}, {$n})");
|
||||
|
||||
$helper->log(sprintf(
|
||||
'%s = %f',
|
||||
$worksheet->getCell('A1')->getValue(),
|
||||
$worksheet->getCell('A1')->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BESSELY';
|
||||
$description = 'Returns the Bessel function, which is also called the Weber function or the Neumann function';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
for ($n = 0; $n <= 5; ++$n) {
|
||||
for ($x = 0; $x <= 5; $x = $x + 0.25) {
|
||||
Calculation::getInstance($spreadsheet)->flushInstance();
|
||||
$worksheet->setCellValue('A1', "=BESSELY({$x}, {$n})");
|
||||
|
||||
$helper->log(sprintf(
|
||||
'%s = %f',
|
||||
$worksheet->getCell('A1')->getValue(),
|
||||
$worksheet->getCell('A1')->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BIN2DEC';
|
||||
$description = 'Converts a binary number to decimal';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[101],
|
||||
[110110],
|
||||
[1000000],
|
||||
[11111111],
|
||||
[100010101],
|
||||
[110001100],
|
||||
[111111111],
|
||||
[1111111111],
|
||||
[1100110011],
|
||||
[1000000000],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=BIN2DEC(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Binary %s is decimal %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BIN2HEX';
|
||||
$description = 'Converts a binary number to hexadecimal';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[101],
|
||||
[110110],
|
||||
[1000000],
|
||||
[11111111],
|
||||
[100010101],
|
||||
[110001100],
|
||||
[111111111],
|
||||
[1111111111],
|
||||
[1100110011],
|
||||
[1000000000],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=BIN2HEX(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Binary %s is hexadecimal %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BIN2OCT';
|
||||
$description = 'Converts a binary number to octal';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[101],
|
||||
[110110],
|
||||
[1000000],
|
||||
[11111111],
|
||||
[100010101],
|
||||
[110001100],
|
||||
[111111111],
|
||||
[1111111111],
|
||||
[1100110011],
|
||||
[1000000000],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=BIN2OCT(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Binary %s is octal %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BITAND';
|
||||
$description = "Returns a bitwise 'AND' of two numbers";
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[1, 5],
|
||||
[3, 5],
|
||||
[1, 6],
|
||||
[9, 6],
|
||||
[13, 25],
|
||||
[23, 10],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=TEXT(DEC2BIN(A' . $row . '), "00000")');
|
||||
$worksheet->setCellValue('D' . $row, '=TEXT(DEC2BIN(B' . $row . '), "00000")');
|
||||
$worksheet->setCellValue('E' . $row, '=BITAND(A' . $row . ',B' . $row . ')');
|
||||
$worksheet->setCellValue('F' . $row, '=TEXT(DEC2BIN(E' . $row . '), "00000")');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise AND of %d (%s) and %d (%s) is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('E' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('F' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BITLSHIFT';
|
||||
$description = 'Returns a number shifted left by the specified number of bits';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[1],
|
||||
[3],
|
||||
[9],
|
||||
[15],
|
||||
[26],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=DEC2BIN(A' . $row . ')');
|
||||
$worksheet->setCellValue('C' . $row, '=BITLSHIFT(A' . $row . ',1)');
|
||||
$worksheet->setCellValue('D' . $row, '=DEC2BIN(C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=BITLSHIFT(A' . $row . ',2)');
|
||||
$worksheet->setCellValue('F' . $row, '=DEC2BIN(E' . $row . ')');
|
||||
$worksheet->setCellValue('G' . $row, '=BITLSHIFT(A' . $row . ',3)');
|
||||
$worksheet->setCellValue('H' . $row, '=DEC2BIN(G' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise Left Shift of %d (%s) by 1 bit is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise Left Shift of %d (%s) by 2 bits is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('E' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('F' . $row)->getCalculatedValue(),
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise Left Shift of %d (%s) by 3 bits is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('G' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('H' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BITOR';
|
||||
$description = "Returns a bitwise 'OR' of two numbers";
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[1, 5],
|
||||
[3, 5],
|
||||
[1, 6],
|
||||
[9, 6],
|
||||
[13, 25],
|
||||
[23, 10],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=TEXT(DEC2BIN(A' . $row . '), "00000")');
|
||||
$worksheet->setCellValue('D' . $row, '=TEXT(DEC2BIN(B' . $row . '), "00000")');
|
||||
$worksheet->setCellValue('E' . $row, '=BITOR(A' . $row . ',B' . $row . ')');
|
||||
$worksheet->setCellValue('F' . $row, '=TEXT(DEC2BIN(E' . $row . '), "00000")');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise OR of %d (%s) and %d (%s) is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('E' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('F' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BITRSHIFT';
|
||||
$description = 'Returns a number shifted right by the specified number of bits';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[9],
|
||||
[15],
|
||||
[26],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=DEC2BIN(A' . $row . ')');
|
||||
$worksheet->setCellValue('C' . $row, '=BITRSHIFT(A' . $row . ',1)');
|
||||
$worksheet->setCellValue('D' . $row, '=DEC2BIN(C' . $row . ')');
|
||||
$worksheet->setCellValue('E' . $row, '=BITRSHIFT(A' . $row . ',2)');
|
||||
$worksheet->setCellValue('F' . $row, '=DEC2BIN(E' . $row . ')');
|
||||
$worksheet->setCellValue('G' . $row, '=BITRSHIFT(A' . $row . ',3)');
|
||||
$worksheet->setCellValue('H' . $row, '=DEC2BIN(G' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise Right Shift of %d (%s) by 1 bit is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise Right Shift of %d (%s) by 2 bits is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('E' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('F' . $row)->getCalculatedValue(),
|
||||
));
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise Right Shift of %d (%s) by 3 bits is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('G' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('H' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'BITXOR';
|
||||
$description = "Returns a bitwise 'XOR' of two numbers";
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[1, 5],
|
||||
[3, 5],
|
||||
[1, 6],
|
||||
[9, 6],
|
||||
[13, 25],
|
||||
[23, 10],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=TEXT(DEC2BIN(A' . $row . '), "00000")');
|
||||
$worksheet->setCellValue('D' . $row, '=TEXT(DEC2BIN(B' . $row . '), "00000")');
|
||||
$worksheet->setCellValue('E' . $row, '=BITXOR(A' . $row . ',B' . $row . ')');
|
||||
$worksheet->setCellValue('F' . $row, '=TEXT(DEC2BIN(E' . $row . '), "00000")');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Bitwise XOR of %d (%s) and %d (%s) is %d (%s)',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('E' . $row)->getCalculatedValue(),
|
||||
$worksheet->getCell('F' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'COMPLEX';
|
||||
$description = 'Converts real and imaginary coefficients into a complex number of the form x + yi or x + yj';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[3, 4],
|
||||
[3, 4, '"j"'],
|
||||
[3.5, 4.75],
|
||||
[0, 1],
|
||||
[1, 0],
|
||||
[0, -1],
|
||||
[0, 2],
|
||||
[2, 0],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('A' . $row, '=COMPLEX(' . implode(',', $testData[$row - 1]) . ')');
|
||||
}
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(A%d): Formula %s result is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('A' . $row)->getCalculatedValue()
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'CONVERT';
|
||||
$description = 'Converts a number from one measurement system to another';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$conversions = [
|
||||
[1, '"lbm"', '"kg"'],
|
||||
[1, '"gal"', '"l"'],
|
||||
[24, '"in"', '"ft"'],
|
||||
[100, '"yd"', '"m"'],
|
||||
[500, '"mi"', '"km"'],
|
||||
[7.5, '"min"', '"sec"'],
|
||||
[5, '"F"', '"C"'],
|
||||
[32, '"C"', '"K"'],
|
||||
[100, '"m2"', '"ft2"'],
|
||||
];
|
||||
$testDataCount = count($conversions);
|
||||
|
||||
$worksheet->fromArray($conversions, null, 'A1');
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('D' . $row, '=CONVERT(' . implode(',', $conversions[$row - 1]) . ')');
|
||||
}
|
||||
|
||||
$worksheet->setCellValue('H1', '=CONVERT(CONVERT(100,"m","ft"),"m","ft")');
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(A%d): Unit of Measure Conversion Formula %s - %d %s is %f %s',
|
||||
$row,
|
||||
$worksheet->getCell('D' . $row)->getValue(),
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
trim($worksheet->getCell('B' . $row)->getValue(), '"'),
|
||||
$worksheet->getCell('D' . $row)->getCalculatedValue(),
|
||||
trim($worksheet->getCell('C' . $row)->getValue(), '"')
|
||||
));
|
||||
}
|
||||
|
||||
$helper->log('Old method for area conversions, before MS Excel introduced area Units of Measure');
|
||||
|
||||
$helper->log(sprintf(
|
||||
'(A%d): Unit of Measure Conversion Formula %s result is %s',
|
||||
$row,
|
||||
$worksheet->getCell('H1')->getValue(),
|
||||
$worksheet->getCell('H1')->getCalculatedValue()
|
||||
));
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'DEC2BIN';
|
||||
$description = 'Converts a decimal number to binary';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[-255],
|
||||
[-123],
|
||||
[-15],
|
||||
[-1],
|
||||
[5],
|
||||
[7],
|
||||
[19],
|
||||
[51],
|
||||
[121],
|
||||
[256],
|
||||
[511],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=DEC2BIN(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Decimal %s is binary %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'DEC2HEX';
|
||||
$description = 'Converts a decimal number to hexadecimal';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[-255],
|
||||
[-123],
|
||||
[-15],
|
||||
[-1],
|
||||
[5],
|
||||
[7],
|
||||
[19],
|
||||
[51],
|
||||
[121],
|
||||
[256],
|
||||
[511],
|
||||
[12345678],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=DEC2HEX(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Decimal %s is hexadecimal %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'DEC2OCT';
|
||||
$description = 'Converts a decimal number to octal';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[-255],
|
||||
[-123],
|
||||
[-15],
|
||||
[-1],
|
||||
[5],
|
||||
[7],
|
||||
[19],
|
||||
[51],
|
||||
[121],
|
||||
[256],
|
||||
[511],
|
||||
[12345678],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=DEC2OCT(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Decimal %s is octal %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'DELTA';
|
||||
$description = 'Tests whether two values are equal. Returns 1 if number1 = number2; returns 0 otherwise. This function is also known as the Kronecker Delta function';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[4, 5],
|
||||
[3, 3],
|
||||
[0.5, 0],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=DELTA(A' . $row . ',B' . $row . ')');
|
||||
}
|
||||
|
||||
$comparison = [
|
||||
0 => 'The values are not equal',
|
||||
1 => 'The values are equal',
|
||||
];
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Compare values %d and %d - Result is %d - %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
$comparison[$worksheet->getCell('C' . $row)->getCalculatedValue()]
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'ERF';
|
||||
$description = 'Returns the error function integrated between lower_limit and upper_limit';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData1 = [
|
||||
[0.745],
|
||||
[1],
|
||||
[1.5],
|
||||
[-2],
|
||||
];
|
||||
|
||||
$testData2 = [
|
||||
[0, 1.5],
|
||||
[1, 2],
|
||||
[-2, 1],
|
||||
];
|
||||
$testDataCount1 = count($testData1);
|
||||
$testDataCount2 = count($testData2);
|
||||
$testData2StartRow = $testDataCount1 + 1;
|
||||
|
||||
$worksheet->fromArray($testData1, null, 'A1', true);
|
||||
$worksheet->fromArray($testData2, null, "A{$testData2StartRow}", true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount1; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=ERF(A' . $row . ')');
|
||||
}
|
||||
|
||||
for ($row = $testDataCount1 + 1; $row <= $testDataCount2 + $testDataCount1; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=ERF(A' . $row . ', B' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
$helper->log('ERF() With a single argument');
|
||||
for ($row = 1; $row <= $testDataCount1; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(C%d): %s The error function integrated between 0 and %f is %f',
|
||||
$row,
|
||||
$worksheet->getCell('C' . $row)->getValue(),
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
||||
$helper->log('ERF() With two arguments');
|
||||
for ($row = $testDataCount1 + 1; $row <= $testDataCount2 + $testDataCount1; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(C%d): %s The error function integrated between %f and %f is %f',
|
||||
$row,
|
||||
$worksheet->getCell('C' . $row)->getValue(),
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'ERFC';
|
||||
$description = 'Returns the complementary ERF function integrated between x and infinity';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[0],
|
||||
[0.5],
|
||||
[1],
|
||||
[-1],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=ERFC(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): %s The complementary error function integrated by %f and infinity is %f',
|
||||
$row,
|
||||
$worksheet->getCell('C' . $row)->getValue(),
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'GESTEP';
|
||||
$description = 'Returns 1 if number ≥ step; returns 0 (zero) otherwise';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[5, 4],
|
||||
[5, 5],
|
||||
[4, 5],
|
||||
[-4, -5],
|
||||
[-5, -4],
|
||||
[1],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=GESTEP(A' . $row . ',B' . $row . ')');
|
||||
}
|
||||
|
||||
$comparison = [
|
||||
0 => 'Value %d is less than step %d',
|
||||
1 => 'Value %d is greater than or equal to step %d',
|
||||
];
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): Compare value %d and step %d - Result is %d - %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
sprintf(
|
||||
$comparison[$worksheet->getCell('C' . $row)->getCalculatedValue()],
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
)
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'HEX2BIN';
|
||||
$description = 'Converts a hexadecimal number to binary';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
[3],
|
||||
[8],
|
||||
[42],
|
||||
[99],
|
||||
['A2'],
|
||||
['F0'],
|
||||
['100'],
|
||||
['128'],
|
||||
['1AB'],
|
||||
['1FF'],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=HEX2BIN(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Hexadecimal %s is binary %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'HEX2DEC';
|
||||
$description = 'Converts a hexadecimal number to decimal';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['08'],
|
||||
['42'],
|
||||
['A2'],
|
||||
['400'],
|
||||
['1000'],
|
||||
['1234'],
|
||||
['ABCD'],
|
||||
['C3B0'],
|
||||
['FFFFFFFFF'],
|
||||
['FFFFFFFFFF'],
|
||||
['FFFFFFF800'],
|
||||
['FEDCBA9876'],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=HEX2DEC(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Hexadecimal %s is decimal %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'HEX2OCT';
|
||||
$description = 'Converts a hexadecimal number to octal';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['08'],
|
||||
['42'],
|
||||
['A2'],
|
||||
['400'],
|
||||
['100'],
|
||||
['1234'],
|
||||
['ABCD'],
|
||||
['C3B0'],
|
||||
['FFFFFFFFFF'],
|
||||
['FFFFFFF800'],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=HEX2OCT(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(B%d): Hexadecimal %s is octal %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMABS';
|
||||
$description = 'Returns the absolute value (modulus) of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMABS(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The absolute value of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMAGINARY';
|
||||
$description = 'Returns the imaginary coefficient of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMAGINARY(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The imaginary component of %s is %f',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMARGUMENT';
|
||||
$description = 'Returns the argument Theta, an angle expressed in radians';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMARGUMENT(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Theta Argument of %s is %f radians',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMCONJUGATE';
|
||||
$description = 'Returns the complex conjugate of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMCONJUGATE(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Conjugate of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMCOS';
|
||||
$description = 'Returns the cosine of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMCOS(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Cosine of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMCOSH';
|
||||
$description = 'Returns the hyperbolic cosine of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMCOSH(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Hyperbolic Cosine of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMCOT';
|
||||
$description = 'Returns the cotangent of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMCOT(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Cotangent of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMCSC';
|
||||
$description = 'Returns the cosecant of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMCSC(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Cosecant of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMCSCH';
|
||||
$description = 'Returns the hyperbolic cosecant of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMCSCH(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Hyperbolic Cosecant of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMDIV';
|
||||
$description = 'Returns the quotient of two complex numbers in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i', '5-3i'],
|
||||
['3+4i', '5+3i'],
|
||||
['-238+240i', '10+24i'],
|
||||
['1+2i', 30],
|
||||
['1+2i', '2i'],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=IMDIV(A' . $row . ', B' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Quotient of %s and %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMEXP';
|
||||
$description = 'Returns the exponential of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMEXP(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Exponential of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMLN';
|
||||
$description = 'Returns the natural logarithm of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMLN(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Natural Logarithm of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMLOG10';
|
||||
$description = 'Returns the base-10 logarithm of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMLOG10(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Base-10 Logarithm of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMLOG2';
|
||||
$description = 'Returns the base-2 logarithm of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMLOG2(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Base-2 Logarithm of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMPOWER';
|
||||
$description = 'Returns a complex number in x + yi or x + yj text format raised to a power';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i', 2],
|
||||
['5-12i', 2],
|
||||
['3.25+7.5i', 3],
|
||||
['3.25-12.5i', 2],
|
||||
['-3.25+7.5i', 3],
|
||||
['-3.25-7.5i', 4],
|
||||
['0-j', 5],
|
||||
['0-2.5j', 3],
|
||||
['0+j', 2.5],
|
||||
['0+1.25j', 2],
|
||||
[4, 3],
|
||||
[-2.5, 2],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=IMPOWER(A' . $row . ', B' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): %s raised to the power of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMPRODUCT';
|
||||
$description = 'Returns the product of two or more complex numbers in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i', '5-3i'],
|
||||
['3+4i', '5+3i'],
|
||||
['-238+240i', '10+24i'],
|
||||
['1+2i', 30],
|
||||
['1+2i', '2i'],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=IMPRODUCT(A' . $row . ', B' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Product of %s and %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMREAL';
|
||||
$description = 'Returns the real coefficient of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMREAL(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The real component of %s is %f radians',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMSEC';
|
||||
$description = 'Returns the secant of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMSEC(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Secant of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMSECH';
|
||||
$description = 'Returns the hyperbolic secant of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMSECH(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Hyperbolic Secant of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMSIN';
|
||||
$description = 'Returns the sine of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMSIN(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Sine of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMSINH';
|
||||
$description = 'Returns the hyperbolic sine of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMSINH(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Hyperbolic Sine of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMSQRT';
|
||||
$description = 'Returns the square root of a complex number in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i'],
|
||||
['5-12i'],
|
||||
['3.25+7.5i'],
|
||||
['3.25-12.5i'],
|
||||
['-3.25+7.5i'],
|
||||
['-3.25-7.5i'],
|
||||
['0-j'],
|
||||
['0-2.5j'],
|
||||
['0+j'],
|
||||
['0+1.25j'],
|
||||
[4],
|
||||
[-2.5],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('B' . $row, '=IMSQRT(A' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Square Root of %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMSUB';
|
||||
$description = 'Returns the difference of two complex numbers in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i', '5-3i'],
|
||||
['3+4i', '5+3i'],
|
||||
['-238+240i', '10+24i'],
|
||||
['1+2i', 30],
|
||||
['1+2i', '2i'],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=IMSUB(A' . $row . ', B' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Difference between %s and %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
require __DIR__ . '/../../Header.php';
|
||||
|
||||
$category = 'Engineering';
|
||||
$functionName = 'IMSUM';
|
||||
$description = 'Returns the sum of two or more complex numbers in x + yi or x + yj text format';
|
||||
|
||||
$helper->titles($category, $functionName, $description);
|
||||
|
||||
// Create new PhpSpreadsheet object
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$worksheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// Add some data
|
||||
$testData = [
|
||||
['3+4i', '5-3i'],
|
||||
['3+4i', '5+3i'],
|
||||
['-238+240i', '10+24i'],
|
||||
['1+2i', 30],
|
||||
['1+2i', '2i'],
|
||||
];
|
||||
$testDataCount = count($testData);
|
||||
|
||||
$worksheet->fromArray($testData, null, 'A1', true);
|
||||
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$worksheet->setCellValue('C' . $row, '=IMSUM(A' . $row . ', B' . $row . ')');
|
||||
}
|
||||
|
||||
// Test the formulae
|
||||
for ($row = 1; $row <= $testDataCount; ++$row) {
|
||||
$helper->log(sprintf(
|
||||
'(E%d): The Sum of %s and %s is %s',
|
||||
$row,
|
||||
$worksheet->getCell('A' . $row)->getValue(),
|
||||
$worksheet->getCell('B' . $row)->getValue(),
|
||||
$worksheet->getCell('C' . $row)->getCalculatedValue(),
|
||||
));
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue