Excel-DNA version 1.1

Excel-DNA version 1.1 is now available on NuGet and as a direct download from GitHub. The easiest way to install is with Visual Studio’s NuGet package manager (package ExcelDna.AddIn) – a ‘ReadMe’ file with further instructions will then be displayed. From the Package Manager Console:

Install-Package ExcelDna.AddIn

Excel-DNA 1.1 is expected to be the final version to support older .NET (< 4.5) and Excel (< 2007) releases.

Excel-DNA version 1.1 implements workarounds for two recent changes in Excel behaviour:

  • RTD servers based on ExcelRtdServer, and streaming functions based on IExcelObservable stopped updating after recent (early 2020) Excel updates.
  • When loaded into an elevated Excel process (running As Administrator) the on-demand COM registration (used for ribbon and CTP loading) started failing (mid 2020).

The update also introduces strong-naming of the Excel-DNA assemblies (thanks to @augustoproiete)

Please post any issues you run into to the Google group (https://groups.google.com/forum/#!forum/exceldna)

To make a donation to the project, or to arrange for a corporate support agreement that lets you steer the future of Excel-DNA, please visit the Excel-DNA Support page.

Thank you for your continued support and enthusiasm towards the Excel-DNA project!

Posted in Uncategorized | Tagged

Getting started (or: Why Are You Still Using VBA?)

I discovered a really nice write-up on “Excel-DNA Or Why Are You Still Using VBA?” by Efrem J. Sternbach. He  gives a succinct one-page introduction to various Excel-DNA features including the ribbon integration and COM interop. A great start if you’re curious about Excel-DNA and still using VBA :-)

Posted in Uncategorized

Excel-DNA version 1.0

Excel-DNA version 1.0 is now available on NuGet and as a direct download from GitHub. The easiest way to install is with Visual Studio’s NuGet package manager (package ExcelDna.AddIn) – a ‘ReadMe’ file with further instructions will then be displayed. From the Package Manager Console:

Install-Package ExcelDna.AddIn
The Excel-DNA 1.0.x series (this version with minor fixes) will be the final version to support older .NET (< 4.0) and Excel (< 2007) releases.

Version 1.0 is essentially the same as the long-overdue version 0.35. The update includes a number of bug fixes as well as improvements to the build-time Visual Studio integration:

  • Improve build tasks – more reliable clean-up and debugger detection
  • Improve RTD and async QueueAsMacro reliability
  • Improve install process of ExcelDna.AddIn NuGet package (now requires NuGet 2.5) (thanks to @caioproiete)
  • Change how ExcelDnaUtil.Application works in Protected View – try harder but don’t cache
  • Call UnhandledExceptionHandler for macros (ExcelCommands) too
  • Add XML schema for .dna file (thanks to @caioproiete)
  • Add option to pack .pdb files (thanks to @lanfeust69)
  • Fix exception handling from native async functions (thanks to @ittegrat)
