Skip to content

Update dependency XlsxWriter to v3

renovate requested to merge renovate/xlsxwriter-3.x into development

This MR contains the following updates:

Package Update Change
XlsxWriter major ==1.1.2 -> ==3.0.6

Release Notes



  • Added simulated worksheet :func:autofit method.



  • Added OverlappingRange exception which is raised during Worksheet :func:add_table() or :func:merge_range() if the range overlaps an existing worksheet table or merge range. This is a file corruption error in Excel. See :ref:exceptions.



  • Roll up release of several minor fixes.

  • Drop support for EOL Python 3.4 and 3.5.


  • Added :func:print_black_and_white worksheet method to set "Black and White" print options.



  • Added :func:set_top_left_cell worksheet method to position the first visible cell in a worksheet.



  • Add python_requires version to setup.py to help pip find the correct matching version for Python 2 and 3.


  • This is the last XlsxWriter release to support Python 2. From now bug fixes and new features will only be available for Python 3. The deprecation notice for Python 2 support in XlsxWriter has been in place since May 2020 and the Python community support for Python 2 ended in January 2020. Downloads of XlsxWriter for Python 2 is currently less than 6% of all downloads of the library, and decreasing month by month.

    Python 2 users should still be able to install versions of XlsxWriter up to this release but not any releases afterwards.



  • Added Description/Alt Text and Decorative accessibility options for charts, textboxes and buttons. These options were already available for images.


  • Added some performance improvements. Performance for larger files should be 5-10% better.


  • Added support for background images in worksheets. See :func:set_background and :ref:ex_background.


  • Added support for GIF image files (and in Excel 365, animated GIF files).


  • Added support for dynamic arrays and new Excel 365 functions like UNIQUE and FILTER. See :func:write_dynamic_array_formula, :ref:formula_dynamic_arrays and :ref:ex_dynamic_arrays.

  • Added constructor option "use_future_functions" to enable newer Excel "future" functions in Formulas. See :ref:formula_future, and the :func:Workbook constructor.


  • Added fix for issue for where a y_axis font rotation of 0 was ignored.


  • Added option to set row heights and column widths in pixels via the :func:set_row_pixels and :func:set_column_pixels methods.


  • Added ability to add accessibility options "description" and "decorative" to images via :func:insert_image. :feature:768.

  • Added fix for datetime.timedelta values that exceed the Excel 1900 leap day (timedeltas greater than 59 days, in hours). This is a backward incompatible change. :issue:731.

  • Added the worksheet :func:read_only_recommended method to set the Excel "Read-only Recommended" option that is available when saving a file. :feature:784.

  • Fixed issue where temp files used in constant_memory mode weren't closed/deleted if the workbook object was garbage collected. :issue:764.

  • Fixed issue where pattern formats without colors were given a default black fill color. :issue:790.

  • Added option to set a chart crossing to 'min' as well as the existing 'max' option. The 'min' option isn't available in the Excel interface but can be enabled via VBA. :feature:773.


  • Fixed issue where custom chart data labels didn't inherit the position of the data labels in the series. :issue:754.

  • Added text alignment for textboxes. The existing options allowed the text area to be aligned but didn't offer control over the text within that area.

  • Added Python 3.9 to the test matrix.


  • Added the worksheet :func:unprotect_range() method to allow ranges within a protected worksheet to be unprotected. :feature:507.

  • There are now over 1500 test cases in the test suite, including 900 tests that compare the output from XlsxWriter, byte for byte, against test files created in Excel. This is to ensure the maximum possible compatibility with Excel.


  • Fixed issue where relative url links in images didn't work. :issue:751.

  • Added use_zip64 as a constructor option. :issue:745.

  • Added check, and warning, for worksheet tables with no data row. Either with or without a header row. :issue:715 and :issue:679.

  • Add a warning when the string length in :func:write_rich_string() exceeds Excel's limit. :issue:372.


  • Replaced internal MD5 digest used to check for duplicate images with a SHA256 digest to avoid issues on operating systems such as Red Hat in FIPS mode which don't support MD5 for security reasons. :issue:749.


  • Added :func:ignore_errors() worksheet method to to allow Excel worksheet errors/warnings to be ignored in user defined ranges. See also :ref:ex_ignore_errors. :feature:678.

  • Added warning when closing a file more than once via :func:close() to help avoid errors where a file is closed within a loop or at the wrong scope level.


  • Added Border, Fill, Pattern and Gradient formatting to chart data labels and chart custom data labels. See :ref:chart_series_option_data_labels and :ref:chart_series_option_custom_data_labels.


  • Fix for issue where array formulas weren't included in the output file for certain ranges/conditions. :issue:735.


  • Added support for chart :ref:custom data labels <chart_series_option_custom_data_labels>. :feature:343.


  • Added support for stacked and percent_stacked Line charts.


  • Fix for issue where duplicate images with hyperlinks weren't handled correctly. :issue:686.

  • Removed ReservedWorksheetName exception which was used with the reserved worksheet name "History" since this name is allowed in some Excel variants. :issue:688.

  • Fix for worksheet objects (charts, images and textboxes) that are inserted with an offset that starts in a hidden cell. :issue:676.

  • Fix to allow handling of NoneType in :func:add_write_handler. :issue:677.


  • Fix for duplicate images being copied to an XlsxWriter file. Excel uses an optimization where it only stores one copy of a repeated/duplicate image in a workbook. XlsxWriter didn't do this which meant that the file size would increase when then was a large number of repeated images. This release fixes that issue and replicates Excel's behavior. :issue:615.

  • Added documentation on :ref:num_format_categories and :ref:num_format_locale.

  • Added note to :func:protect() about how it is possible to encrypt an XlsxWriter file using a third party, cross platform, open source tool called msoffice-crypt <https://github.com/herumi/msoffice>_.


  • Added option to remove style from worksheet tables. :feature:670.


  • Added option to add hyperlinks to textboxes. See :ref:textbox_hyperlink. :feature:419.


  • Added option to link textbox text from a cell. See :ref:textbox_textlink. :feature:516.

  • Added option to rotate text in a textbox. See :ref:textbox_formatting_rotation. :feature:638.


  • Increased allowable worksheet url length from 255 to 2079 characters, as supported in more recent versions of Excel. A lower or user defined limit can be set via the max_url_length property in the :func:Workbook constructor.

  • Fixed several issues with hyperlinks in worksheet images.


  • Fixed Python 3.8.0 warnings. :issue:660.


  • Added the :func:add_write_handler method to allow user defined types to be handled by the :func:write method. See :ref:writing_user_types for more information. :feature:631.

  • Add support for East Asian vertical fonts in charts. :feature:648.


  • Refactored exception handling around the workbook file :func:close() method to allow exceptions to be caught and handled. See :ref:ex_check_close. Also refactored the code to clean up temp files in the event of an exception. :issue471 and :issue:647.

  • Added the option to allow chart fonts to be rotated to 270 degrees to give a stacked orientation. See :ref:chart_fonts. :issue:648.


  • Another fix for issues where zipfile.py raises "ZIP does not support timestamps before 1980" exception. :issue:651.


  • Added ability to combine Doughnut and Pie charts.

  • Added gauge chart example which is a combination of a Doughnut and a Pie chart. See :ref:ex_chart_gauge.


  • Added docs on :ref:object_position.

  • Added fix for sizing of cell comment boxes when they cross columns/rows that have size changes that occur after the comment is written. :issue:403 and :issue:312.

  • Added fix for the sizing of worksheet objects (images, charts, textboxes) when the underlying cell sizes have changed and the "object_position" parameter has been set to 1 "Move and size with cells". An additional mode 4 has been added to simulate inserting the object in hidden rows. :issue:618.

  • Added object positioning for charts and textboxes, it was already supported for images. Note, the parameter is now called object_position. The previous parameter name positioning is deprecated but still supported for images. :issue:568.


  • Fixed issue where images that started in hidden rows/columns weren't placed correctly in the worksheet. :issue:613.

  • Fixed the mime-type reported by system file(1). The mime-type reported by "file --mime-type"/magic was incorrect for XlsxWriter files since it expected the [Content_types] to be the first file in the zip container. :issue:614.


  • This version removes support for end of life Pythons 2.5, 2.6, 3.1, 3.2 and 3.3. For older, unsupported versions of Python use version 1.1.4 of XlsxWriter.


  • Fix for issues where zipfile.py raises "ZIP does not support timestamps before 1980" exception. :issue:535.


  • Fix handling of 'num_format': '0' in duplicate formats. :issue:584.


📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this MR and you won't be reminded about this update again.

  • If you want to rebase/retry this MR, check this box

This MR has been generated by Renovate Bot.

Merge request reports