Revision history for Perl module Excel::Writer::XLSX.

     + New feature/improvement.
     - Removed/deprecated feature.
     ! Bug fix.

1.08 2021-03-31

    + Added support for background images in worksheets. See set_background().

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

    + Added support for pixel sizing in set_row() and set_column() via new
      functions called set_row_pixels() and set_column_pixels().

    + Added initial support for dynamic arrays in formulas.

1.08 2021-03-31

    + Added ability to add accessibility options "description" and
      "decorative" to images via insert_image().

    + Added the workbook read_only_recommended() method to set the Excel
      "Read-only Recommended" option that is available when saving a file.

    + 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.

    + Added option to unprotect ranges in protected worksheets.

    + Added check, and warning, for worksheet tables with no data row.  Either
      with or without a header row.

    + Added ignore_errors() worksheet method to ignore Excel worksheet
      errors/warnings in user defined ranges.

    ! Fixed issue where pattern formats without colours where given a default
      black fill colour.

    ! Fix issue where custom chart data labels didn't inherit the position for
      the data labels in the series.

    ! Fixed issue with relative url links in images.

    ! Fixed issue where headers/footers were restricted to 254 characters
      instead of 255.

1.07 2020-08-06

   + Added support for Border, Fill, Pattern and Gradient formatting to chart
     data labels and chart custom data labels.

1.06 2020-08-03

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

1.05 2020-07-30

   + Added support for custom data labels in charts.

1.04 2020-05-31

   + Added support for "stacked" and "percent_stacked" Line charts.

   ! Fix for worksheet objects (charts and images) that are inserted with an
     offset that starts in a hidden cell.

   ! Fix for issue with default worksheet VBA codenames.

   - Removed error in add_worksheet() for sheet name "History" which is a
     reserved name in English version of Excel. However, this is an allowed
     worksheet name in some Excel variants so the warning has been turned into
     a documentation note instead.

1.03 2019-12-26

   + Fix for duplicate images being copied to an Excel::Writer::XLSX
     file. Excel uses an optimization where it only stores one copy of a
     repeated/duplicate image in a workbook. Excel::Writer::XLSX 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 behaviour.

1.02 2019-11-07

   + Added support for hyperlinks in worksheet images.

   + Increased allowable url length from 255 to 2079 characters, as allowed in
     more recent versions of Excel.

1.01 2019-10-28

   + Added support for stacked and  East Asian vertical chart fonts.

   + Added option to control positioning of charts or images when cells are

   + Added support for combining Pie/Doughnut charts.

   ! Fixed sizing of cell comment boxes when they cross columns/rows that have
     size changes that occur after the comment is written. Comments should
     now behave like other worksheet objects such as images and charts.

   ! Fix for structured reference in chart ranges.

1.00 2019-04-07

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

   !  Fixed the mime-type reported by system "file(1)". The mime-type reported
      by "file --mime-type"/magic was incorrect for Excel::Writer::XLSX files
      since it expected the "[Content_types]" to be the first file in the zip

0.99 2019-02-10

   + Added font and font_size parameters to write_comment().

   + Allow formulas in date field of data_validation().

   + Added top_left chart legend position.

   + Added legend formatting options.

   + Added set_tab_ratio() method to set the ratio between the worksheet tabs
     and the horizontal slider.

   + Added worksheet hide_row_col_headers() method to turn off worksheet row
     and column headings.

   + Add functionality to align chart category axis labels.

   ! Fix for issue with special characters in worksheet table functions.

   ! Fix handling of 'num_format': '0' in duplicate formats.

0.98 2018-04-14

   + Set the xlsx internal file member datetimes to 1980-01-01 00:00:00 like
     Excel so that apps can produce a consistent binary file once the
     workbook set_properties() created date is set. Feature request #168.

