PyXLL 3 Changelog
See What’s new in PyXLL 3 for a more detailed overview of the new features in PyXLL 3.
PyXLL 3.5
PyXLL 3.5.4 (2018-08-29)
Patch Release:
- Fix problem where alerts would sometimes not be re-enabled after resizing an array formula. This resulted in
the user not seeing a confirm dialog when closing Excel.
- Don’t unregister the ribbon, menus and functions when closing Excel before the user has confirmed they want
to quit. This was a regression introduced in 3.4.0 in the change to ensure the ribbon and menus were closed when
unloading the add-in. This most recent change fixes both problems.
PyXLL 3.5.3 (2018-07-02)
Patch Release:
- Fix problem where Excel would occasionally lock up when loading PyXLL.
- Remove unnecessary error message about not being able to call IntelliSense refresh macro when starting
(introduced in 3.5.0).
PyXLL 3.5.2 (2018-06-01)
Patch Release:
- Handle Python integers larger than 32 bits when returning as ‘var’ type (or as part of a ‘var’ array).
When returning as ‘int’ the number must still fit in a signed 32 bit integer.
- Fixed a bug that occurred when attempting to pass a pandas DataFrame to xlAsyncReturn, or when returning
a DataFrame from a function with return type of ‘var’ and with ‘auto_resize=True’.
- Array functions returning items that converted to Exceptions (i.e. NaT) weren’t being added to the error
cache correctly, causing a serious slow down for certain large arrays.
PyXLL 3.5.1 (2018-05-24)
Patch Release:
- Returning pandas NaT as part of an array now works. Previously either a Python exception would be raised
or Excel would crash, depending on the version of Pandas.
- Returning NaN as part of an array now correctly appears as #NUM! in Excel instead of a large number.
PyXLL 3.5.0 (2018-05-21)
New Features:
UDFs can now be hidden by setting hidden=True in @xl_func decorator. Hidden functions don’t appear
in the Excel function wizard or IntelliSense (if using ExcelDNA-IntelliSense addin).
New option ignore_environment added to the PYTHON section of the config. When this is set
any environment variables such as PYTHONPATH are ignored when initializing Python.
This is advisable so that any global environment variables that might conflict with the settings
in the pyll.cfg file do not affect how Python is initialized.
This fixes a compatibility issue with FINCAD, which sets PYTHONPATH globally on loading.
Controls for the trace function used to detect aborted calculations added to the config.
If a pyxll function has allow_abort set, a Python trace function is installed that checks
if Excel has received a stop request (Esc) from the user periodically. The trace function
slows down the opertation of the Python interpreter, but how often the trace function actually
calls back into Excel can now be configured to minimize the slow down.
The two new options are (both go in the PYXLL section):
- abort_throttle_time - minimum time in seconds between checking abort status
- abort_throttle_count - minimum number of calls to trace function between checking abort status
Both options can be disabled by setting them to 0. By default, they are 0.2 seconds and 1000 respectively.
Improvements:
- Registering 1000s of UDFs is now faster.
- Add-in and config paths in the about dialog are now hyperlinks, and have tooltips that show the full path
for very long paths that are truncated in the dialog.
- Example config file includes comments for all options to help new users.
Fixes:
- IntelliSense is refreshed when rebinding functions.
- Scheduled tasks (e.g. array resizing) are temporarily suspended during the allow_abort trace function.
- Substituting multi-line environment variables into options (e.g. pythonpath) now works correctly.
- Change async example to use iextrading.com instead of Yahoo Finance.
PyXLL 3.4
See What’s new in PyXLL 3 for a more detailed overview of the new features in PyXLL 3.
PyXLL 3.4.0 (2018-03-28)
New Features:
RTD functions now recalculate and start ticking automatically when a workbook is opened.
Note that for existing workbooks you will have to recalculate and save the workbook for this
change to take effect.
To disable, pass “volatile=False” to xl_func.
The PyXLL add-in path and config file path are now shown on the ‘about’ dialog.
Fixes:
- A COM resource leak has been fixed. This would have affected heavy users of RTD functions, and also
caused Excel to not always shut down cleanly.
- RTD functions no longer stop ticking after Excel has been inactive for a while.
- Unloading the PyXLL addin now works more cleanly and any menu items or ribbon toolbars are removed.
- Some internal macros (array resizing, reloading, IntelliSense refreshing) weren’t being registered
when PyXLL was unloaded and then reloaded manually (instead of using the reload feature).
- pytz will no longer be reloaded when ‘deep_reload’ is enabled as reloading it causes a TypeError
(https://bugs.launchpad.net/pytz/%2Bbug/1606694).
PyXLL 3.3
See What’s new in PyXLL 3 for a more detailed overview of the new features in PyXLL 3.
PyXLL 3.3.2 (2018-01-03)
Patch Release:
- Fix a problem introduced in 3.3.0 where calling an RTD function with missing/default arguments
would result in the function being called repeatedly, rather than connecting the returned RTD object
only once.
PyXLL 3.3.1 (2017-10-20)
A deployment issue with the 3.3.0 release resulted in some of the intended changes not being included
in the final build. This release includes all the features listed in the 3.3.0 release notes.
PyXLL 3.3.0 (2017-10-11)
New Features:
- New API functions for modifying the ribbon (see Modifying the Ribbon)
get_ribbon_xml
set_ribbon_xml
set_ribbon_tab
remove_ribbon_tab
- Certain Python configuration options can be set via environment variables
- PYXLL_CONFIG_FILE - used instead of local pyxll.cfg
- PYXLL_EXTERNAL_CONFIG_FILE - added to any other external configs in the main config
- PYXLL_PYTHON_EXECUTABLE - used if not set in the config
- PYXLL_PYTHON_DLL - used if not set in config
- PYXLL_PYTHONHOME - used if not set in config
Improvements:
- Shortcuts can now use special keys that were previously unavailable, e.g. PgUp, PgDn etc. See Keyboard Shortcuts.
- async_call now always calls the callback in an Excel macro context, meaning that the Excel
COM API can be used safely.
- When PyXLL starts it checks whether the Python DLL is 32 bit or 64 bit before attempting to load it,
and writes a warning to the log file if it looks like it doesn’t match Excel.
- Performance of RTD functions has been improved.
New Options:
PYXLL/deep_reload_disable = 1/0 (default=0)
Disable deep reload import hook. When the deep_reload option is turned off, an import hook
is still used to track import dependencies as deep_reload can be toggled on and off when
reloading. The new deep_reload_disable option disables this, and cannot be re-enabled
without restarting Excel.
PYXLL/disable_com_addin = 1/0 (default=0)
Disable COM addin. The COM part of PyXLL adds the ribbon and RTD functionality, so these will not be
available if disabled.
If The COM addin has been disabled by Excel (which can happen if a crash occurs while executing code called
from the addin) it will now be automatically re-enabled when PyXLL starts if this option isn’t set.
Fixes:
- Using quoted paths for some config options used to cause problems. Now paths are stripped of quotes automatically.
- Marking an RTD function as thread safe would cause an error. RTD functions cannot be run in a background thread,
and so now PyXLL checks for this, logs a warning, and registers the function with Excel without the thread safe
option.
- Fixed a problem importing the ‘py’ package.
- Dialog boxes are now DPI aware
PyXLL 3.2
See What’s new in PyXLL 3 for a more detailed overview of the new features in PyXLL 3.
PyXLL 3.2.3 (2017-04-29)
Patch release:
- Fixed a problem that could happen when installing PyXLL if a previous version of PyXLL 3.x had been installed
previously.
If you are having problems installing a newer version of PyXLL and have a version prior to this release already
installed, remove the old version and delete or move the old pyxll.xll file before attempting to install the
latest version.
xl_license_notifier
wasn’t being called when using an evaluation license.
PyXLL 3.2.2 (2017-04-12)
Patch release:
- Excel freezing/crashing problem affecting some uses of asnyc_call and auto-resizing array functions fixed.
This was a problem for some users when attempting to update Excel while calculations were still occurring.
- Occasional crash when exiting Excel when using background Python threads fixed.
- License keys surrounded by “< >” are ignored (regression from previous version).
PyXLL 3.2.1 (2017-03-22)
Patch release:
- Minor update to Canopy license manager integration.
PyXLL 3.2.0 (2017-03-01)
New Features:
- License manager changes for better Canopy integration. This does not affect existing license keys.
Fixes:
- The “deep reload” feature has been re-written to address problems occurring with the initial implementation.
It now works with relative imports correctly, and problems associated with reloading PyXLL multiple times
causing reloading errors have been addressed.
- ‘deep_reload_include’ and ‘deep_reload_exclude’ can be set together to restrict the set of modules that
will be reloaded when using deep reloading.
- When using auto resized arrays the Python function could get called multiple times. Now the Python function
will only be called once.
- Non-ASCII characters from the pyxll stubs package have been removed.
- A bug in the stubs version of xl_app when using xlwings has been resolved.
PyXLL 3.1
See What’s new in PyXLL 3 for a more detailed overview of the new features in PyXLL 3.
PyXLL 3.1.1 (2016-12-05)
Patch release:
- Fix problem when recalculating from a ribbon function.
- The deep reload feature no longer tries to reload standard modules or those with c extensions.
- Fix
xl_app
to work with xlwings 0.10.0.
PyXLL 3.1.0 (2016-11-16)
New features:
- Python 3.6 support added.
- Auto-resize option for functions returning arrays. See auto_resize argument to
xl_func
.
- Keyboard shortcuts added to
xl_macro
and xl_menu
.
- Integration with ExcelDNA IntelliSense (https://github.com/Excel-DNA/IntelliSense).
- Added xlwings option to
xl_app
.
Fixes:
- Fixed a problem with loading the ribbon that affected some users.
- Missing reload and rebind functions added to stubs pyxll module.
PyXLL 3.0
See What’s new in PyXLL 3 for a more detailed overview of the new features in PyXLL 3.
PyXLL 3.0.4 (2016-08-23)
Patch release:
- Fix problem registering functions where the total length of the argument names is greater than 255 characters.
PyXLL 3.0.3 (2016-08-03)
Patch release:
- Menus now work correctly when unicode strings are used.
PyXLL 3.0.2 (2016-06-23)
Patch release:
- Default Python function arguments are used when Excel arguments are empty cells. Previously default
arguments were only used if the argument to the Excel function was missing altogether.
PyXLL 3.0.1 (2016-05-25)
Patch release:
- Better handling of license key files with blank lines and comments
- Restore ‘pyxll_reload’ and ‘pyxll_rebind’ macros that were removed between versions 2.x and 3.0.0.
- Fix issue when calling
rebind
and reload
from macros via the COM method Application.Run.
PyXLL 3.0.0 (2016-04-05)
New features:
- Ribbon can be customized from PyXLL.
- RTD (real time data) functions.
- Function signatures are now optional.
- Default keyword arguments are supported.
- Python exe, dll and pythonhome can be set in the config.
- Deep reloading (reload modules and their dependencies).
- Errors are cached and can be retrieved by
get_last_error
.
- Python functions
reload
and rebind
added.
- comtypes support.
- New
xl_app
function added.
Fixes:
- Circular dependencies in the config file are now caught.
- Warning about custom types being redefined when reloading is fixed.
- Macro-equivalent functions with xl_cell argument types are no longer implicitly volatile.