Commit Graph

567 Commits

Author SHA1 Message Date
Mark Baker 1b00fac6ad
Minor improvements (#1029)
* Another collection of minor improvements

* Fix broken test

* And style

* Seriously?!? The order of returned types declared in a docblock is majorly important?
2019-06-22 23:15:14 +02:00
Mark Baker 2adaad3b01
Minor improvements (#1028)
* Initial tweaks

* Move signatures for abstract BaseReader methods to the IReader interface

* Appease the great whitespace gods
2019-06-22 21:24:51 +02:00
Mark Baker 71f3631cfb
Rectorification (#1010)
* A few loose to strict comparisons

* More loose to strict comparisons

* Revert accidental composer hacks that shouldn't have been committed
2019-06-14 08:31:27 +02:00
Mark Baker 6c25b6f422
Refactor Xlsx Properties Reader code into a separate class (#1001)
* Unit tests for refactoring Spreadsheet properties
* Refactor Xlsx Properties Reader code into a separate class
2019-06-10 16:44:55 +02:00
Mark Baker dd656b4c53
Improve test code (#1002)
* Enhancements suggested by scrutiniser

* Styling
2019-06-10 01:48:06 +02:00
MarkBaker 867237f567 Codestyle fixes 2019-05-30 12:14:05 +02:00
kraser 906bdc613c Fix failure when parsing xlsx with drawing having double (redefined) … (#945)
* Fix failure when parsing xlsx with drawing having double (redefined) attributes

* Fix failure when parsing xlsx with drawing having double (redefined) attributes
2019-05-30 11:42:00 +02:00
Aleksandr Borovikov 53ac682ba7 Fix #956: Incorrectly handled backslash-escaped space characters within number formats (#957)
Backslash-escaped space characted sometimes not converted to quoted strings, so formatted string contains extra slashes.
2019-05-30 11:37:48 +02:00
MarkBaker 85dfd8b00b Style fix 2019-05-30 10:57:37 +02:00
Mofasa 0947427d9f Allow to get current iterator position (#980) 2019-05-30 10:42:18 +02:00
AlexPravdin ebc0b56959 Fix #853 when loading and saving XLSX file with empty drawing cause c… (#882)
* Fix #853 when loading and saving XLSX file with empty drawing cause corrupted output file. Store empty drawing as unparsed entity and save it as is when saving the file.

* Fix code style
2019-05-30 10:38:03 +02:00
Harshvardhan Malpani e096391f54 NamedRanges with ' in name wont get wiped (#988)
Example: 'attr_values'!$D$3:$D$49
earlier this would probably be flushed and getNamedRanges() would not show it because sheet "'attr_values'" does not exist. It should be "attr_values"
2019-05-30 10:34:58 +02:00
MarkBaker 7c3465851c Eliminate duplicate if test 2019-05-30 10:21:32 +02:00
Harry Gulliford 0b3deeaac5 Add accounting number format style (#974) 2019-05-30 09:18:03 +02:00
Yigit Cukuren cce6e5976f Calculation :: Added switch function (#983) 2019-05-30 09:14:58 +02:00
Fräntz Miccoli 9a208b31d8
Fix a SUMIF warning when having different length of arrays provided as input
Closes #873
2019-05-26 20:58:00 +12:00
Adrien Crivelli 27255ce808
Whitelist `tsv` extension when opening CSV files
Fixes #429
2019-05-26 20:07:01 +12:00
Luis Cabrera Benito 37493de234 Updated return type (#880) 2019-04-15 21:40:57 +02:00
phinor 98d1782bbb Xls(x) Readers now respect the readBlankCells setting. (#835)
* Prevented reading of blank cells.

The "readEmptyCells" attribute is ignored when reading spreadsheets, resulting in memory bloat.

* Included a test file for Unit Testing

A file that contains 100 referenced cells, one of which contains data.

* New test file for reading in empty cells

* Added test for reading in a blank cell

* Updated CHANGELOG

* Changed "s to 's

Change required for code style compliance

* Further Code Style Changes

Removed spaces after variable, before array indices.

* Further Code Style Changes

* Further Code Style Changes

Removed additional spaces.

* Updated reader and tests.
2019-04-15 21:40:20 +02:00
Fräntz Miccoli ccebf0f288 Fix VLOOKUP whose return was impacted by order for a $not_exact_match (#854)
* Highlight VLOOKUP bug with a new test

* Remove useless statements + fix VLOOKUP bug

Please not that we have still inconsistencies in Excel (See LOOKUP and
VLOOKUP.php test files)

* Base strtolower on our StringHelper in LookupRef
2019-04-15 21:37:23 +02:00
Alex dfd9c5bb3e Fix "Xlsx::getArrayItem(): Node no longer exists" issue (#931) 2019-04-15 21:35:17 +02:00
MrCue 25c7187727 Fix return type hint (#947) 2019-04-15 21:33:07 +02:00
Przemysław Szustak 0dd6e27d8f Conditional formatting - support for Conditional::CONDITION_CONTAINSBLANKS (#883)
Condition formating option was not supported. I unziped xlsx and found this formula to option blank field
2019-04-15 21:32:22 +02:00
Fräntz Miccoli 8b589c4ef3 Fix MATCH an error was appearing when comparing strings against 0 (always true) + making a return statement a bit more explicit (#855) 2019-03-06 22:37:06 +01:00
Mark Baker 432e5845e1
isDateTime() now checks for cell value as well as format mask (#919)
* isDateTime() now checks for cell value as well as format mask
2019-03-06 22:25:00 +01:00
Mark Baker 9b004b1e6a
Ignore escaped enclosures within an enclosure when inferring csv separator (#906) 2019-02-25 23:20:50 +01:00
Laurentiu Dancu 334afde9cd Fix #783 Csv separator detection nesting limit error. (#845) 2019-02-25 18:31:35 +01:00
Mark Baker f26023586e
SImplify separator inference code (#903) 2019-02-24 23:55:08 +01:00
Mark Baker df1085505c
SImplify separator inference code (#904) 2019-02-24 23:54:52 +01:00
Mark Baker c9dc1e6130
String value binder (#901)
* Document calculation caching; and how to disable it and how to flush the cache

* Quoted text for string values beginning with `=`, so that they are still treated as strings and not as formulae

* Warning about assigning cells to variables

* Further warning about assigning cells to variables

* getCell() with a second argument

* Added String Value Binder, and a Reader example demonstrating how to use it

* Ensure value is a string before binding

* Sample file for String Value Binder

* PHPCS moaning about order or use statements

* Order of annotations, that PHPStorm determined, isn't what phpcs says it should be
2019-02-23 18:40:07 +01:00
Mark Baker 033ed16db5
Dde call safe handling (#891)
* Set handler for quoted text cells and DDE expressions in the Calculation engine
2019-02-18 22:56:32 +01:00
Benjamin Yau d2bbb6cd8e Fix wrong calculation of highest column (#856)
* Fix wrong calculation of highest column

issue #700

* Revert "Fix wrong calculation of highest column"

This reverts commit ef39af1cb6bac8f3101aa52a6336d736910d387b.

* Revert "Revert "Fix wrong calculation of highest column""

This reverts commit d13493ecbedf57253448438311c1d04a3ebdb65e.

* Revert Xlsx reader

* Fix indentation
2019-02-17 18:32:45 +01:00
MarkBaker a8642a2e9e More CS niceties 2019-02-17 17:50:39 +01:00
MarkBaker 917592001e CS Style fixes 2019-02-17 17:40:57 +01:00
Mark Baker f4f4d513e7
Handling function calls that accept an excel error as an argument (#890) 2019-02-17 17:32:45 +01:00
naooooooo99999 a54ed63a6f Add japanese formats (#841) 2019-02-17 12:39:51 +01:00
Patrick Brouwers 1c99f4999c [Feature] Html reader improvements (#884)
* Extract character set, so we can convert to UTF-8 if required

* Set column width and row height when defined on tr/td

* Parse align and valign on td

* Specify number format of cell via html attribute

* Formatting of b, strong, i and em tags

* Inserting image in cell when using img tag in html

* Add applying inline styles: border, fonts, alignment, dimensions

* Add tests for applying inline styles
2019-02-16 23:11:16 +01:00
Mark Baker 11575ef3c4
Load locales clean folder path (#875)
* Fix locale folder path when reading locale list

* Ensure / directory separaor isn't left against locale name
2019-02-08 21:08:55 +01:00
Adrien Crivelli d0dea580ad
Fix a few Scrutinizer issues 2019-01-02 15:38:13 +11:00
Adrien Crivelli 04b5bf593d
Document font may be null
Fixes #833
2019-01-02 14:34:14 +11:00
Adrien Crivelli 3b0c686630
Fix iconv unsupported `//IGNORE//TRANSLIT` on IBM i
Fixes #791
2019-01-02 14:23:34 +11:00
GreatHumorist 699da09176
Fix time format for duration was incorrect
When using format `[h]:mm` it should convert to the "total hours:minutes"

Closes #666
Fixes #664
Fixes #446
Fixes #342
2019-01-02 13:17:52 +11:00
Kirill Petrov 39b573b29d
Fix infinite loop when reading invalid ODS files
According to the spec, http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1415588_253892949,
a `<table:table-row>` can only ever contains a `<table:table-cell>` or
a `<table:covered-table-cell>`, but it seems that some invalid files in the wild
may contains something else. That would trigger an infinite loop. So instead we
totally ignore the invalid content.

Closes #832
2019-01-02 12:16:41 +11:00
Mahmoud Abdo 86c635b3f5
Fix color from CSS when reading from HTML
In case we generate Spreadsheet from html file and the code
in file have text color in css "color:#FF00FF" it will showing
as black color because it will render like rgb content with } "FF00FF}"
So, we fix it by adding missing bracket "{".

Closes #831
2019-01-02 11:57:30 +11:00
Matt Allan 0f8292fc0b
Use gt operator instead of max for highest row
Using an operator is significantly faster than calling the max function.
As this method is called more than once per cell the difference adds up.

Closes #824
2019-01-02 11:09:55 +11:00
Matt Allan ff6f4f4ec0
Remove duplicate strtoupper
Removing the duplicate strtoupper call has a meaningful impact on
performance since this method is called at least once per cell.

`Worksheet::getCells` currently calls `strtoupper` twice. `strtoupper`
is kind of expensive and this method is called at least once for every
cell in the spreadsheet.  By removing the unnecessary second call the
runtime decreases by 18% when importing a ~100K cell spreadsheet.

Closes #825
2019-01-01 17:54:55 +11:00
Matt Allan f28289f92a
Use a generator for Cells::getAllCacheKeys
Using a generator reduces memory usage and improves performance
when loading large spreadsheets.

Closes #822
2019-01-01 17:38:07 +11:00
Philipp Kolesnikov 8918888e7c
libxml_disable_entity_loader() changes global state so it should be used as local as possible
Fixes #801
Closes #802
Closes #803
2019-01-01 17:25:24 +11:00
Paolo 6a48b505b6
Support COUNTIFS multiple arguments
Because Excel COUNTIFS function can have more than 2 arguments.

Closes #830
2019-01-01 16:38:45 +11:00
Fräntz Miccoli 294ba58dde
Exact match in VLOOKUP now returns first match
It was inconsistent with spreadsheet software before.

Closes #809
2018-12-15 17:42:07 +11:00
Fräntz Miccoli db2621c4fe
Add tests for the LOOKUP function
We were performing operations to patch for missing $result_vector
even when one was defined, this was causing bugs on edge cases.

Fixes #796
Closes #816
2018-12-15 16:23:45 +11:00
Christian Stoller f0e69408ca Extended the docblock of Style::applyFromArray with example for alignment styling 2018-12-10 20:24:29 +11:00
Dennis Birkholz e56fbe2745
Fix column names if read filter calls in XLSX reader skip columns
Fixes #777
Closes #778
2018-12-10 20:00:26 +11:00
Gabriel Caruso dfa808a955 Simplify some conditions and ternary expressions 2018-12-10 18:54:51 +11:00
Krzysztof Ruszczynski 12bf085c57
Custom color for pie and donut charts
This is an follow-up for #158

Fixes #768
2018-12-10 18:43:55 +11:00
Dennis Birkholz 95c41da020 Cache readFilter access and skip inner loops for empty/default readFilter (#773)
For large XLSX files `Reader/Xlsx::readColumnsAndRowsAttributes()` performs
a lot of calls to `$this->getReadFilter()` and `$this->getReadFilter()->readCell()`
as `readCell()` is called twice for each (possibbly filled) cell.

By ignoring calls to the DefaultReadFilter implementation (which always returns true),
using no custom read filter will not incur any runtime penalty.

The runtime penaltiy when using a custom read filter is reduced by a third by
caching the read filter into a variable instead of using the getter method.

Fixes issue #772.
2018-11-29 22:50:48 +01:00
Mark Baker a5eb64c77f
Matrix (#790)
* Refactor Excel Matrix functions to use external Matrix library rather than JAMA
2018-11-29 22:25:31 +01:00
MarkBaker 14159d985c Coding standards 2018-11-25 14:33:01 +01:00
MarkBaker c1d0784ad7 Namespace security scanner in Html Reader 2018-11-25 14:18:09 +01:00
MarkBaker 41bcf9a21c Support for additional callback in XML Security Scanner 2018-11-25 14:00:35 +01:00
MarkBaker c708411529 Refactor scanner into base reader class 2018-11-25 12:14:54 +01:00
MarkBaker aba41f6495 Yet more Coding standards fixes 2018-11-23 23:27:19 +01:00
MarkBaker 6d3d44359d Coding standards 2018-11-23 23:18:49 +01:00
MarkBaker abad49d426 Use factory for XMLcanner 2018-11-23 23:05:17 +01:00
MarkBaker 9c1a201ace Fix docblock typo 2018-11-20 19:51:09 +01:00
MarkBaker f02898e14d Don't rely purely on libxml_disable_entity_loader() 2018-11-20 18:40:09 +01:00
MarkBaker 1f4cb1f19a Corrections to XmlScanner version check logic, and (hopefully) fix the lock issue 2018-11-20 18:24:53 +01:00
Adrien Crivelli e4be53888f
Update src/PhpSpreadsheet/Reader/Security/XmlScanner.php
Co-Authored-By: MarkBaker <mark@lange.demon.co.uk>
2018-11-20 11:46:09 +01:00
Adrien Crivelli 7f4a6e37b1
Update src/PhpSpreadsheet/Reader/Security/XmlScanner.php
Co-Authored-By: MarkBaker <mark@lange.demon.co.uk>
2018-11-20 11:46:01 +01:00
MarkBaker 5854ce3738 phpcs cleanup 2018-11-20 08:18:35 +01:00
MarkBaker 0a9e15ca69 srsly?!? phpcs is enforcing alphabetic order of use clauses now? 2018-11-19 23:42:05 +01:00
MarkBaker a4d97ba896 Clean handle charset in XXE scanner 2018-11-19 22:47:34 +01:00
Guillaume RODRIGUEZ 3bea6f516b
Fix index overflow on data values array
Fix index overflow on data values array for multi level detection.

Fixes #747
Fixes #748
2018-11-11 21:43:44 +11:00
Albert Scherman 31e25ad14b
Support page margin in mPDF
Fixes #750
Fixes #751
2018-11-11 21:30:00 +11:00
Gabriel Caruso f42adb0daf Simplify some conditions and ternary expressions 2018-11-11 18:25:51 +11:00
Adrien Crivelli 2fce5c4706
Update PHP dependencies to fix security issues
This fix CVE-2013-5958 and also
1861e33fe0
2018-11-11 18:21:31 +11:00
Danielle McLean 6703624223
Write generated HTML into Mpdf in chunks, rather than as one gigantic string
Due to a limitation in Mpdf, the HTML string passed to its WriteHTML method
must not exceed a particular length. PhpSpreadsheet produces one HTML string
containing all spreadsheet data when writing to HTML, which can easily exceed
Mpdf's size limit. Thus, it was impossible to write large spreadsheets to PDF
using the Mpdf writer - this change fixes that issue.

Fixes #637
Fixes #706
2018-11-03 18:37:47 +11:00
Milan Davídek 3be06a5e87
Support overriding `DefaultValueBinder::dataTypeForValue()`
This allow to avoid overriding `DefaultValueBinder::bindValue()`

Fixes #735
2018-11-03 17:25:43 +11:00
Guillaume RODRIGUEZ fdc224af7c
Fix print area parser for XLSX reader
XLSX workbook references may not contains quotes in print area

Fixes #733
Fixes #734
2018-10-28 14:37:05 +11:00
Laurent 79d86ef5cc
Csv reader avoid notice when the file is empty
Fixes #337
2018-10-28 14:16:53 +11:00
Adrien Crivelli 4e8e0dc01b
Fix Countable Int (bis) 2018-10-28 14:06:50 +11:00
Jean-Baptiste Noblot 6088f545b6 Add declaration of undefined variable 2018-10-28 14:03:24 +11:00
Jean-Baptiste Noblot 58268fe9b5 Fix Countable Int 2018-10-28 14:03:24 +11:00
Jon Dufresne 5b3870c508
Prefer https:// URLs when available in docs & comments
Fixes #737
2018-10-28 13:55:00 +11:00
marcusblevin 98d10475f2
SUMIFS sum values only once
Values were summed multiple times if it matched several conditions
whereas it should only be summed once.

Fixes #704
Fixes #710
2018-10-28 13:09:08 +11:00
Sreten Ilić ed6a3a0148
Support numeric condition in SUMIF, SUMIFS, AVERAGEIF, COUNTIF, MAXIF and MINIF
Fixes #683
Fixes #701
2018-10-28 12:47:53 +11:00
Paul Barton 813855b2b2
Fix CSV delimiter detection on line breaks
The CSV Reader can now correctly ignore line breaks inside
enclosures which allows it to determine the delimiter
correctly.

Fixes #716
Fixes #717
2018-10-21 18:23:55 +11:00
Adrien Crivelli 54efe8824e
Fix unit tests 2018-10-21 17:55:31 +11:00
Adrien Crivelli 09eb05f367
OFFSET should allow omitted height and width
Commit 8dddf56 inadvertently removed the ability to omit the width
and height arguments to the OFFSET function. And #REF! is returned
because the function is validating that the new $pCell argument
is present. It is present, but it has been passed in the $height position.

We fixed this by always passing $pCell at the last position and filling
missing arguments with NULL values.

Fixes #561
Fixes #565
2018-10-21 17:45:02 +11:00
Biser Antonov 2c981e47a1
Added the DAYS() function
https://support.office.com/en-us/article/days-function-57740535-d549-4395-8728-0f07bff0b9df
2018-10-21 15:26:46 +11:00
Adrien Crivelli 925205ed59
Remove exception that can never happen
Because of type hinting in the constructor the spreadsheet object
can never be null anymore.
2018-10-08 10:50:54 +11:00
Adrien Crivelli edc608782f
Avoid warning on PHP 7.3 2018-10-07 20:28:04 +11:00
bayzhanov 08b4456641
Xls file threw exception during open by Xls reader
Ignore some exception in property, if stream is empty

Fixes #402
Fixes #659
2018-10-07 18:49:01 +11:00
Scorty ae9dd13aa0 Skip non numeric value in SUMIF
MS Excel skip non numeric values also. PhpSpreadsheet used to fail on string value with: Warning: A non-numeric value encountered.

Fixes  #618
2018-10-07 17:24:23 +11:00
Adrien Crivelli 5e5be142f6
Fix incorrect docblock 2018-10-05 11:18:21 +10:00
Adrien Crivelli 1e5be30290
Remove dead code 2018-10-05 11:08:51 +10:00
Timur 50a9bc83ab Sheet title can contain exclamation mark (in formulas)
When extracting sheet title from string reference (like `"Work!sheet1!A1"`), PHP function `explode()` divide this string into three parts: `['Work', 'sheet1', 'A1']`. And then these wrong values are used in formulas, ranges, etc.

This change fix that problem by using special function `Worksheet::extractSheetTitle()`. This function also has been changed to make sure that worksheet title can contain "!" character. So, that function search last position of "!" in reference string and divide it to 2 parts correctly: `['Work!sheet1', 'A1']`.

Fixes #325
Fixes #662
2018-10-03 12:52:51 +09:00
Roland Eigelsreiter 9022c39dd8 fixes for continue inside switch statement (#660)
This a bugfix for php 7.3 related errors where using continue inside a switch raises a PHP warning. Either use continue 2 or break. Previously continue behaves like break but the intended usage is to continue the for loop instead.
2018-09-30 01:11:24 +09:00
Derek Bonner 01501b6ff2 Remove locale from format string to prevent formatting error (#644)
When a formatting string has a locale in it an error can occur when outputting. For example when the format string with a locale such as `[$-1010409]#,##0.00;-#,##0.00` appears, a value of 9.98 comes back as $9.98. This is because at https://github.com/PHPOffice/PhpSpreadsheet/blob/1.4.0/src/PhpSpreadsheet/Style/NumberFormat.php#L711 the numberFormat regex will match to the zeros inside the locale ([$-1010409]). Attempts to adjust the numberFormat regex caused regressions in other tests. Adding another step to filter out the locale caused no regression.
2018-09-28 21:28:40 +09:00
jalgaba 9fa8a02fe3 Fix broken sample links on windows due to $baseDir having backslash (#653) 2018-09-28 21:25:50 +09:00