0.97 2018-04-10

   + Added Excel 2010 data bar features such as solid fills and control over
     the display of negative values.

   + Added default formatting for hyperlinks if none is specified. The format
     is the Excel hyperlink style so links change colour after they are

   ! Fixed missing plotarea formatting in pie/doughnut charts.

0.96 2017-09-16

   + Added icon sets to conditional formatting. Feature request #116.

0.95 2016-06-13

   + Added workbook set_size() method. Feature request #59.

0.94 2016-06-07

   + Added font support to chart tables.
     Feature request #96.

0.93 2016-06-07

   + Added trendline properties: intercept, display_equation and
     display_r_squared. Feature request #153.

0.92 2016-06-01

   ! Fix for insert_image issue when handling images with zero dpi.

0.91 2016-05-31

   + Add set_custom_property() workbook method to set custom document

0.90 2016-05-13

   + Added get_worksheet_by_name() workbook method to retrieve a worksheet
     in a workbook by name.
     Feature request #124.

   ! Fixed issue where internal file creation and modification dates where
     in the local timezone instead of UTC.
     Issue #162.

   ! Fixed issue with "external:" urls with space in sheetname.

   ! Fixed issue where Unicode full-width number strings were treated as
     numbers in write().
     Issue #160.

0.89 2016-04-16

   + Added write_boolean() worksheet method to write Excel boolean values.

0.88 2016-01-14

   + Added transparency option to solid fills in chart areas.

   + Added options to configure chart axis tick placement.
     Feature request #158.

0.87 2016-01-12

   + Added chart pattern and gradient fills.

   + Added option to set chart tick interval.

   + Add checks for valid and non-duplicate worksheet table names.

   + Added support for table header formatting and a fix for wrapped lines in
     the header.

0.86 2015-10-19

   ! Fix to allow chartsheets to support combined charts.

   ! Fix for images with negative offsets.

   + Allow hyperlinks longer than 255 characters when the link and anchor
     are each less than or equal to 255 characters.

   + Added hyperlink_base document property.

   + Added option to allow data validation input messages with the ‘any’
     validate parameter.
     Issue #144.

   + Added "stop if true" feature to conditional formatting.
     Issue #138.

   + Added better support and documentation for html colours throughout
     the module. The use of the Excel97 colour palette is supported for
     backward compatibility but deprecated.
     Issue #97.

0.85 2015-08-05

   ! Fixes for new redundant sprintf arguments warnings in perl 5.22.
     Issue #134.

   ! Fix url encoding of links to external files and dirs.

0.84 2015-04-21

   + Added support for chart axis display units (thousands, million, etc.).

   + Added option to set printing in black and white. Issue #125.

   + Added chart styles example.

   + Added gradient fill support.

   + Added support for clustered charts.

   + Added support for boolean error codes.

0.83 2015-3-17

   + Added option to combine two different chart types. For example to
     create a Pareto chart.

0.82 2015-3-14

   + Added extra documentation on how to handle VBA macros and added
     automatic and manual setting of workbook and worksheet VBA codenames.
     Issue #60.

   + Fix for set_start_page() for values > 1.

   + Fix to copy user defined chart properties, such as trendlines,
     so that they aren't overwritten.
     Issue #121.

   + Added column function_value option to add_table to allow
     function value to be set.

   + Allow explicit text categories in charts.
     Issue #102

   + Fix for column/bar gap/overlap on y2 axis.
     Issue #113.

0.81 2014-11-01

    + Added chart axis line and fill properties.