Please post any issues you run into to the Google group (https://groups.google.com/forum/#!forum/exceldna)

To make a donation to the project, or to arrange for a corporate support agreement that lets you influence the future of Excel-DNA, please visit the Excel-DNA Support page.

Thank you for your continued support and enthusiasm towards the Excel-DNA project!


Posted in Release

Develop Excel Conference – London, 18 October 2018

Charles Williams of FastExcel fame is hosting a one-day conference in
London on 18 October, covering a wide range of Excel extensibility topics.

I will be presenting Excel-DNA, joining developers responsible for PyXLL,
Planatech XLL+, the new Javascript interfaces from Microsoft, and more.
Anyone interested in advanced Excel extensibility will get great insights
into the present and future of developing Excel-based solutions.
Please join us!

This is a community organized pay-if-you-can event, with contributions helping to defer speakers’ travel expenses.

Find all the details and registration info at:


Posted in Uncategorized

Excel-DNA version 0.34

Excel-DNA version 0.34 has been release and is now available

Please post any issues you run into to the Google group (https://groups.google.com/forum/#!forum/exceldna)
The easiest way to test the new version is by installing (or upgrading to) the ‘ExcelDna.AddIn‘ NuGet package.

Excel-DNA version 0.34 introduces a much improved build procedure for add-ins created using the NuGet package (thanks to a fantastic effort by @caioproiete !)

This replaces the error-prone post-build steps we had with a custom build helper and allows easier build output customization (see https://github.com/Excel-DNA/ExcelDna/wiki/Build-Output-Customization).
Various bug fixes and smaller improvements are also included in this version:
  • Add ExplicitExports=”false” to NuGet .dna file template
  • Fix getting Application from ProtectedViewWindow
  • Add attempts to get Application object from all windows of class EXCEL7.
  • Fix ExcelAsyncUtil.Observe re-open restart – broken by other fixes in the previous version. Add option to not restart.
  • Change ExcelRtdServer.ConnectData to be more careful about raising an update notice. Calls to Topic.UpdateNotify during the ConnectData overload are now always ignored. If the topic value is updated (through Topic.UpdateValue) during ConnectData, and the same value is returned from ConnectData, then no spurious UpdateNotify is raised. If the value returned from ConnectData differs from Topic.Value, UpdateNotify will still be raised.
  • Allow AccessViolation exceptions to be caught under .NET 4.0 – change marshaling wrapper from DynamicMethod to MethodBuilder.
  • Fix QueueAsMacro failure after paste live preview.
  • Fix AssemblyResolve re-entrancy race condition.

To make a donation to the project, or to arrange for a corporate support agreement that lets you ensure Excel-DNA will live on, please visit the Excel-DNA Support page.

Thank you for your continued support and enthusiasm towards the Excel-DNA project!

Posted in Uncategorized

Excel UDF IntelliSense for Excel-DNA and VBA

I’m happy to announce the first official release of the IntelliSense extension!

Excel-DNA IntelliSense provides on-sheet help for UDF functions as they are entered into a cell formula, similar to the help available for built-in Excel functions.


For Excel-DNA add-ins (v0.32 and later) that already provide descriptions in the [ExcelFunction] and [ExcelArgument] attributes, no extra work is needed.
Just download and open (or install) the latest ExcelDna.IntelliSense.xll add-in from the GitHub (https://github.com/Excel-DNA/IntelliSense/releases), and the IntelliSense will light up. (There is also a NuGet package for embedding the service into your add-in, making distribution a bit easier.)
For VBA functions, you can add an extra sheet with the IntelliSense descriptions, or add an external .xml file with the information, or embed as a the CustomXML part in the Workbook or .xlam add-in.
Then open (or install) the ExcelDna.IntelliSense.xll add-in to provide the display service. Charles Williams, of FastExcel fame, has a detailed write-up on adding IntelliSense for your VBA function – see https://fastexcel.wordpress.com/2016/10/07/writing-efficient-vba-udfs-part-15-adding-intellisense-to-your-udfs/.
For PyXLL users, the latest PyXLL 3.1 release offer built-in support for IntelliSense with the ExcelDna.IntelliSense.xll add-in installed. See https://enthought.pyxll.com/whatsnew.html#intellisense.
Other native .xll add-ins can also provide IntelliSense through an external .xml file.
Details and downloads are on GitHub:
* Detailed Usage Instructions: https://github.com/Excel-DNA/IntelliSense/wiki/Usage-Instructions including details for incorporating the library into your own add-in for easier distribution.
Public support and bug reports:
The Excel-DNA Google group (https://groups.google.com/forum/#!forum/exceldna) is the best place for general questions, comments etc.
Detailed bug reports and feature requests can be added to the GitHub issues list: https://github.com/Excel-DNA/IntelliSense/issues
Corporate support and private donations:
If you find Excel-DNA and extensions like the IntelliSense service useful, please support the project by arranging a corporate support agreement, or making a donation via PayPal. See https://excel-dna.net/support/ for details and contact information.
Posted in Uncategorized

Add-in spotlight: ACQ for interpolation

This is the first in an occasional series of posts about interesting Excel-DNA based add-ins.

Alex Chirokov’s ACQ add-in provides a library of interpolation routines for Excel. The add-in includes 1D and 2D interpolators, scatter plot smoothing and a Mersenne Twister random number generator.

To have a closer look:

Features I like about the add-in (apart from it using Excel-DNA) include:

  • A liberal open-source license
  • A clear and authoritative implementation of a particular domain
  • Very nice example of using object handles – an interpolator is build from the data, and then used to interpolate many values. ACQ has a clean implementation and great example of this technique.
  • All the functions have a common prefix (“=acq…”), making them easy to find in the function list, and use with the Excel-DNA IntelliSense extension.

Thank you for publishing a great add-in, Alex.

PS: ACQ has a bonus feature that implements a Sudoku solver (and generator)! See the write-up here: Sudoku Solver in Excel using C# and Excel-DNA

Posted in Uncategorized

Excel-DNA 0.33 Release Candidate and License Change

Version 0.33 Release Candidate

Excel-DNA 0.33 contains a number of bug fixes and improvements, including a diagnostic logging approach based on the .NET Trace classes. More details can be found in the current ChangeLog.

This version will also be the foundation for a first release of the custom Registration extension and the ongoing work towards on-sheet IntelliSense for user-defined functions.

A release candidate for the new version is available

Please help me test that the new version works correctly in the many different ways, Excel and Windows versions, and languages where Excel-DNA add-ins run.

If you run into any unexpected behaviour bugs or regressions, please post to the Google group or contact me directly.

Also, if you are able to confirm that the new version works in a particular setting, please post that too. Details about what functionality you’ve tested and what operating environment (including .NET and Excel version) you are running with, would help me a lot.

License Change

For the Excel-DNA project, I’ve changed to the standard MIT license. This has become the most common open-source license aligned with my intention of making Excel-DNA free for all use, including commercial use.

If you have any concerns with this change, please let me know.

NuGet Packages

With this version, I am re-aligning the Excel-DNA package names on NuGet with the assembly names and standard naming conventions. The main packages for this release will be:

  • ExcelDna.AddIn – Includes the .xll and creates a complete add-in when installed into a Class Library project. This is update of the “Excel-DNA” package.
  • ExcelDna.Integration – Containts only the integration reference library, suitable for referencing in third-party libraries that are intended to be used in Excel-DNA add-ins. An update of the “Excel-DNA.Lib” package.

The old packages will be updated to refer to the new ones as dependencies, which should allow package updates to work correctly.


The Excel-DNA project is (slowly) moving to GitHub.

  • The core library project can be found at https://github.com/Excel-DNA/ExcelDna, where the latest source versions are hosted.
  • The best documentation and links to related projects and other source is still found on the old CodePlex site.
  • For general questions and discussion about Excel-DNA, please continue use the Excel-DNA Google group.
  • Specific issues, bug reports and feature requests can be added to the GitHub Issues list.
  • For a permanent book-mark to the project, please use the Excel-DNA home page at http://excel-dna.net.

Thank you for your continued support of Excel-DNA!

Posted in Uncategorized

Excel-DNA 0.32 Released

I’ve posted a final release of Excel-DNA version 0.32 to CodePlex (https://exceldna.codeplex.com/releases/view/119190) and the NuGet package repository (https://www.nuget.org/packages/Excel-DNA).

Excel-DNA 0.32 consolidates a large number of bug fixes and improvements that have accumulated over the last year. In particular, a number of edge cases that affect Excel-DNA add-ins under Excel 2013 have been addressed.

Native asynchronous functions, available under Excel 2010 and later, are now supported. Runtime registration of delegate functions and external retrieval of registration details will allow development of extension features without requiring changes to the Excel-DNA core runtime – see the ExcelDna.CustomRegistration project for examples of the dynamic registration: https://github.com/Excel-DNA/CustomRegistration

Excel-DNA 0.32 introduces one breaking change: integer parameter conversions are modified to be consistent with VBA. Fractional values passed to functions with integer parameters are converted using the round-to-even convention – as is the case for VBA functions. This issue is discussed in more detail at https://excel-dna.net/2014/05/03/excel-dna-0-32-breaking-changes-to-integer-and-boolean-parameter-handling/

See the Distribution\ChangeLog.txt file for a complete list of changes in this version.

As always, I greatly appreciate any feedback on this version, and on Excel-DNA in general. Any comments or questions are welcome on the Google group or by contacting me directly.

To ensure future development of Excel-DNA, please make a donation via PayPal or arrange for a corporate support agreement. See https://excel-dna.net/support/ for details.

Posted in Release

Excel-DNA 0.32 – Breaking changes to integer and boolean parameter handling

Excel-DNA version 0.32 introduces some changes in the parameter conversions applied to integer and boolean parameters. These changes improve compatibility with VBA, and make it easier to provide a consistent implementation when the conversion needs to be explicitly implemented, as for some generated methods.

In Excel-DNA versions before 0.32, UDF functions taking integer and boolean parameters were registered with the C API using the respective types, and hence the conversions were performed by Excel before calling the UDF. In Excel-DNA 0.32, these conversions are performed by Excel-DNA, with the changes discussed here. Affected functions would previously have behaved consistent with .xll add-ins made with C/C++, where registered with integer or boolean parameter types.

The new behaviour for integer conversions is that double values passed from Excel to integer parameters in UDFs are converted using the ‘Round-To-Even’ midpoint rounding convention. Previously, positive midpoint values (like 2.5) were rounded up (to 3), while negative midpoint values were rounded down (-2.5 to -3), with the exception that -0.5 was rounded to 0. Int64 (long) parameters are now also handled consistently.

One exception to the VBA compatibility guideline is that incoming boolean ‘true’ values passed to integer parameters are converted to 1, rather than -1 as would be the case with VBA. For this case I consider it more importatnt to be consistent with .NET conventions, whereby boolean ‘true’ values are represented by 1.

For conversions to boolean parameters, the main change is in how fractional values are converted to booleans. The new version is consistent with VBA – any non-zero value is converted to ‘true’.

I hope you will agree that the improved consistency is worth making these breaking changes, and that the decision will not cause any unexpected problems. As always, I appreciate any feedback, either directly or via the Excel-DNA Google group.


The following snapshot gives a good summary of the changes:


The functions used are as follows:

public static object dnaConvertInt32(int value)
    return value;
Function VbaConvertInteger(value As Integer)
    VbaConvertInteger = value
End Function
public static object dnaConvertInt64(long value)
    return value;
public static object dnaConvertBoolean(bool value)
    return value;
Function VbaConvertBoolean(value As Boolean)
    VbaConvertBoolean = value
End Function
Posted in Uncategorized | Tagged ,