New in PyXLL 5.8
Read and write Excel tables from Python.
See Working with Tables for details.
New in PyXLL 5.6
Writing an Excel RTD (Real Time Data) function is now as simple as writing a Python generator.
See RTD Generators for more details.
New in PyXLL 5.6
Polars DataFrames can be used as argument and return types, in the same way as pandas DataFrames.
See Polars DataFrames for more details.
The PyXLL Excel add-in can now be installed and uninstalled via a new command line tool.
To install the PyXLL Excel add-in first use pip install to install the PyXLL wheel, eg
> pip install "pyxll >= 5.0.0"
Once the PyXLL wheel is installed the new pyxll command line tool can be used to install, configure and uninstall the PyXLL Excel add-in, eg
> pyxll install
Task Panes are Excel windows that can be floating or docked as part of the Excel user interface.
PyXLL 5 adds the capability to write custom task panes in Python using any of the following Python UI toolkits:
See Custom Task Panes.
PyXLL 5 adds integration with the following Python plotting and charting packages:
See Charts and Plotting.
Cached objects can be serialized and saved as part of the Excel workbook. When a workbook containing saved objects is opened they are deserialized and loaded into PyXLL’s object cache.
To specify that an object should be saved use the save
parameter to the object
return type.
Python packages can now be loaded by PyXLL via setuptools’ entry-points
.
This allows package developers to distribute functionality to other PyXLL users more easily as no additional PyXLL configuration is required when installing a package with PyXLL entry points.
The ribbon toolbar can now be composed of multiple xml files instead of a single file.
The ribbon
setting can now be a list of files, which PyXLL will merge into a single ribbon.
This can be used by package authors who want to add a ribbon to their package via an entry point without needing changes to be made to the main PyXLL configuration or ribbon xml file.
Images specified in the ribbon xml can now also be package resources as well as files.
When using the xl_func
, xl_macro
or xl_menu
decorators outside
of the usual module imports as PyXLL is starting, PyXLL will automatically reflect these functions
in Excel without needing to call rebind
.
This simplifies working with adhoc worksheet functions from an interactive Python prompt in Excel, such as a Jupyter notebook.
DataFrameFormatter
can now do conditional formatting based on the values in the
returned DataFrame.New in PyXLL 5.2
PyXLL can now automatically roll its log file when it reaches a certain size or after a specific interval has elapsed. This avoids long running Excel processes from generating huge log files. Old log files can be kept for a while and then later automatically cleaned up to avoid using excessive disk space.
See Logging for more details.
PyXLL 5.0 contains some changes that may require you to make changes to your code and/or config before upgrading from previous versions.
The PyXLL software license agreement has been updated.
See PyXLL Terms and Conditions or the software license agreement PDF file included in the PyXLL download for details.
This can be disabled for backwards compatibility
Deep reloading is now enabled by default. See Reloading and Rebinding for details about how PyXLL reloads modules.
To disable deep reloading set the following in your PyXLL config file.
[PYXLL]
deep_reload = 0
This can be disabled for backwards compatibility
In previous versions of PyXLL RTD functions were implicitly marked as needed to be recalulated when opening a workbook. This was done to be consistent with earlier behaviour where RTD functions were registered as volatile.
As of PyXLL 5 RTD and standard functions behave in the same consistent way. That is, unless
the recalc_on_open=True
is passed to xl_func
, or defaulted via the config, RTD
functions will not recalculate and start ticking when a workbook is opened automatically.
To enable recalculation on open as the default for all RTD functions you may set the following in your config file.
[PYXLL]
recalc_rtd_on_open = 1
If your code uses async_call
you should replace it with the new schedule_call
.
The old async_call
is still available but has been deprecated and will log a warning if
used.