Changelog
=========
The following changelog is inherited from
`openpyxl `_, from which fastpyxl was
forked. Issue and PR links refer to the original openpyxl repositories.
For fastpyxl-specific changes, see the
`GitHub releases `_.
3.1.5 (2024-06-28)
------------------
* `#2187 `_ Test fails due to change in Numpy API
* `#2198 `_ Excel is very fussy about the version number
* `#2200 `_ Poor perfomance when reading workbooks with lots of named styles
3.1.4 (2024-06-12)
------------------
* `#2189 `_ Assigning named styles doesn't work
* `#2190 `_ Problems caused when saving workbooks created by LibreOffice
Changes
-------
* Python 3.6 and 3.7 are no longer supported.
3.1.3 (2024-05-29)
------------------
Bugfixes
--------
* `#1401 `_ Column name caches are slow and use a lot of memory
* `#1457 `_ Improved handling of duplicate named styles
* `#1842 `_ Rich-text can be saved if lxml is not installed
* `#1954 `_ Documentation for sheet views is incorrect
* `#1973 `_ Timedeltas not read properly in read-only mode
* `#1987 `_ List of formulae names contains mistakes
* `#1967 `_ Filters does not handle non-numerical filters
* `#2054 `_ Type checking increases exponentially
* `#2057 `_ Loading pivot tables can be unnecessarily slow
* `#2102 `_ Improve performance when reading files with lots of custom properties
* `#2106 `_ Setting Trendline.name attribute raises exception when saving
* `#2120 `_ Timezone and Zombie formatting cannot be combined.
* `#2107 `_ Column name generation is inefficient and slow
* `#2122 `_ File handlers not always released in read-only mode
* `#2149 `_ Workbook files not properly closed on Python ≥ 3.11.8 and Windows
* `#2161 `_ Pivot cache definitions using tupleCache had serialisation issues
Changes
-------
* Add a `__repr__` method for Row and Column dimension objects so you don't need to check every time.
3.1.2 (2023-03-11)
------------------
* `#1963 `_ Cannot read worksheets in read-only mode with locally scoped definitions
* `#1974 `_ Empty custom properties cause invalid files
3.1.1 (2023-02-13)
------------------
Bugfixes
--------
* `#1881 `_ DocumentProperties times set by module import only
* `#1947 `_ Worksheet-specific definitions are missing
3.1.0 (2023-01-31)
------------------
New Features
------------
* Added support for data table formulae
* Mapped chartspace graphical properties to charts for advanced formatting
Bugfixes
--------
* `#1156 `_ Table filters are always overriden
* `#1360 `_ Can't read some ScatterCharts if n
* `#1724 `_ Problem with multilevel indices in dataframes
* `#1763 `_ Make calculating worksheet sizes slightly faster
* `#1772 `_ Problem with category indices in dataframes
* `#1786 `_ NamedStyles share attributes - mutables gotcha
* `#1851 `_ Allow print area to be set to None
* `#1852 `_ Worksheet for print title and print areas can't be found
* `#1853 `_ Custom document properties that are strings can be empty
* `#1858 `_ ConditionalFormatting lost when pivot table updated
* `#1864 `_ Better handling of defined names
* `#1904 `_ dataframe_to_rows() misalignment on multiindex
* `#1908 `_ Ditto
* `#1912 `_ Excel doesn't like xmlns:space on nodes with only whitespace, which it treats as empty.
* `#1942 `_ Exception when print areas use table references.
Pull Requests
-------------
* `PR409 `_ Support for Rich Text in cells
* `PR411 `_ Provide more information when workbook cannot be loaded
* `PR407 `_ Support for Custom Document Properties
Deprecations
------------
The following properties have been removed from worksheets: formula_attributes, page_breaks, show_summary_below, show_summary_right, page_size orientation. Client code should use the relevant objects.
Removals
--------
The following deprecated methods have been removed from workbooks: get_named_range, add_named_range, remove_named_range. And the get_emu_dimesions from images.
3.0.10 (2022-05-19)
-------------------
Bugfixes
--------
* `#1684 `_ Image files not closed when workbooks are saved
* `#1778 `_ Problem with missing scope attribute in Pivot Table formats
* `#1821 `_ Excel unhappy when multiple sorts are defined
* `#2014 `_ Accounting format interpreted as datetime
3.0.9 (2021-09-22)
------------------
Bugfixes
--------
* `#1284 `_ Ignore blank ignored in existing Data Validations
* `#1539 `_ Add support for cell protection for merged cell ranges
* `#1645 `_ Timezone-aware datetimes raise an Exception
* `#1666 `_ Improved normalisation of chart series
* `#1670 `_ Catch OverflowError for out of range datetimes
* `#1708 `_ Alignment.relativeIndent can be negative
* `#1736 `_ Incorrect default value `groupBy` attribute
3.0.8 (brown bag)
------------------
Deleted because it contained breaking changes from 3.1
3.0.7 (2021-03-09)
------------------
Bugfixes
--------
* `#1510 `_ Problems with zero time values
* `#1588 `_ Not possible to correctly convert excel dates to timedelta
* `#1589 `_ Exception raised when merging cells which do not have borders all the way round.
* `#1594 `_ Python 2 print statement in the tutorial
Pull Requests
-------------
* `PR392 `_ Add documentation on datetime handling
* `PR393 `_ Drop dependency on jdcal
* `PR394 `_ Datetime rounding
* `PR395 `_ Unify handling of 1900 epoch
* `PR397 `_ Add explicit support for reading datetime deltas
* `PR399 `_ Millisecond precision for datetimes
3.0.6 (2021-01-14)
------------------
Bugfixes
--------
* `#1154 `_ Borders in differential styles are incorrect
* `#1287 `_ Error when opening some pivot tables
* `#1366 `_ Resave breaks the border format in conditional formatting rules
* `#1450 `_ Read-only workbook not closed properly if generator interrupted
* `#1547 `_ Pandas.Multiindex.labels deprecated
* `#1552 `_ Pandas.Multiinex not expanded correctly
* `#1557 `_ Cannot read rows with exponents
* `#1568 `_ numpy.float is deprecated
* `#1571 `_ Cells without coordinate attributes not always correctly handled
Pull Requests
-------------
* `PR385 `_ Improved handling of borders for differential styles
* `PR386 `_ Support subclasses of datetime objects
* `PR387 `_ Improved handling of cells without coordinates
3.0.5 (2020-08-21)
------------------
Bugfixes
--------
* `#1413 `_ Incorrectly consider currency format as datetime
* `#1490 `_ Cannot copy worksheets with merged cells
* `#1492 `_ Empty worksheets do not return generators when looping.
* `#1496 `_ Hyperlinks duplicated on multiple saves
* `#1500 `_ Incorrectly literal format as datetime
* `#1502 `_ Links set to range of cells not preserved
* `#1507 `_ Exception when opening workbook with chartsheets and tables
3.0.4 (2020-06-24)
------------------
Bugfixes
--------
* `#844 `_ Find tables by name
* `#1414 `_ Worksheet protection missing in existing files
* `#1439 `_ Exception when reading files with external images
* `#1452 `_ Reading lots of merged cells is very slow.
* `#1455 `_ Read support for Bubble Charts.
* `#1458 `_ Preserve any indexed colours
* `#1473 `_ Reading many thousand of merged cells is really slow.
* `#1474 `_ Adding tables in write-only mode raises an exception.
Pull Requests
-------------
* `PR377 `_ Add support for finding tables by name or range.
3.0.3 (2020-01-20)
------------------
Bugfixes
--------
* `#1260 `_ Exception when handling merged cells with hyperlinks
* `#1373 `_ Problems when both lxml and defusedxml are installed
* `#1385 `_ CFVO with incorrect values cannot be processed
3.0.2 (2019-11-25)
------------------
Bug fixes
---------
* `#1267 `_ DeprecationError if both defusedxml and lxml are installed
* `#1345 `_ ws._current_row is higher than ws.max_row
* `#1365 `_ Border bottom style is not optional when it should be
* `#1367 `_ Empty cells in read-only, values-only mode are sometimes returned as ReadOnlyCells
* `#1368 `_ Cannot add page breaks to existing worksheets if none exist already
Pull Requests
-------------
* `PR359 `_ Improvements to the documentation
3.0.1 (2019-11-14)
------------------
Bugfixes
--------
* `#1250 `_ Cannot read empty charts.
Pull Requests
-------------
* `PR354 `_ Fix for #1250
* `PR352 `_ TableStyleElement is a sequence
3.0.0 (2019-09-25)
------------------
Python 3.6+ only release
------------------------
2.6.4 (2019-09-25)
------------------
Final release for Python 2.7 and 3.5
------------------------------------
Bugfixes
--------
* ` #1330 `_ Cannot save workbooks with comments more than once.
2.6.3 (2019-08-19)
------------------
Bugfixes
--------
* `#1237 `_ Fix 3D charts.
* `#1290 `_ Minimum for holeSize in Doughnut charts too high
* `#1291 `_ Warning for MergedCells with comments
* `#1296 `_ Pagebreaks duplicated
* `#1309 `_ Workbook has no default CellStyle
* `#1330 `_ Workbooks with comments cannot be saved multiple times
Pull Requests
-------------
* `PR344 `_ Make sure NamedStyles number formats are correctly handled
2.6.2 (2019-03-29)
------------------
Bugfixes
--------
* `#1173 `_ Workbook has no _date_formats attribute
* `#1190 `_ Cannot create charts for worksheets with quotes in the title
* `#1228 `_ MergedCells not removed when range is unmerged
* `#1232 `_ Link to pivot table lost from charts
* `#1233 `_ Chart colours change after saving
* `#1236 `_ Cannot use ws.cell in read-only mode with Python 2.7
2.6.1 (2019-03-04)
------------------
Bugfixes
--------
* `#1174 `_ ReadOnlyCell.is_date does not work properly
* `#1175 `_ Cannot read Google Docs spreadsheet with a Pivot Table
* `#1180 `_ Charts created with fastpyxl cannot be styled
* `#1181 `_ Cannot handle some numpy number types
* `#1182 `_ Exception when reading unknowable number formats
* `#1186 `_ Only last formatting rule for a range loaded
* `#1191 `_ Give MergedCell a `value` attribute
* `#1193 `_ Cannot process worksheets with comments
* `#1197 `_ Cannot process worksheets with both row and page breaks
* `#1204 `_ Cannot reset dimensions in ReadOnlyWorksheets
* `#1211 `_ Incorrect descriptor in ParagraphProperties
* `#1213 `_ Missing `hier` attribute in PageField raises an exception
2.6.0 (2019-02-06)
------------------
Bugfixes
--------
* `#1162 `_ Exception on tables with names containing spaces.
* `#1170 `_ Cannot save files with existing images.
2.6.-b1 (2019-01-08)
--------------------
Bugfixes
--------
* `#1141 `_ Cannot use read-only mode with stream
* `#1143 `_ Hyperlinks always set on A1
* `#1151 `_ Internal row counter not initialised when reading files
* `#1152 `_ Exception raised on out of bounds date
2.6-a1 (2018-11-21)
-------------------
Major changes
-------------
* Implement robust for merged cells so that these can be formatted the way
Excel does without confusion. Thanks to Magnus Schieder.
Minor changes
-------------
* Add support for worksheet scenarios
* Add read support for chartsheets
* Add method for moving ranges of cells on a worksheet
* Drop support for Python 3.4
* Last version to support Python 2.7
Deprecations
------------
* Type inference and coercion for cell values
2.5.14 (2019-01-23)
-------------------
Bugfixes
--------
* `#1150 `_ Correct typo in LineProperties
* `#1142 `_ Exception raised for unsupported image files
* `#1159 `_ Exception raised when cannot find source for non-local cache object
Pull Requests
-------------
* `PR301 `_ Add support for nested brackets to the tokeniser
* `PR303 `_ Improvements on handling nested brackets in the tokeniser
2.5.13 (brown bag)
------------------
2.5.12 (2018-11-29)
-------------------
Bugfixes
--------
* `#1130 `_ Overwriting default font in Normal style affects library default
* `#1133 `_ Images not added to anchors.
* `#1134 `_ Cannot read pivot table formats without dxId
* `#1138 `_ Repeated registration of simple filter could lead to memory leaks
Pull Requests
-------------
* `PR300 `_ Use defusedxml if available
2.5.11 (2018-11-21)
-------------------
Pull Requests
-------------
* `PR295 `_ Improved handling of missing rows
* `PR296 `_ Add support for defined names to tokeniser
2.5.10 (2018-11-13)
-------------------
Bugfixes
--------
* `#1114 `_ Empty column dimensions should not be saved.
Pull Requests
-------------
* `PR285 `_ Tokenizer failure for quoted sheet name in second half of range
* `PR289 `_ Improved error detection in ranges.
2.5.9 (2018-10-19)
------------------
Bugfixes
--------
* `#1000 `_ Clean AutoFilter name definitions
* `#1106 `_ Attribute missing from Shape object
* `#1109 `_ Failure to read all DrawingML means workbook can't be read
Pull Requests
-------------
* `PR281 `_ Allow newlines in formulae
* `PR284 `_ Fix whitespace in front of infix operator in formulae
2.5.8 (2018-09-25)
------------------
* `#877 `_ Cannot control how missing values are displayed in charts.
* `#948 `_ Cell references can't be used for chart titles
* `#1095 `_ Params in iter_cols and iter_rows methods are slightly wrong.
2.5.7 (2018-09-13)
------------------
* `#954 `_ Sheet title containing % need quoting in references
* `#1047 `_ Cannot set quote prefix
* `#1093 `_ Pandas timestamps raise KeyError
2.5.6 (2018-08-30)
------------------
* `#832 `_ Read-only mode can leave find-handles open when reading dimensions
* `#933 `_ Set a worksheet directly as active
* `#1086 `_ Internal row counter not adjusted when rows are deleted or inserted
2.5.5 (2018-08-04)
------------------
Bugfixes
--------
* `#1049 `_ Files with Mac epoch are read incorrectly
* `#1058 `_ Cannot copy merged cells
* `#1066 `_ Cannot access ws.active_cell
Pull Requests
-------------
* `PR267 `_ Introduce read-support for images
2.5.4 (2018-06-07)
------------------
Bugfixes
--------
* `#1025 `_ Cannot read files with 3D charts.
* `#1030 `_ Merged cells take a long time to parse
Minor changes
-------------
* Improve read support for pivot tables and don't always create a Filters child for filterColumn objects.
* `Support folding rows` `_
2.5.3 (2018-04-18)
------------------
Bugfixes
--------
* `#983 `_ Warning level too aggressive.
* `#1015 `_ Alignment and protection values not saved for named styles.
* `#1017 `_ Deleting elements from a legend doesn't work.
* `#1018 `_ Index names repeated for every row in dataframe.
* `#1020 `_ Worksheet protection not being stored.
* `#1023 `_ Exception raised when reading a tooltip.
2.5.2 (2018-04-06)
------------------
Bugfixes
--------
* `#949 `_ High memory use when reading text-heavy files.
* `#970 `_ Copying merged cells copies references.
* `#978 `_ Cannot set comment size.
* `#985 `_ Exception when trying to save workbooks with no views.
* `#995 `_ Cannot delete last row or column.
* `#1002 `_ Cannot read Drawings containing embedded images.
Minor changes
-------------
* Support for dataframes with multiple columns and multiple indices.
2.5.1 (2018-03-12)
------------------
Bugfixes
--------
* `#934 `_ Headers and footers not included in write-only mode.
* `#960 `_ Deprecation warning raised when using ad-hoc access in read-only mode.
* `#964 `_ Not all cells removed when deleting multiple rows.
* `#966 `_ Cannot read 3d bar chart correctly.
* `#967 `_ Problems reading some charts.
* `#968 `_ Worksheets with SHA protection become corrupted after saving.
* `#974 `_ Problem when deleting ragged rows or columns.
* `#976 `_ GroupTransforms and GroupShapeProperties have incorrect descriptors
* Make sure that headers and footers in chartsheets are included in the file
2.5.0 (2018-01-24)
------------------
Minor changes
-------------
* Correct definition for Connection Shapes. Related to # 958
2.5.0-b2 (2018-01-19)
---------------------
Bugfixes
--------
* `#915 `_ TableStyleInfo has no required attributes
* `#925 `_ Cannot read files with 3D drawings
* `#926 `_ Incorrect version check in installer
* Cell merging uses transposed parameters
* `#928 `_ ExtLst missing keyword for PivotFields
* `#932 `_ Inf causes problems for Excel
* `#952 `_ Cannot load table styles with custom names
Major Changes
-------------
* You can now insert and delete rows and columns in worksheets
Minor Changes
-------------
* pip now handles which Python versions can be used.
2.5.0-b1 (2017-10-19)
---------------------
Bugfixes
--------
* `#812 `_ Explicitly support for multiple cell ranges in conditonal formatting
* `#827 `_ Non-contiguous cell ranges in validators get merged
* `#837 `_ Empty data validators create invalid Excel files
* `#860 `_ Large validation ranges use lots of memory
* `#876 `_ Unicode in chart axes not handled correctly in Python 2
* `#882 `_ ScatterCharts have defective axes
* `#885 `_ Charts with empty numVal elements cannot be read
* `#894 `_ Scaling options from existing files ignored
* `#895 `_ Charts with PivotSource cannot be read
* `#903 `_ Cannot read gradient fills
* `#904 `_ Quotes in number formats could be treated as datetimes
Major Changes
-------------
`worksheet.cell()` no longer accepts a `coordinate` parameter. The syntax is now `ws.cell(row, column, value=None)`
Minor Changes
-------------
Added CellRange and MultiCellRange types (thanks to Laurent LaPorte for the
suggestion) as a utility type for things like data validations, conditional
formatting and merged cells.
Deprecations
------------
ws.merged_cell_ranges has been deprecated because MultiCellRange provides sufficient functionality
2.5.0-a3 (2017-08-14)
---------------------
Bugfixes
--------
* `#848 `_ Reading workbooks with Pie Charts raises an exception
* `#857 `_ Pivot Tables without Worksheet Sources raise an exception
2.5.0-a2 (2017-06-25)
---------------------
Major Changes
-------------
* Read support for charts
Bugfixes
--------
* `#833 `_ Cannot access chartsheets by title
* `#834 `_ Preserve workbook views
* `#841 `_ Incorrect classification of a datetime
2.5.0-a1 (2017-05-30)
---------------------
Compatibility
-------------
* Dropped support for Python 2.6 and 3.3. fastpyxl will not run with Python 2.6
Major Changes
-------------
* Read/write support for pivot tables
Deprecations
------------
* Dropped the anchor method from images and additional constructor arguments
Bugfixes
--------
* `#779 `_ Fails to recognise Chinese date format`
* `#828 `_ Include hidden cells in charts`
Pull requests
-------------
* `163 `_ Improved GradientFill
Minor changes
-------------
* Remove deprecated methods from Cell
* Remove deprecated methods from Worksheet
* Added read/write support for the datetime type for cells
2.4.11 (2018-01-24)
-------------------
* #957 ``_ Relationship type for tables is borked
2.4.10 (2018-01-19)
-------------------
Bugfixes
--------
* #912 ``_ Copying objects uses shallow copy
* #921 ``_ API documentation not generated automatically
* #927 ``_ Exception raised when adding coloured borders together
* #931 ``_ Number formats not correctly deduplicated
Pull requests
-------------
* 203 ``_ Correction to worksheet protection description
* 210 ``_ Some improvements to the API docs
* 211 ``_ Improved deprecation decorator
* 218 ``_ Fix problems with deepcopy
2.4.9 (2017-10-19)
------------------
Bugfixes
--------
* `#809 `_ Incomplete documentation of `copy_worksheet` method
* `#811 `_ Scoped definedNames not removed when worksheet is deleted
* `#824 `_ Raise an exception if a chart is used in multiple sheets
* `#842 `_ Non-ASCII table column headings cause an exception in Python 2
* `#846 `_ Conditional formats not supported in write-only mode
* `#849 `_ Conditional formats with no sqref cause an exception
* `#859 `_ Headers that start with a number conflict with font size
* `#902 `_ TableStyleElements don't always have a condtional format
* `#908 `_ Read-only mode sometimes returns too many cells
Pull requests
-------------
* `#179 `_ Cells kept in a set
* `#180 `_ Support for Workbook protection
* `#182 `_ Read support for page breaks
* `#183 `_ Improve documentation of `copy_worksheet` method
* `#198 `_ Fix for #908
2.4.8 (2017-05-30)
------------------
Bugfixes
--------
* AutoFilter.sortState being assignd to the ws.sortState
* `#766 `_ Sheetnames with apostrophes need additional escaping
* `#729 `_ Cannot open files created by Microsoft Dynamics
* `#819 `_ Negative percents not case correctly
* `#821 `_ Runtime imports can cause deadlock
* `#855 `_ Print area containing only columns leads to corrupt file
Minor changes
-------------
* Preserve any table styles
2.4.7 (2017-04-24)
------------------
Bugfixes
--------
* `#807 `_ Sample files being included by mistake in sdist
2.4.6 (2017-04-14)
------------------
Bugfixes
--------
* `#776 `_ Cannot apply formatting to plot area
* `#780 `_ Exception when element attributes are Python keywords
* `#781 `_ Exception raised when saving files with styled columns
* `#785 `_ Number formats for data labels are incorrect
* `#788 `_ Worksheet titles not quoted in defined names
* `#800 `_ Font underlines not read correctly
2.4.5 (2017-03-07)
------------------
Bugfixes
--------
* `#750 `_ Adding images keeps file handles open
* `#772 `_ Exception for column-only ranges
* `#773 `_ Cannot copy worksheets with non-ascii titles on Python 2
Pull requests
-------------
* `161 `_ Support for non-standard names for Workbook part.
* `162 `_ Documentation correction
2.4.4 (2017-02-23)
------------------
Bugfixes
--------
* `#673 `_ Add close method to workbooks
* `#762 `_ fastpyxl can create files with invalid style indices
* `#729 `_ Allow images in write-only mode
* `#744 `_ Rounded corners for charts
* `#747 `_ Use repr when handling non-convertible objects
* `#764 `_ Hashing function is incorrect
* `#765 `_ Named styles share underlying array
Minor Changes
-------------
* Add roundtrip support for worksheet tables.
Pull requests
-------------
* `160 `_ Don't init mimetypes more than once.
2.4.3 (unreleased)
------------------
bad release
2.4.2 (2017-01-31)
------------------
Bug fixes
---------
* `#727 `_ DeprecationWarning is incorrect
* `#734 `_ Exception raised if userName is missing
* `#739 `_ Always provide a date1904 attribute
* `#740 `_ Hashes should be stored as Base64
* `#743 `_ Print titles broken on sheetnames with spaces
* `#748 `_ Workbook breaks when active sheet is removed
* `#754 `_ Incorrect descriptor for Filter values
* `#756 `_ Potential XXE vulerability
* `#758 `_ Cannot create files with page breaks and charts
* `#759 `_ Problems with worksheets with commas in their titles
Minor Changes
-------------
* Add unicode support for sheet name incrementation.
2.4.1 (2016-11-23)
------------------
Bug fixes
---------
* `#643 `_ Make checking for duplicate sheet titles case insensitive
* `#647 `_ Trouble handling LibreOffice files with named styles
* `#687