0.80 2014-10-29

    + Chart Data Label enhancements. Added number formatting, font handling
      (issue #106), separator (issue #107) and legend key.

    + Added chart specific handling of data label positions since not all
      positions are available for all chart types. Issue #110.

0.79 2014-10-16

    + Added option to add images to headers and footers.

    + Added option to not scale header/footer with page.

    ! Fixed issue where non 96dpi images were not scaled properly in Excel.

    ! Fix for issue where X axis title formula was overwritten by the
      Y axis title.

0.78 2014-09-28

    + Added Doughnut chart with set_rotation() and set_hole_size()

    + Added set_rotation() method to Pie charts.

    + Added set_calc_mode() method to control automatic calculation of
      formulas when worksheet is opened.

0.77 2014-05-06

    ! Fix for incorrect chart offsets in insert_chart() and set_size().
      Reported by Kevin Gilpin.

0.76 2013-12-31

    + Added date axis handling to charts.

    + Added support for non-contiguous chart ranges.

    ! Fix to remove duplicate set_column() entries.

0.75 2013-12-02

    + Added interval unit option for category axes.

    ! Fix for axis name font rotation. Issue #83.

    ! Fix for several minor issues with Pie chart legends.

0.74 2013-11-17

    ! Improved defined name validation.
      Issue #82.

    + Added set_title() option to turn off automatic title.
      Issue #81.

    + Allow positioning of plotarea, legend, title and axis names.
      Issue #80.

    ! Fix for modification of user params in conditional_formatting().
      Issue #79.

    ! Fix for star style markers.

0.73 2013-11-08

    + Added custom error bar option to charts.

    ! Fix for tables added in non-sequential order.

    ! Fix for scatter charts with markers on non-marker series.

0.72 2013-08-28

    ! Fix for charts and images that cross rows and columns that are
      hidden or formatted but which don’t have size changes.

0.71 2013-08-24

    ! Fixed issue in image handling.

    ! Added fix to ensure formula calculation on load regardless of
     Excel version.

0.70 2013-07-30

    ! Fix for rendering images that are the same size as cell boundaries.
      GitHub issue #70.

    ! Added fix for inaccurate column width calculation.

    + Added Chart line smoothing option.

0.69 2013-06-12

    + Added chart font rotation property. Mainly for use with date axes
      to make the display more compact.

    ! Fix for 0 data in Worksheet Tables. #65.
      Reported by David Gang.

0.68 2013-06-06

    ! Fix for issue where shapes on one worksheet corrupted charts on a
      subsequent worksheet. #52.

    ! Fix for issue where add_button() invalidated cell comments in the
      same workbook. #64.

0.67 2013-05-06

   ! Fix for set_selection() with cell range.

0.66 2013-04-12

    ! Fix for issue with image scaling.

0.65 2012-12-31

    + Added options to format series Gap/Overlap for Bar/Column charts.

0.64 2012-12-22

    + Added the option to format individual points in a chart series.
      This allows Pie chart segments to be formatted.

0.63 2012-12-19

    + Added Chart data tools such as:
          Error Bars
          Up-Down Bars
          High-Low Lines
          Drop Lines.
      See the example.

0.62 2012-12-12

    + Added option for adding a data table to a Chart X-axis.
      See output from example.

0.61 2012-12-11

    + Allow a cell url string to be over written with a number or formula
      using a second write() call to the same cell. The url remains intact.
      Issue #48.

    + Added set_default_row() method to set worksheet default values for

    + Added Chart set_size() method to set the chart dimensions.

0.60 2012-12-05

    + Added Excel form buttons via the worksheet insert_button() method.
      This allows the user to tie the button to an embedded macro imported
      using add_vba_project().
      The portal to the dungeon dimensions is now fully open.

    ! Fix escaping of special character in URLs to write_url().
      Issue #45.

    ! Fix for 0 access/modification date on vbaProject.bin files extracted
      using extract_vba. The date isn't generally set correctly in the
      source xlsm file but this caused issues on Windows.

0.59 2012-11-26

    + Added macro support via VBA projects extracted from existing Excel
      xlsm files. User defined functions can be called from worksheets
      and macros can be called by the user but they cannot, currently,
      be linked to form elements such as buttons.

0.58 2012-11-23

    + Added chart area and plot area formatting.

0.57 2012-11-21

    + Add major and minor axis chart gridline formatting.

0.56 2012-11-18

    ! Fix for issue where chart creation order had to be the same
      as the insertion order or charts would be out of sync.
      Frederic Claude Sievert and Hurricup. Issue #42.

    ! Fixed issue where gridlines didn't work in Scatter and Stock
      charts. Issue #41.

    ! Fixed default XML encoding to avoid/solve various issues with XML
      encoding created by the XML changes in version 0.51. Issue #43.

0.55 2012-11-10

    + Added Sparklines.

    ! Fix for issue with "begins with" and "ends with" Conditional
      Formatting. Issue #40.

0.54 2012-11-05

    + Added font manipulation to Charts.

    + Added number formats to Chart axes.

    + Added Radar Charts.

    ! Fix for XML encoding in write_url() internal/external
      links. Issue #37.

0.53 2012-10-10

    ! Fix for broken MANIFEST file.

0.52 2012-10-09

    ! Added dependency on Date::Calc to xl_parse_date.t test.
      Closes #30 and RT#79790.

    ! Fix for XML encoding of URLs. Closes #31.

    + Refactored XMLWriter into a single class. This breaks the last
      remaining ties to XML::Writer to allow for future additions
      and optimisations. Renamed methods for consistency.

0.51 2012-09-16

    + Speed optimisations.

      This release contains a series of optimisations aimed
      at increasing the speed of Excel::Writer::XLSX. The
      overall improvement is around 66%.
      See the SPEED AND MEMORY USAGE section of the documentation.

    + Memory usage optimisations.

      This fixes an issue where the memory used for the worksheet
      data tables was freed but then brought back into usage due
      to the use of an array as the base data structure. This
      meant that the memory usage still continued to grow with
      large row counts.

    ! Added warning about Excel limit to 65,530 urls per worksheet.

    ! Limit URLs to Excel's limit of 255 chars. Fixes Issue #26.

    ! Fix for whitespace in urls. Fixes Issue #25.

    ! Fix for solid fill of type 'none' is chart series.
      Closes issue #27 reported on Stack Overflow.

    ! Modified write_array_formula() to apply format over full range.
      Fixes issue #18.

    ! Fix for issue with chart formula referring to non-existent sheet name.
      It is now a fatal error to specify a chart series formula that
      refers to an non-existent worksheet name. Fixes issue #17.

0.50 2012-09-09

     + Added option to add secondary axes to charts.
       Thanks to Eric Johnson and to Foxtons for sponsoring the work.

     + Added add_table() method to add Excel tables to worksheets.

     ! Fix for right/left auto shape connection when destination
       is left of source shape. Thanks to Dave Clarke for fix.

     ! Fix for issue #16. Format::copy() method not protecting values.
       The Format copy() method over-writes certain new properties that
       weren't in Spreadsheet::WriteExcel. This fixes the issue by
       storing and restoring the properties during copy.

     ! Fix for issue #15: write_url with local sub directory.
       Local sub-directories were incorrectly treated as
       file:// external.

     ! Fix for for issue #14: Non-numeric data in chart value axes
       are now converted to zero in chart data cache, as required
       by Excel.

0.49 2012-07-12

    + Added show_blanks_as() chart method to control the display of
      blank data.

    + Added show_hidden_data() chart method to control the display of
      data in hidden rows and columns.

    ! Added fix for fg/bg colours in conditional formats which are
      shared with cell formats.
      Reported by Patryk Kwiatkowski.

    ! Fix for xl_parse_time() with hours > 24. Github issue #11.

    ! Fixed lc() warning in in recent perls. Github issue #10.

    ! Fixed issue with non-integer shape dimensions. Thanks Dave Clarke.

    ! Fixed error handling for shape connectors. Thanks Dave Clarke.

0.48 2012-06-25

    + Added worksheet shapes. A major new feature.
      Patch, docs, tests and example programs by Dave Clarke.

    + Added stacked and percent_stacked chart subtypes to Area charts.

    ! Added fix for chart names in embedded charts.
      Reported by Matt Freel.

    ! Fixed bug with Unicode characters in rich strings.
      Reported by Michiel van Rhee.

0.47 2012-04-10

    + Additional conditional formatting options such as color, type and value
      for 2_color_scale, 3_color_scale and data_bar. Added option for non-
      contiguous data ranges as well.

    + Additional chart data label parameters such as position, leader lines
      and percentage. Initial patch by George E. Tarrant III.

    ! Fixed for Autofilter filter_column() offset bug reported by
      Krishna Rajendran.

    ! Fix for write_url() where url contains invalid whitespace, RT #75808,
      reported by Oleg G. The write_url() method now throws a warning and
      rejects the invalid url to avoid file corruption.

0.46 2012-02-10

    ! Fix for x-axis major/minor units in scatter charts.
      Reported by Carey Drake.

0.45 2012-01-09

    ! Changed from File::Temp tempdir() to newdir() to cleanup the temp dir at
      object destruction  rather than the program exit. Also improved error
      reporting when mkdir() fails.
      Reported by Kevin Ruscoe.

    ! Fix to escape control characters in strings.
      Reported by Kevin Ruscoe.

0.44 2012-01-05

    ! Fix for missing return value from Workbook::close() with filehandles.
      RT 73724. Reported and patched by Charles Bailey.

    ! Fixed support special filename/filehandle '-'.
      RT 73424. Reported by YuvalL and Charles Bailey.

    ! Fix for non-working reverse x_axis with Scatter charts.
      Reported by Viqar Abbasi.

0.43 2011-12-18

    + Added chart axis label position option.

    + Added invert_if_negative option for chart series fills.

0.42 2011-12-17

    ! Fix for set_optimization() where first row isn't 0.
      Reported by Giulio Orsero.

    ! Fix to preserve whitespace in inline strings.
      Reported by Giulio Orsero.

0.41 2011-12-10

    ! Increased IO::File requirement to 1.14 to prevent taint issues on some
      5.8.8/5.8.6 platforms.

0.40 2011-12-07

    ! Fix for unreadable xlsx files when generator program has -l on the
      commandline or had redefined $/. Github issue #7.
      Reported by John Riksten.

0.39 2011-12-03

    ! Fix for spurious Mac ._Makefile.PL in the distro which prevented
      automated testing and installation. Github issue #5.
      Reported by Tobias Oetiker.

    ! Fix for failing test sub_convert_date_time.t due to extra precision
      on longdouble perls. RT #71762
      Reported by Douglas Wilson.

0.38 2011-12-03

    + Backported from perl 5.10.0 to perl 5.8.2.
      You are killing me guys. Killing me.

0.37 2011-12-02

     + Added additional axis options: minor and major units, log base
       and axis crossing.

0.36 2011-11-29

    + Added "min" and "max" options to axis ranges via set_x_axis() and

0.35 2011-11-27

    + Added Scatter chart subtypes: markers_only (the default),
     straight_with_markers, straight, smooth_with_markers and smooth.

0.34 2011-11-04

    + Added set_optimization() method to reduce memory usage for very large
     data sets.

0.33 2011-10-28

    + Added addition conditional formatting types: cell, date, time_period,
      text, average, duplicate, unique, top, bottom, blanks, no_blanks,
      errors, no_errors, 2_color_scale, 3_color_scale, data_bar  and formula.

0.32 2011-10-20

    ! Fix for format alignment bug.
      Reported by Roderich Schupp.

0.31 2011-10-18

    + Added basic conditional formatting via the conditional_format()
      Worksheet method. More conditional formatting types will follow.

    + Added example program.

0.30 2011-10-06

    + Added stacked and percent_stacked chart subtypes to Bar and Column
      chart types.

0.29 2011-10-05

    + Added the merge_range_type() method for finer control over the types
      written using merge_range().

0.28 2011-10-04

    + Added default write_formula() value for compatibility with Google docs.

    + Updated docs with Excel 2007 images.

0.27 2011-10-02

    + Excel::Writer::XLSX is now 100% functionally and API compatible
      with Spreadsheet::WriteExcel.

    + Added outlines and grouping functionality.

    + Added and example programs.

0.26 2011-10-01

     + Added cell comment methods and options.
       Thanks to Barry Downes for providing the interim functionality

     + Added and example programs.

0.25 2011-06-16

     + Added option to add defined names to workbooks and worksheets.
       Added example program.

     ! Fix for fit_to_pages() with zero values.
       Reported by Aki Huttunen.

0.24 2011-06-11

    + Added data validation and example.

    + Added the option to turn off data series in chart legends.

0.23 2011-05-26

    ! Fix for charts ranges containing empty values.

0.22 2011-05-22

    + Added 'reverse' option to set_x_axis() and set_y_axis() in

0.21 2011-05-11

    ! Fixed support for filehandles.

    + Added and example programs.

0.20 2011-05-10

    ! Fix for programs running under taint mode.

    + Added set_tempdir().

    ! Fix for color formatting in chartsheets.

0.19 2011-05-05

    + Added new chart formatting options for line properties,
      markers, trendlines and data labels. See

    + Added partial support for insert_image().

    + Improved backward compatibility for deprecated methods
      store_formula() and repeat_formula().

    ! Fixed missing formatting for array formulas.
      Reported by Cyrille Gourves.

    ! Fixed issue with chart scaling that caused "unreadable content"
      Excel error.

0.18 2011-04-07

    + Added set_properties() method to add document properties.
      Added and tests.

0.17 2011-04-04

    + Added charting feature. See

    ! Fix for file corruption issue when there are more than 10 custom colours.
      Reported by Brian R. Landy.

0.16 2011-03-04

    ! Clarified support for deprecated methods in documentation and added
      backward compatible methods in some cases.

    ! Fix for center_horizontally() issue.
      Reported by Giulio Orsero.

    ! Fix for number like strings getting written as strings instead of numbers.
      Reported by Giulio Orsero.

0.15 2011-03-01

    ! Fix for issues with set_row() not passing on format to cells
      in the row. Reported by Giulio Orsero.

    ! Fixes for related issue in set_column().

0.14 2011-02-26

    + Added write_rich_string() method to write a string with multiple

    + Added example program.

    + Added set_1904() method for dates with a 1904 epoch.

    + Added example program.

    ! Fixed issue where leading and trailing whitespace in cell strings
      wasn't preserved.

0.13 2011-02-22

    + Added additional page setup methods:

    + Added Cell property methods:

    + Added example programs:

0.12 2011-02-19

    + Added set_selection() method for selecting cells.

0.11 2011-02-17

    ! Fix for temp dirs not been removed after xlsx file creation.
      Reported by Andreas Koenig.

0.10 2011-02-17

    + Added freeze_panes() and split_panes().

    + Added example program.

0.09 2011-02-13

    + Added write_url() for internal and external hyperlinks.

    + Added example programs.

0.08 2011-02-03

    + Added autofilter(), column_filter() and column_filter_list() methods.

    + Added example program.

0.07 2011-01-28

    + Added additional Page Setup methods.

    + Added example program.

0.06 2011-01-19

    ! Added fix for XML characters in attributes.
      Reported by John Roll.

    + Added initial Page Setup methods.

0.05 2011-01-04

    + Added support for array_formulas. See the docs for write_array_formula()
      and the example program.

0.04 2011-01-03

    + Added merge_range() for merging cells. With tests and examples.

0.03 2011-01-03

    + Optimisations. The module is now 100% faster.

0.02 2010-10-12

    ! Fixed dependencies in Makefile.

0.01 2010-10-11

    First CPAN release.