3.0.10 (unreleased) =================== Bugfixes -------- * `#1684 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1684>`_ Image files not closed when workbooks are saved * `#1778 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1778>`_ Problem with missing scope attribute in Pivot Table formats 3.0.9 (2021-09-22) ================== Bugfixes -------- * `#1284 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1284>`_ Ignore blank ignored in existing Data Validations * `#1539 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1539>`_ Add support for cell protection for merged cell ranges * `#1645 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1645>`_ Timezone-aware datetimes raise an Exception * `#1666 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1666>`_ Improved normalisation of chart series * `#1670 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1670>`_ Catch OverflowError for out of range datetimes * `#1708 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1708>`_ Alignment.relativeIndent can be negative * `#1736 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1769>`_ 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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1510>`_ Problems with zero time values * `#1588 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1588>`_ Not possible to correctly convert excel dates to timedelta * `#1589 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1589>`_ Exception raised when merging cells which do not have borders all the way round. * `#1594 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1594>`_ Python 2 print statement in the tutorial Pull Requests ------------- * `PR392 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/392/>`_ Add documentation on datetime handling * `PR393 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/393/>`_ Drop dependency on jdcal * `PR394 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/394/>`_ Datetime rounding * `PR395 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/395/>`_ Unify handling of 1900 epoch * `PR397 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/397/>`_ Add explicit support for reading datetime deltas * `PR399 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/399/>`_ Millisecond precision for datetimes 3.0.6 (2021-01-14) ================== Bugfixes -------- * `#1154 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1154>`_ Borders in differential styles are incorrect * `#1287 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1528>`_ Error when opening some pivot tables * `#1366 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1366>`_ Resave breaks the border format in conditional formatting rules * `#1450 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1450>`_ Read-only workbook not closed properly if generator interrupted * `#1547 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1547>`_ Pandas.Multiindex.labels deprecated * `#1552 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1557>`_ Pandas.Multiinex not expanded correctly * `#1557 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1557>`_ Cannot read rows with exponents * `#1568 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1568>`_ numpy.float is deprecated * `#1571 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1571>`_ Cells without coordinate attributes not always correctly handled Pull Requests ------------- * `PR385 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/385/>`_ Improved handling of borders for differential styles * `PR386 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/386/>`_ Support subclasses of datetime objects * `PR387 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/387/>`_ Improved handling of cells without coordinates 3.0.5 (2020-08-21) ================== Bugfixes -------- * `#1413 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1413>`_ Incorrectly consider currency format as datetime * `#1490 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1490>`_ Cannot copy worksheets with merged cells * `#1492 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1492>`_ Empty worksheets do not return generators when looping. * `#1496 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1496>`_ Hyperlinks duplicated on multiple saves * `#1500 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1500>`_ Incorrectly literal format as datetime * `#1502 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1502>`_ Links set to range of cells not preserved * `#1507 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1507>`_ Exception when opening workbook with chartsheets and tables 3.0.4 (2020-06-24) ================== Bugfixes -------- * `#844 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/844>`_ Find tables by name * `#1414 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1414>`_ Worksheet protection missing in existing files * `#1439 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1439>`_ Exception when reading files with external images * `#1452 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1452>`_ Reading lots of merged cells is very slow. * `#1455 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1455>`_ Read support for Bubble Charts. * `#1458 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1458>`_ Preserve any indexed colours * `#1473 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1473>`_ Reading many thousand of merged cells is really slow. * `#1474 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1474>`_ Adding tables in write-only mode raises an exception. Pull Requests ------------- * `PR377 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/377/>`_ Add support for finding tables by name or range. 3.0.3 (2020-01-20) ================== Bugfixes -------- * `#1260 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1260>`_ Exception when handling merged cells with hyperlinks * `#1373 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1373>`_ Problems when both lxml and defusedxml are installed * `#1385 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1385>`_ CFVO with incorrect values cannot be processed 3.0.2 (2019-11-25) ================== Bug fixes --------- * `#1267 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1267>`_ DeprecationError if both defusedxml and lxml are installed * `#1345 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1345>`_ ws._current_row is higher than ws.max_row * `#1365 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1365>`_ Border bottom style is not optional when it should be * `#1367 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1367>`_ Empty cells in read-only, values-only mode are sometimes returned as ReadOnlyCells * `#1368 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1368>`_ Cannot add page breaks to existing worksheets if none exist already Pull Requests ------------- * `PR359 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/359/>`_ Improvements to the documentation 3.0.1 (2019-11-14) ================== Bugfixes -------- * `#1250 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1250>`_ Cannot read empty charts. Pull Requests ------------- * `PR354 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/354/>`_ Fix for #1250 * `PR352 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/354/>`_ 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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1330>`_ Cannot save workbooks with comments more than once. 2.6.3 (2019-08-19) ================== Bugfixes -------- * `#1237 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1237>`_ Fix 3D charts. * `#1290 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1290>`_ Minimum for holeSize in Doughnut charts too high * `#1291 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1291>`_ Warning for MergedCells with comments * `#1296 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1296>`_ Pagebreaks duplicated * `#1309 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1309>`_ Workbook has no default CellStyle * `#1330 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1330>`_ Workbooks with comments cannot be saved multiple times Pull Requests ------------- * `PR344 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/345/>`_ Make sure NamedStyles number formats are correctly handled 2.6.2 (2019-03-29) ================== Bugfixes -------- * `#1173 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1173>`_ Workbook has no _date_formats attribute * `#1190 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1190>`_ Cannot create charts for worksheets with quotes in the title * `#1228 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1228>`_ MergedCells not removed when range is unmerged * `#1232 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1232>`_ Link to pivot table lost from charts * `#1233 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1233>`_ Chart colours change after saving * `#1236 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1236>`_ Cannot use ws.cell in read-only mode with Python 2.7 2.6.1 (2019-03-04) ================== Bugfixes -------- * `#1174 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1174>`_ ReadOnlyCell.is_date does not work properly * `#1175 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1175>`_ Cannot read Google Docs spreadsheet with a Pivot Table * `#1180 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1180>`_ Charts created with openpyxl cannot be styled * `#1181 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1181>`_ Cannot handle some numpy number types * `#1182 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1182>`_ Exception when reading unknowable number formats * `#1186 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1186>`_ Only last formatting rule for a range loaded * `#1191 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1191>`_ Give MergedCell a `value` attribute * `#1193 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1193>`_ Cannot process worksheets with comments * `#1197 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1197>`_ Cannot process worksheets with both row and page breaks * `#1204 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1204>`_ Cannot reset dimensions in ReadOnlyWorksheets * `#1211 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1211>`_ Incorrect descriptor in ParagraphProperties * `#1213 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1213>`_ Missing `hier` attribute in PageField raises an exception 2.6.0 (2019-02-06) ================== Bugfixes -------- * `#1162 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1162>`_ Exception on tables with names containing spaces. * `#1170 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1170>`_ Cannot save files with existing images. 2.6.-b1 (2019-01-08) ==================== Bugfixes -------- * `#1141 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1141>`_ Cannot use read-only mode with stream * `#1143 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1143>`_ Hyperlinks always set on A1 * `#1151 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1151>`_ Internal row counter not initialised when reading files * `#1152 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1150>`_ Correct typo in LineProperties * `#1142 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1142>`_ Exception raised for unsupported image files * `#1159 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1159>`_ Exception raised when cannot find source for non-local cache object Pull Requests ------------- * `PR301 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/301/>`_ Add support for nested brackets to the tokeniser * `PR303 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/301/>`_ Improvements on handling nested brackets in the tokeniser 2.5.13 (brown bag) ================== 2.5.12 (2018-11-29) =================== Bugfixes -------- * `#1130 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1130>`_ Overwriting default font in Normal style affects library default * `#1133 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1133>`_ Images not added to anchors. * `#1134 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1134>`_ Cannot read pivot table formats without dxId * `#1138 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1138>`_ Repeated registration of simple filter could lead to memory leaks Pull Requests ------------- * `PR300 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/300/>`_ Use defusedxml if available 2.5.11 (2018-11-21) =================== Pull Requests ------------- * `PR295 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/295>`_ Improved handling of missing rows * `PR296 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/296>`_ Add support for defined names to tokeniser 2.5.10 (2018-11-13) =================== Bugfixes -------- * `#1114 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1114>`_ Empty column dimensions should not be saved. Pull Requests ------------- * `PR285 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/285>`_ Tokenizer failure for quoted sheet name in second half of range * `PR289 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/289>`_ Improved error detection in ranges. 2.5.9 (2018-10-19) ================== Bugfixes -------- * `#1000 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1000>`_ Clean AutoFilter name definitions * `#1106 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1106>`_ Attribute missing from Shape object * `#1109 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1109>`_ Failure to read all DrawingML means workbook can't be read Pull Requests ------------- * `PR281 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/281>`_ Allow newlines in formulae * `PR284 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/284>`_ Fix whitespace in front of infix operator in formulae 2.5.8 (2018-09-25) ================== * `#877 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/877>`_ Cannot control how missing values are displayed in charts. * `#948 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/948>`_ Cell references can't be used for chart titles * `#1095 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1095>`_ Params in iter_cols and iter_rows methods are slightly wrong. 2.5.7 (2018-09-13) ================== * `#954 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/954>`_ Sheet title containing % need quoting in references * `#1047 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1047>`_ Cannot set quote prefix * `#1093 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1093>`_ Pandas timestamps raise KeyError 2.5.6 (2018-08-30) ================== * `#832 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/832>`_ Read-only mode can leave find-handles open when reading dimensions * `#933 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/933>`_ Set a worksheet directly as active * `#1086 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1086>`_ Internal row counter not adjusted when rows are deleted or inserted 2.5.5 (2018-08-04) ================== Bugfixes -------- * `#1049 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1049>`_ Files with Mac epoch are read incorrectly * `#1058 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1058>`_ Cannot copy merged cells * `#1066 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1066>`_ Cannot access ws.active_cell Pull Requests ------------- * `PR267 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/267/image-read>`_ Introduce read-support for images 2.5.4 (2018-06-07) ================== Bugfixes -------- * `#1025 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1025>`_ Cannot read files with 3D charts. * `#1030 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/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` <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/259/fold-rows>`_ 2.5.3 (2018-04-18) ================== Bugfixes -------- * `#983 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/983>`_ Warning level too aggressive. * `#1015 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1015>`_ Alignment and protection values not saved for named styles. * `#1017 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1017>`_ Deleting elements from a legend doesn't work. * `#1018 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1018>`_ Index names repeated for every row in dataframe. * `#1020 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1020>`_ Worksheet protection not being stored. * `#1023 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1023>`_ Exception raised when reading a tooltip. 2.5.2 (2018-04-06) ================== Bugfixes -------- * `#949 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/949>`_ High memory use when reading text-heavy files. * `#970 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/970>`_ Copying merged cells copies references. * `#978 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/978>`_ Cannot set comment size. * `#985 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/895>`_ Exception when trying to save workbooks with no views. * `#995 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/995>`_ Cannot delete last row or column. * `#1002 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/934>`_ Headers and footers not included in write-only mode. * `#960 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/960>`_ Deprecation warning raised when using ad-hoc access in read-only mode. * `#964 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/964>`_ Not all cells removed when deleting multiple rows. * `#966 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/966>`_ Cannot read 3d bar chart correctly. * `#967 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/967>`_ Problems reading some charts. * `#968 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/968>`_ Worksheets with SHA protection become corrupted after saving. * `#974 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/974>`_ Problem when deleting ragged rows or columns. * `#976 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/915>`_ TableStyleInfo has no required attributes * `#925 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/925>`_ Cannot read files with 3D drawings * `#926 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/926>`_ Incorrect version check in installer * Cell merging uses transposed parameters * `#928 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/928>`_ ExtLst missing keyword for PivotFields * `#932 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/932>`_ Inf causes problems for Excel * `#952 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/812>`_ Explicitly support for multiple cell ranges in conditonal formatting * `#827 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/827>`_ Non-contiguous cell ranges in validators get merged * `#837 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/837>`_ Empty data validators create invalid Excel files * `#860 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/860>`_ Large validation ranges use lots of memory * `#876 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/876>`_ Unicode in chart axes not handled correctly in Python 2 * `#882 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/882>`_ ScatterCharts have defective axes * `#885 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/885>`_ Charts with empty numVal elements cannot be read * `#894 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/894>`_ Scaling options from existing files ignored * `#895 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/895>`_ Charts with PivotSource cannot be read * `#903 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/903>`_ Cannot read gradient fills * `#904 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/848>`_ Reading workbooks with Pie Charts raises an exception * `#857 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/857>`_ Pivot Tables without Worksheet Sources raise an exception 2.5.0-a2 (2017-06-25) ===================== Major Changes ------------- * Read support for charts Bugfixes -------- * `#833 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/833>`_ Cannot access chartsheets by title * `#834 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/834>`_ Preserve workbook views * `#841 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/841>`_ Incorrect classification of a datetime 2.5.0-a1 (2017-05-30) ===================== Compatibility ------------- * Dropped support for Python 2.6 and 3.3. openpyxl 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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/779>`_ Fails to recognise Chinese date format` * `#828 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/828>`_ Include hidden cells in charts` Pull requests ------------- * `163 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_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 `<https://foss.heptapod.net/openpyxl/openpyxl/-/issues/957>`_ Relationship type for tables is borked 2.4.10 (2018-01-19) =================== Bugfixes -------- * #912 `<https://foss.heptapod.net/openpyxl/openpyxl/-/issues/912>`_ Copying objects uses shallow copy * #921 `<https://foss.heptapod.net/openpyxl/openpyxl/-/issues/921>`_ API documentation not generated automatically * #927 `<https://foss.heptapod.net/openpyxl/openpyxl/-/issues/927>`_ Exception raised when adding coloured borders together * #931 `<https://foss.heptapod.net/openpyxl/openpyxl/-/issues/931>`_ Number formats not correctly deduplicated Pull requests ------------- * 203 `<https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/203/>`_ Correction to worksheet protection description * 210 `<https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/210/>`_ Some improvements to the API docs * 211 `<https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/211/>`_ Improved deprecation decorator * 218 `<https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/218/>`_ Fix problems with deepcopy 2.4.9 (2017-10-19) ================== Bugfixes -------- * `#809 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/809>`_ Incomplete documentation of `copy_worksheet` method * `#811 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/811>`_ Scoped definedNames not removed when worksheet is deleted * `#824 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/824>`_ Raise an exception if a chart is used in multiple sheets * `#842 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/842>`_ Non-ASCII table column headings cause an exception in Python 2 * `#846 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/846>`_ Conditional formats not supported in write-only mode * `#849 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/849>`_ Conditional formats with no sqref cause an exception * `#859 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/859>`_ Headers that start with a number conflict with font size * `#902 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/902>`_ TableStyleElements don't always have a condtional format * `#908 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/908>`_ Read-only mode sometimes returns too many cells Pull requests ------------- * `#179 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/179>`_ Cells kept in a set * `#180 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/180>`_ Support for Workbook protection * `#182 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/182>`_ Read support for page breaks * `#183 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/183>`_ Improve documentation of `copy_worksheet` method * `#198 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/198>`_ Fix for #908 2.4.8 (2017-05-30) ================== Bugfixes -------- * AutoFilter.sortState being assignd to the ws.sortState * `#766 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/666>`_ Sheetnames with apostrophes need additional escaping * `#729 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/729>`_ Cannot open files created by Microsoft Dynamics * `#819 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/819>`_ Negative percents not case correctly * `#821 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/821>`_ Runtime imports can cause deadlock * `#855 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/855>`_ Print area containing only columns leads to corrupt file Minor changes ------------- * Preserve any table styles 2.4.7 (2017-04-24) ================== Bugfixes -------- * `#807 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/807>`_ Sample files being included by mistake in sdist 2.4.6 (2017-04-14) ================== Bugfixes -------- * `#776 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/776>`_ Cannot apply formatting to plot area * `#780 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/780>`_ Exception when element attributes are Python keywords * `#781 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/781>`_ Exception raised when saving files with styled columns * `#785 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/785>`_ Number formats for data labels are incorrect * `#788 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/788>`_ Worksheet titles not quoted in defined names * `#800 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/800>`_ Font underlines not read correctly 2.4.5 (2017-03-07) ================== Bugfixes -------- * `#750 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/750>`_ Adding images keeps file handles open * `#772 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/772>`_ Exception for column-only ranges * `#773 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/773>`_ Cannot copy worksheets with non-ascii titles on Python 2 Pull requests ------------- * `161 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/161>`_ Support for non-standard names for Workbook part. * `162 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/162>`_ Documentation correction 2.4.4 (2017-02-23) ================== Bugfixes -------- * `#673 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/673>`_ Add close method to workbooks * `#762 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/762>`_ openpyxl can create files with invalid style indices * `#729 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/729>`_ Allow images in write-only mode * `#744 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/744>`_ Rounded corners for charts * `#747 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/747>`_ Use repr when handling non-convertible objects * `#764 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/764>`_ Hashing function is incorrect * `#765 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/765>`_ Named styles share underlying array Minor Changes ------------- * Add roundtrip support for worksheet tables. Pull requests ------------- * `160 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/160>`_ Don't init mimetypes more than once. 2.4.3 (unreleased) ================== bad release 2.4.2 (2017-01-31) ================== Bug fixes --------- * `#727 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/727>`_ DeprecationWarning is incorrect * `#734 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/734>`_ Exception raised if userName is missing * `#739 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/739>`_ Always provide a date1904 attribute * `#740 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/740>`_ Hashes should be stored as Base64 * `#743 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/743>`_ Print titles broken on sheetnames with spaces * `#748 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/748>`_ Workbook breaks when active sheet is removed * `#754 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/754>`_ Incorrect descriptor for Filter values * `#756 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/756>`_ Potential XXE vulerability * `#758 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/758>`_ Cannot create files with page breaks and charts * `#759 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/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 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/643>`_ Make checking for duplicate sheet titles case insensitive * `#647 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/647>`_ Trouble handling LibreOffice files with named styles * `#687 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/682>`_ Directly assigned new named styles always refer to "Normal" * `#690 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/690>`_ Cannot parse print titles with multiple sheet names * `#691 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/691>`_ Cannot work with macro files created by LibreOffice * Prevent duplicate differential styles * `#694 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/694>`_ Allow sheet titles longer than 31 characters * `#697 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/697>`_ Cannot unset hyperlinks * `#699 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/699>`_ Exception raised when format objects use cell references * `#703 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/703>`_ Copy height and width when copying comments * `#705 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/705>`_ Incorrect content type for VBA macros * `#707 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/707>`_ IndexError raised in read-only mode when accessing individual cells * `#711 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/711>`_ Files with external links become corrupted * `#715 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/715>`_ Cannot read files containing macro sheets * `#717 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/717>`_ Details from named styles not preserved when reading files * `#722 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/722>`_ Remove broken Print Title and Print Area definitions Minor changes ------------- * Add support for Python 3.6 * Correct documentation for headers and footers Deprecations ------------ Worksheet methods `get_named_range()` and `get_sqaured_range()` Bug fixes --------- 2.4.0 (2016-09-15) ================== Bug fixes --------- * `#652 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/652>`_ Exception raised when epoch is 1904 * `#642 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/642>`_ Cannot handle unicode in headers and footers in Python 2 * `#646 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/646>`_ Cannot handle unicode sheetnames in Python 2 * `#658 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/658>`_ Chart styles, and axis units should not be 0 * `#663 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/663>`_ Strings in external workbooks not unicode Major changes ------------- * Add support for builtin styles and include one for Pandas Minor changes ------------- * Add a `keep_links` option to `load_workbook`. External links contain cached copies of the external workbooks. If these are big it can be advantageous to be able to disable them. * Provide an example for using cell ranges in DataValidation. * PR 138 - add copy support to comments. 2.4.0-b1 (2016-06-08) ===================== Minor changes ------------- * Add an the alias `hide_drop_down` to DataValidation for `showDropDown` because that is how Excel works. Bug fixes --------- * `#625 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/625>`_ Exception raises when inspecting EmptyCells in read-only mode * `#547 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/547>`_ Functions for handling OOXML "escaped" ST_XStrings * `#629 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/629>`_ Row Dimensions not supported in write-only mode * `#530 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/530>`_ Problems when removing worksheets with charts * `#630 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/630>`_ Cannot use SheetProtection in write-only mode Features -------- * Add write support for worksheet tables 2.4.0-a1 (2016-04-11) ===================== Minor changes ------------- * Remove deprecated methods from DataValidation * Remove deprecated methods from PrintPageSetup * Convert AutoFilter to Serialisable and extend support for filters * Add support for SortState * Removed `use_iterators` keyword when loading workbooks. Use `read_only` instead. * Removed `optimized_write` keyword for new workbooks. Use `write_only` instead. * Improve print title support * Add print area support * New implementation of defined names * New implementation of page headers and footers * Add support for Python's NaN * Added iter_cols method for worksheets * ws.rows and ws.columns now always return generators and start at the top of the worksheet * Add a `values` property for worksheets * Default column width changed to 8 as per the specification Deprecations ------------ * Cell anchor method * Worksheet point_pos method * Worksheet add_print_title method * Worksheet HeaderFooter attribute, replaced by individual ones * Flatten function for cells * Workbook get_named_range, add_named_range, remove_named_range, get_sheet_names, get_sheet_by_name * Comment text attribute * Use of range strings deprecated for ws.iter_rows() * Use of coordinates deprecated for ws.cell() * Deprecate .copy() method for StyleProxy objects Bug fixes --------- * `#152 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/152>`_ Hyperlinks lost when reading files * `#171 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/171>`_ Add function for copying worksheets * `#386 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/386>`_ Cells with inline strings considered empty * `#397 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/397>`_ Add support for ranges of rows and columns * `#446 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/446>`_ Workbook with definedNames corrupted by openpyxl * `#481 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/481>`_ "safe" reserved ranges are not read from workbooks * `#501 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/501>`_ Discarding named ranges can lead to corrupt files * `#574 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/574>`_ Exception raised when using the class method to parse Relationships * `#579 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/579>`_ Crashes when reading defined names with no content * `#597 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/597>`_ Cannot read worksheets without coordinates * `#617 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/617>`_ Customised named styles not correctly preserved 2.3.5 (2016-04-11) ================== Bug fixes --------- * `#618 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/618>`_ Comments not written in write-only mode 2.3.4 (2016-03-16) ================== Bug fixes --------- * `#594 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/594>`_ Content types might be missing when keeping VBA * `#599 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/599>`_ Cells with only one cell look empty * `#607 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/607>`_ Serialise NaN as '' Minor changes ------------- * Preserve the order of external references because formualae use numerical indices. * Typo corrected in cell unit tests (PR 118) 2.3.3 (2016-01-18) ================== Bug fixes --------- * `#540 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/540>`_ Cannot read merged cells in read-only mode * `#565 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/565>`_ Empty styled text blocks cannot be parsed * `#569 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/569>`_ Issue warning rather than raise Exception raised for unparsable definedNames * `#575 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/575>`_ Cannot open workbooks with embdedded OLE files * `#584 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/584>`_ Exception when saving borders with attributes Minor changes ------------- * `PR 103 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/103/>`_ Documentation about chart scaling and axis limits * Raise an exception when trying to copy cells from other workbooks. 2.3.2 (2015-12-07) ================== Bug fixes --------- * `#554 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/554>`_ Cannot add comments to a worksheet when preserving VBA * `#561 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/561>`_ Exception when reading phonetic text * `#562 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/562>`_ DARKBLUE is the same as RED * `#563 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/563>`_ Minimum for row and column indexes not enforced Minor changes ------------- * `PR 97 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/97/>`_ One VML file per worksheet. * `PR 96 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/96/>`_ Correct descriptor for CharacterProperties.rtl * `#498 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/498>`_ Metadata is not essential to use the package. 2.3.1 (2015-11-20) ================== Bug fixes --------- * `#534 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/534>`_ Exception when using columns property in read-only mode. * `#536 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/536>`_ Incorrectly handle comments from Google Docs files. * `#539 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/539>`_ Flexible value types for conditional formatting. * `#542 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/542>`_ Missing content types for images. * `#543 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/543>`_ Make sure images fit containers on all OSes. * `#544 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/544>`_ Gracefully handle missing cell styles. * `#546 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/546>`_ ExternalLink duplicated when editing a file with macros. * `#548 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/548>`_ Exception with non-ASCII worksheet titles * `#551 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/551>`_ Combine multiple LineCharts Minor changes ------------- * `PR 88 <https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/88/>`_ Fix page margins in parser. 2.3.0 (2015-10-20) ================== Major changes ------------- * Support the creation of chartsheets Bug fixes --------- * `#532 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/532>`_ Problems when cells have no style in read-only mode. Minor changes ------------- * PR 79 Make PlotArea editable in charts * Use graphicalProperties as the alias for spPr 2.3.0-b2 (2015-09-04) ===================== Bug fixes --------- * `#488 <https://bitbucket.org/openpyxl/openpyxl/issue/488>`_ Support hashValue attribute for sheetProtection * `#493 <https://bitbucket.org/openpyxl/openpyxl/issue/493>`_ Warn that unsupported extensions will be dropped * `#494 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/494/>`_ Cells with exponentials causes a ValueError * `#497 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/497/>`_ Scatter charts are broken * `#499 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/499/>`_ Inconsistent conversion of localised datetimes * `#500 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/500/>`_ Adding images leads to unreadable files * `#509 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/509/>`_ Improve handling of sheet names * `#515 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/515/>`_ Non-ascii titles have bad repr * `#516 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/516/>`_ Ignore unassigned worksheets Minor changes ------------- * Worksheets are now iterable by row. * Assign individual cell styles only if they are explicitly set. 2.3.0-b1 (2015-06-29) ===================== Major changes ------------- * Shift to using (row, column) indexing for cells. Cells will at some point *lose* coordinates. * New implementation of conditional formatting. Databars now partially preserved. * et_xmlfile is now a standalone library. * Complete rewrite of chart package * Include a tokenizer for fomulae to be able to adjust cell references in them. PR 63 Minor changes ------------- * Read-only and write-only worksheets renamed. * Write-only workbooks support charts and images. * `PR76 <https://bitbucket.org/openpyxl/openpyxl/pull-request/76>`_ Prevent comment images from conflicting with VBA Bug fixes --------- * `#81 <https://bitbucket.org/openpyxl/openpyxl/issue/81>`_ Support stacked bar charts * `#88 <https://bitbucket.org/openpyxl/openpyxl/issue/88>`_ Charts break hyperlinks * `#97 <https://bitbucket.org/openpyxl/openpyxl/issue/97>`_ Pie and combination charts * `#99 <https://bitbucket.org/openpyxl/openpyxl/issue/99>`_ Quote worksheet names in chart references * `#150 <https://bitbucket.org/openpyxl/openpyxl/issue/150>`_ Support additional chart options * `#172 <https://bitbucket.org/openpyxl/openpyxl/issue/172>`_ Support surface charts * `#381 <https://bitbucket.org/openpyxl/openpyxl/issue/381>`_ Preserve named styles * `#470 <https://bitbucket.org/openpyxl/openpyxl/issue/470>`_ Adding more than 10 worksheets with the same name leads to duplicates sheet names and an invalid file 2.2.6 (unreleased) ================== Bug fixes --------- * `#502 <https://bitbucket.org/openpyxl/openpyxl/issue/502>`_ Unexpected keyword "mergeCell" * `#503 <https://bitbucket.org/openpyxl/openpyxl/issue/503>`_ tostring missing in dump_worksheet * `#506 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/506>`_ Non-ASCII formulae cannot be parsed * `#508 <https://foss.heptapod.net/openpyxl/openpyxl/-/issues/508>`_ Cannot save files with coloured tabs * Regex for ignoring named ranges is wrong (character class instead of prefix) 2.2.5 (2015-06-29) ================== Bug fixes --------- * `#463 <https://bitbucket.org/openpyxl/openpyxl/issue/463>`_ Unexpected keyword "mergeCell" * `#484 <https://bitbucket.org/openpyxl/openpyxl/issue/484>`_ Unusual dimensions breaks read-only mode * `#485 <https://bitbucket.org/openpyxl/openpyxl/issue/485>`_ Move return out of loop 2.2.4 (2015-06-17) ================== Bug fixes --------- * `#464 <https://bitbucket.org/openpyxl/openpyxl/issue/464>`_ Cannot use images when preserving macros * `#465 <https://bitbucket.org/openpyxl/openpyxl/issue/465>`_ ws.cell() returns an empty cell on read-only workbooks * `#467 <https://bitbucket.org/openpyxl/openpyxl/issue/467>`_ Cannot edit a file with ActiveX components * `#471 <https://bitbucket.org/openpyxl/openpyxl/issue/471>`_ Sheet properties elements must be in order * `#475 <https://bitbucket.org/openpyxl/openpyxl/issue/475>`_ Do not redefine class __slots__ in subclasses * `#477 <https://bitbucket.org/openpyxl/openpyxl/issue/477>`_ Write-only support for SheetProtection * `#478 <https://bitbucket.org/openpyxl/openpyxl/issue/477>`_ Write-only support for DataValidation * Improved regex when checking for datetime formats 2.2.3 (2015-05-26) ================== Bug fixes --------- * `#451 <https://bitbucket.org/openpyxl/openpyxl/issue/451>`_ fitToPage setting ignored * `#458 <https://bitbucket.org/openpyxl/openpyxl/issue/458>`_ Trailing spaces lost when saving files. * `#459 <https://bitbucket.org/openpyxl/openpyxl/issue/459>`_ setup.py install fails with Python 3 * `#462 <https://bitbucket.org/openpyxl/openpyxl/issue/462>`_ Vestigial rId conflicts when adding charts, images or comments * `#455 <https://bitbucket.org/openpyxl/openpyxl/issue/455>`_ Enable Zip64 extensions for all versions of Python 2.2.2 (2015-04-28) ================== Bug fixes --------- * `#447 <https://bitbucket.org/openpyxl/openpyxl/issue/447>`_ Uppercase datetime number formats not recognised. * `#453 <https://bitbucket.org/openpyxl/openpyxl/issue/453>`_ Borders broken in shared_styles. 2.2.1 (2015-03-31) ================== Minor changes ------------- * `PR54 <https://bitbucket.org/openpyxl/openpyxl/pull-request/54>`_ Improved precision on times near midnight. * `PR55 <https://bitbucket.org/openpyxl/openpyxl/pull-request/55>`_ Preserve macro buttons Bug fixes --------- * `#429 <https://bitbucket.org/openpyxl/openpyxl/issue/429>`_ Workbook fails to load because header and footers cannot be parsed. * `#433 <https://bitbucket.org/openpyxl/openpyxl/issue/433>`_ File-like object with encoding=None * `#434 <https://bitbucket.org/openpyxl/openpyxl/issue/434>`_ SyntaxError when writing page breaks. * `#436 <https://bitbucket.org/openpyxl/openpyxl/issue/436>`_ Read-only mode duplicates empty rows. * `#437 <https://bitbucket.org/openpyxl/openpyxl/issue/437>`_ Cell.offset raises an exception * `#438 <https://bitbucket.org/openpyxl/openpyxl/issue/438>`_ Cells with pivotButton and quotePrefix styles cannot be read * `#440 <https://bitbucket.org/openpyxl/openpyxl/issue/440>`_ Error when customised versions of builtin formats * `#442 <https://bitbucket.org/openpyxl/openpyxl/issue/442>`_ Exception raised when a fill element contains no children * `#444 <https://bitbucket.org/openpyxl/openpyxl/issue/442>`_ Styles cannot be copied 2.2.0 (2015-03-11) ================== Bug fixes --------- * `#415 <https://bitbucket.org/openpyxl/openpyxl/issue/415>`_ Improved exception when passing in invalid in memory files. 2.2.0-b1 (2015-02-18) ===================== Major changes ------------- * Cell styles deprecated, use formatting objects (fonts, fills, borders, etc.) directly instead * Charts will no longer try and calculate axes by default * Support for template file types - PR21 * Moved ancillary functions and classes into utils package - single place of reference * `PR 34 <https://bitbucket.org/openpyxl/openpyxl/pull-request/34/>`_ Fully support page setup * Removed SAX-based XML Generator. Special thanks to Elias Rabel for implementing xmlfile for xml.etree * Preserve sheet view definitions in existing files (frozen panes, zoom, etc.) Bug fixes --------- * `#103 <https://bitbucket.org/openpyxl/openpyxl/issue/103>`_ Set the zoom of a sheet * `#199 <https://bitbucket.org/openpyxl/openpyxl/issue/199>`_ Hide gridlines * `#215 <https://bitbucket.org/openpyxl/openpyxl/issue/215>`_ Preserve sheet view setings * `#262 <https://bitbucket.org/openpyxl/openpyxl/issue/262>`_ Set the zoom of a sheet * `#392 <https://bitbucket.org/openpyxl/openpyxl/issue/392>`_ Worksheet header not read * `#387 <https://bitbucket.org/openpyxl/openpyxl/issue/387>`_ Cannot read files without styles.xml * `#410 <https://bitbucket.org/openpyxl/openpyxl/issue/410>`_ Exception when preserving whitespace in strings * `#417 <https://bitbucket.org/openpyxl/openpyxl/issue/417>`_ Cannot create print titles * `#420 <https://bitbucket.org/openpyxl/openpyxl/issue/420>`_ Rename confusing constants * `#422 <https://bitbucket.org/openpyxl/openpyxl/issue/422>`_ Preserve color index in a workbook if it differs from the standard Minor changes ------------- * Use a 2-way cache for column index lookups * Clean up tests in cells * `PR 40 <https://bitbucket.org/openpyxl/openpyxl/pull-request/40/>`_ Support frozen panes and autofilter in write-only mode * Use ws.calculate_dimension(force=True) in read-only mode for unsized worksheets 2.1.5 (2015-02-18) ================== Bug fixes --------- * `#403 <https://bitbucket.org/openpyxl/openpyxl/issue/403>`_ Cannot add comments in write-only mode * `#401 <https://bitbucket.org/openpyxl/openpyxl/issue/401>`_ Creating cells in an empty row raises an exception * `#408 <https://bitbucket.org/openpyxl/openpyxl/issue/408>`_ from_excel adjustment for Julian dates 1 < x < 60 * `#409 <https://bitbucket.org/openpyxl/openpyxl/issue/409>`_ refersTo is an optional attribute Minor changes ------------- * Allow cells to be appended to standard worksheets for code compatibility with write-only mode. 2.1.4 (2014-12-16) ================== Bug fixes --------- * `#393 <https://bitbucket.org/openpyxl/openpyxl/issue/393>`_ IterableWorksheet skips empty cells in rows * `#394 <https://bitbucket.org/openpyxl/openpyxl/issue/394>`_ Date format is applied to all columns (while only first column contains dates) * `#395 <https://bitbucket.org/openpyxl/openpyxl/issue/395>`_ temporary files not cleaned properly * `#396 <https://bitbucket.org/openpyxl/openpyxl/issue/396>`_ Cannot write "=" in Excel file * `#398 <https://bitbucket.org/openpyxl/openpyxl/issue/398>`_ Cannot write empty rows in write-only mode with LXML installed Minor changes ------------- * Add relation namespace to root element for compatibility with iWork * Serialize comments relation in LXML-backend 2.1.3 (2014-12-09) ================== Minor changes ------------- * `PR 31 <https://bitbucket.org/openpyxl/openpyxl/pull-request/31/>`_ Correct tutorial * `PR 32 <https://bitbucket.org/openpyxl/openpyxl/pull-request/32/>`_ See #380 * `PR 37 <https://bitbucket.org/openpyxl/openpyxl/pull-request/37/>`_ Bind worksheet to ColumnDimension objects Bug fixes --------- * `#379 <https://bitbucket.org/openpyxl/openpyxl/issue/379>`_ ws.append() doesn't set RowDimension Correctly * `#380 <https://bitbucket.org/openpyxl/openpyxl/issue/379>`_ empty cells formatted as datetimes raise exceptions 2.1.2 (2014-10-23) ================== Minor changes ------------- * `PR 30 <https://bitbucket.org/openpyxl/openpyxl/pull-request/30/>`_ Fix regex for positive exponentials * `PR 28 <https://bitbucket.org/openpyxl/openpyxl/pull-request/28/>`_ Fix for #328 Bug fixes --------- * `#120 <https://bitbucket.org/openpyxl/openpyxl/issue/120>`_, `#168 <https://bitbucket.org/openpyxl/openpyxl/issue/168>`_ defined names with formulae raise exceptions, `#292 <https://bitbucket.org/openpyxl/openpyxl/issue/292>`_ * `#328 <https://bitbucket.org/openpyxl/openpyxl/issue/328/>`_ ValueError when reading cells with hyperlinks * `#369 <https://bitbucket.org/openpyxl/openpyxl/issue/369>`_ IndexError when reading definedNames * `#372 <https://bitbucket.org/openpyxl/openpyxl/issue/372>`_ number_format not consistently applied from styles 2.1.1 (2014-10-08) ================== Minor changes ------------- * PR 20 Support different workbook code names * Allow auto_axis keyword for ScatterCharts Bug fixes --------- * `#332 <https://bitbucket.org/openpyxl/openpyxl/issue/332>`_ Fills lost in ConditionalFormatting * `#360 <https://bitbucket.org/openpyxl/openpyxl/issue/360>`_ Support value="none" in attributes * `#363 <https://bitbucket.org/openpyxl/openpyxl/issue/363>`_ Support undocumented value for textRotation * `#364 <https://bitbucket.org/openpyxl/openpyxl/issue/364>`_ Preserve integers in read-only mode * `#366 <https://bitbucket.org/openpyxl/openpyxl/issue/366>`_ Complete read support for DataValidation * `#367 <https://bitbucket.org/openpyxl/openpyxl/issue/367>`_ Iterate over unsized worksheets 2.1.0 (2014-09-21) ================== Major changes ------------- * "read_only" and "write_only" new flags for workbooks * Support for reading and writing worksheet protection * Support for reading hidden rows * Cells now manage their styles directly * ColumnDimension and RowDimension object manage their styles directly * Use xmlfile for writing worksheets if available - around 3 times faster * Datavalidation now part of the worksheet package Minor changes ------------- * Number formats are now just strings * Strings can be used for RGB and aRGB colours for Fonts, Fills and Borders * Create all style tags in a single pass * Performance improvement when appending rows * Cleaner conversion of Python to Excel values * PR6 reserve formatting for empty rows * standard worksheets can append from ranges and generators Bug fixes --------- * `#153 <https://bitbucket.org/openpyxl/openpyxl/issue/153>`_ Cannot read visibility of sheets and rows * `#181 <https://bitbucket.org/openpyxl/openpyxl/issue/181>`_ No content type for worksheets * `241 <https://bitbucket.org/openpyxl/openpyxl/issue/241>`_ Cannot read sheets with inline strings * `322 <https://bitbucket.org/openpyxl/openpyxl/issue/322>`_ 1-indexing for merged cells * `339 <https://bitbucket.org/openpyxl/openpyxl/issue/339>`_ Correctly handle removal of cell protection * `341 <https://bitbucket.org/openpyxl/openpyxl/issue/341>`_ Cells with formulae do not round-trip * `347 <https://bitbucket.org/openpyxl/openpyxl/issue/347>`_ Read DataValidations * `353 <https://bitbucket.org/openpyxl/openpyxl/issue/353>`_ Support Defined Named Ranges to external workbooks 2.0.5 (2014-08-08) ================== Bug fixes --------- * `#348 <https://bitbucket.org/openpyxl/openpyxl/issue/348>`_ incorrect casting of boolean strings * `#349 <https://bitbucket.org/openpyxl/openpyxl/issue/349>`_ roundtripping cells with formulae 2.0.4 (2014-06-25) ================== Minor changes ------------- * Add a sample file illustrating colours Bug fixes --------- * `#331 <https://bitbucket.org/openpyxl/openpyxl/issue/331>`_ DARKYELLOW was incorrect * Correctly handle extend attribute for fonts 2.0.3 (2014-05-22) ================== Minor changes ------------- * Updated docs Bug fixes --------- * `#319 <https://bitbucket.org/openpyxl/openpyxl/issue/319>`_ Cannot load Workbooks with vertAlign styling for fonts 2.0.2 (2014-05-13) ================== 2.0.1 (2014-05-13) brown bag ============================= 2.0.0 (2014-05-13) brown bag ============================= Major changes ------------- * This is last release that will support Python 3.2 * Cells are referenced with 1-indexing: A1 == cell(row=1, column=1) * Use jdcal for more efficient and reliable conversion of datetimes * Significant speed up when reading files * Merged immutable styles * Type inference is disabled by default * RawCell renamed ReadOnlyCell * ReadOnlyCell.internal_value and ReadOnlyCell.value now behave the same as Cell * Provide no size information on unsized worksheets * Lower memory footprint when reading files Minor changes ------------- * All tests converted to pytest * Pyflakes used for static code analysis * Sample code in the documentation is automatically run * Support GradientFills * BaseColWidth set Pull requests ------------- * #70 Add filterColumn, sortCondition support to AutoFilter * #80 Reorder worksheets parts * #82 Update API for conditional formatting * #87 Add support for writing Protection styles, others * #89 Better handling of content types when preserving macros Bug fixes --------- * `#46 <https://bitbucket.org/openpyxl/openpyxl/issue/46>`_ ColumnDimension style error * `#86 <https://bitbucket.org/openpyxl/openpyxl/issue/86>`_ reader.worksheet.fast_parse sets booleans to integers * `#98 <https://bitbucket.org/openpyxl/openpyxl/issue/98>`_ Auto sizing column widths does not work * `#137 <https://bitbucket.org/openpyxl/openpyxl/issue/137>`_ Workbooks with chartsheets * `#185 <https://bitbucket.org/openpyxl/openpyxl/issue/185>`_ Invalid PageMargins * `#230 <https://bitbucket.org/openpyxl/openpyxl/issue/230>`_ Using \v in cells creates invalid files * `#243 <https://bitbucket.org/openpyxl/openpyxl/issue/243>`_ - IndexError when loading workbook * `#263 <https://bitbucket.org/openpyxl/openpyxl/issue/263>`_ - Forded conversion of line breaks * `#267 <https://bitbucket.org/openpyxl/openpyxl/issue/267>`_ - Raise exceptions when passed invalid types * `#270 <https://bitbucket.org/openpyxl/openpyxl/issue/270>`_ - Cannot open files which use non-standard sheet names or reference Ids * `#269 <https://bitbucket.org/openpyxl/openpyxl/issue/269>`_ - Handling unsized worksheets in IterableWorksheet * `#270 <https://bitbucket.org/openpyxl/openpyxl/issue/270>`_ - Handling Workbooks with non-standard references * `#275 <https://bitbucket.org/openpyxl/openpyxl/issue/275>`_ - Handling auto filters where there are only custom filters * `#277 <https://bitbucket.org/openpyxl/openpyxl/issue/277>`_ - Harmonise chart and cell coordinates * `#280 <https://bitbucket.org/openpyxl/openpyxl/issue/280>`_- Explicit exception raising for invalid characters * `#286 <https://bitbucket.org/openpyxl/openpyxl/issue/286>`_ - Optimized writer can not handle a datetime.time value * `#296 <https://bitbucket.org/openpyxl/openpyxl/issue/296>`_ - Cell coordinates not consistent with documentation * `#300 <https://bitbucket.org/openpyxl/openpyxl/issue/300>`_ - Missing column width causes load_workbook() exception * `#304 <https://bitbucket.org/openpyxl/openpyxl/issue/304>`_ - Handling Workbooks with absolute paths for worksheets (from Sharepoint) 1.8.6 (2014-05-05) ================== Minor changes ------------- Fixed typo for import Elementtree Bugfixes -------- * `#279 <https://bitbucket.org/openpyxl/openpyxl/issue/279>`_ Incorrect path for comments files on Windows 1.8.5 (2014-03-25) ================== Minor changes ------------- * The '=' string is no longer interpreted as a formula * When a client writes empty xml tags for cells (e.g. <c r='A1'></c>), reader will not crash 1.8.4 (2014-02-25) ================== Bugfixes -------- * `#260 <https://bitbucket.org/openpyxl/openpyxl/issue/260>`_ better handling of undimensioned worksheets * `#268 <https://bitbucket.org/openpyxl/openpyxl/issue/268>`_ non-ascii in formualae * `#282 <https://bitbucket.org/openpyxl/openpyxl/issue/282>`_ correct implementation of register_namepsace for Python 2.6 1.8.3 (2014-02-09) ================== Major changes ------------- Always parse using cElementTree Minor changes ------------- Slight improvements in memory use when parsing * `#256 <https://bitbucket.org/openpyxl/openpyxl/issue/256>`_ - error when trying to read comments with optimised reader * `#260 <https://bitbucket.org/openpyxl/openpyxl/issue/260>`_ - unsized worksheets * `#264 <https://bitbucket.org/openpyxl/openpyxl/issue/264>`_ - only numeric cells can be dates 1.8.2 (2014-01-17) ================== * `#247 <https://bitbucket.org/openpyxl/openpyxl/issue/247>`_ - iterable worksheets open too many files * `#252 <https://bitbucket.org/openpyxl/openpyxl/issue/252>`_ - improved handling of lxml * `#253 <https://bitbucket.org/openpyxl/openpyxl/issue/253>`_ - better handling of unique sheetnames 1.8.1 (2014-01-14) ================== * `#246 <https://bitbucket.org/openpyxl/openpyxl/issue/246>`_ 1.8.0 (2014-01-08) ================== Compatibility ------------- Support for Python 2.5 dropped. Major changes ------------- * Support conditional formatting * Support lxml as backend * Support reading and writing comments * pytest as testrunner now required * Improvements in charts: new types, more reliable Minor changes ------------- * load_workbook now accepts data_only to allow extracting values only from formulae. Default is false. * Images can now be anchored to cells * Docs updated * Provisional benchmarking * Added convenience methods for accessing worksheets and cells by key 1.7.0 (2013-10-31) ================== Major changes ------------- Drops support for Python < 2.5 and last version to support Python 2.5 Compatibility ------------- Tests run on Python 2.5, 2.6, 2.7, 3.2, 3.3 Merged pull requests -------------------- * 27 Include more metadata * 41 Able to read files with chart sheets * 45 Configurable Worksheet classes * 3 Correct serialisation of Decimal * 36 Preserve VBA macros when reading files * 44 Handle empty oddheader and oddFooter tags * 43 Fixed issue that the reader never set the active sheet * 33 Reader set value and type explicitly and TYPE_ERROR checking * 22 added page breaks, fixed formula serialization * 39 Fix Python 2.6 compatibility * 47 Improvements in styling Known bugfixes -------------- * `#109 <https://bitbucket.org/openpyxl/openpyxl/issue/109>`_ * `#165 <https://bitbucket.org/openpyxl/openpyxl/issue/165>`_ * `#209 <https://bitbucket.org/openpyxl/openpyxl/issue/209>`_ * `#112 <https://bitbucket.org/openpyxl/openpyxl/issue/112>`_ * `#166 <https://bitbucket.org/openpyxl/openpyxl/issue/166>`_ * `#109 <https://bitbucket.org/openpyxl/openpyxl/issue/109>`_ * `#223 <https://bitbucket.org/openpyxl/openpyxl/issue/223>`_ * `#124 <https://bitbucket.org/openpyxl/openpyxl/issue/124>`_ * `#157 <https://bitbucket.org/openpyxl/openpyxl/issue/157>`_ Miscellaneous ------------- Performance improvements in optimised writer Docs updated