.. _ewx:

Excel::Writer::XLSX
===================

`Excel::Writer::XLSX <http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX/>`_
is a module written in Perl for creating Excel 2007+ XLSX files.

Excel::Writer::XLSX is an API compatible rewrite of an older Perl module called
`Spreadsheet::WriteExcel <http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel/>`_
that creates Excel XLS file.

In terms of features Excel::Writer::XLSX is one most complete open source
libraries for writing Excel files. It supports:

* Multiple worksheets
* Strings and numbers
* Unicode text
* Cell formatting
* Formulas
* Images
* Charts
* Autofilters
* Data validation
* Conditional formatting
* Macros
* Tables
* Shapes
* Sparklines
* Hyperlinks
* Rich string formats
* Defined names
* Grouping/Outlines
* Cell comments
* Panes
* Page set-up and printing options

Excel::Writer::XLSX has comprehensive documentation, a large number of
`example files <http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX/lib/Excel/Writer/XLSX/Examples.pm>`_
and an extensive test suite.

Excel::Writer::XLSX and XlsxWriter are written by
`John McNamara <https://github.com/jmcnamara>`_.


Compatibility with Excel::Writer::XLSX
--------------------------------------

Porting of ``Excel::Writer::XLSX`` to ``XlsxWriter`` is a work in progress. The
following table shows the level of compatibility between the two module.

**Workbook**

+--------------------------+------------+---------------------+
| Workbook Methods         | XlsxWriter | Excel::Writer::XLSX |
+==========================+============+=====================+
| :func:`add_worksheet()`  | Yes        | Yes                 |
+--------------------------+------------+---------------------+
| :func:`add_format()`     | Yes        | Yes                 |
+--------------------------+------------+---------------------+
| add_chart()              | **No**     | Yes                 |
+--------------------------+------------+---------------------+
| add_shape()              | **No**     | Yes                 |
+--------------------------+------------+---------------------+
| add_vba_project()        | **No**     | Yes                 |
+--------------------------+------------+---------------------+
| :func:`close()`          | Yes        | Yes                 |
+--------------------------+------------+---------------------+
| :func:`set_properties()` | Yes        | Yes                 |
+--------------------------+------------+---------------------+
| :func:`define_name()`    | Yes        | Yes                 |
+--------------------------+------------+---------------------+
| set_tempdir()            | **No**     | Yes                 |
+--------------------------+------------+---------------------+
| set_custom_color()       | No (1)     | Yes                 |
+--------------------------+------------+---------------------+
| :func:`worksheets()`     | Yes (2)    | Yes                 |
+--------------------------+------------+---------------------+
| set_1904()               | **No**     | Yes                 |
+--------------------------+------------+---------------------+
| set_optimization()       | **No**     | Yes                 |
+--------------------------+------------+---------------------+

1. Not required in XlsxWriter. Full RGB colors are supported. 2. Called
``sheets()`` in Excel::Writer::XLSX.


**Worksheet**

+-------------------------------+------------+---------------------+
| Worksheet Methods             | XlsxWriter | Excel::Writer::XLSX |
+===============================+============+=====================+
| :func:`write()`               | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_number()`        | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_string()`        | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| write_rich_string()           | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_blank()`         | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_row()`           | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_column()`        | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_datetime()`      | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_url()`           | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_formula()`       | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`write_array_formula()` | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| keep_leading_zeros()          | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| write_comment()               | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| show_comments()               | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| set_comments_author()         | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| add_write_handler()           | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| insert_image()                | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| insert_chart()                | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| insert_shape()                | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| insert_button()               | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| data_validation()             | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| conditional_formatting()      | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| add_sparkline()               | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| add_table()                   | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| get_name()                    | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| activate()                    | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| select()                      | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| set_first_sheet()             | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`protect()`             | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| set_selection()               | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`set_row()`             | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`set_column()`          | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| set_default_row()             | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| outline_settings()            | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| freeze_panes()                | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| split_panes()                 | **No**     | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`merge_range()`         | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| merge_range_type()            | No (1)     | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`set_zoom()`            | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`right_to_left()`       | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`hide_zero()`           | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`set_tab_color()`       | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`autofilter()`          | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`filter_column()`       | Yes        | Yes                 |
+-------------------------------+------------+---------------------+
| :func:`filter_column_list()`  | Yes        | Yes                 |
+-------------------------------+------------+---------------------+

1. Not required in XlsxWriter.

**Page Setup**

+---------------------------------+------------+---------------------+
| Page Set-up Methods             | XlsxWriter | Excel::Writer::XLSX |
+=================================+============+=====================+
| :func:`set_landscape()`         | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_portrait()`          | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_page_view()`         | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_paper()`             | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`center_horizontally()`   | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`center_vertically()`     | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_margins()`           | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_header()`            | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_footer()`            | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`repeat_rows()`           | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`repeat_columns()`        | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`hide_gridlines()`        | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`print_row_col_headers()` | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`print_area()`            | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`print_across()`          | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`fit_to_pages()`          | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_start_page()`        | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_print_scale()`       | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_h_pagebreaks()`      | Yes        | Yes                 |
+---------------------------------+------------+---------------------+
| :func:`set_v_pagebreaks()`      | Yes        | Yes                 |
+---------------------------------+------------+---------------------+

**Format**

+------------------------------+------------+---------------------+
| Format Methods               | XlsxWriter | Excel::Writer::XLSX |
+==============================+============+=====================+
| :func:`set_font_name()`      | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_font_size()`      | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_font_color()`     | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_bold()`           | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_italic()`         | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_underline()`      | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_font_strikeout()` | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_font_script()`    | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_num_format()`     | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_locked()`         | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_hidden()`         | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_align()`          | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_rotation()`       | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_text_wrap()`      | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_text_justlast()`  | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_center_across()`  | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_indent()`         | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_shrink()`         | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_pattern()`        | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_bg_color()`       | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_fg_color()`       | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_border()`         | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_bottom()`         | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_top()`            | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_left()`           | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_right()`          | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_border_color()`   | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_bottom_color()`   | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_top_color()`      | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_left_color()`     | Yes        | Yes                 |
+------------------------------+------------+---------------------+
| :func:`set_right_color()`    | Yes        | Yes                 |
+------------------------------+------------+---------------------+


