Click here to Skip to main content
6,935,947 members and growing! (19,563 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » COM / COM+ » COM Interop     Intermediate

Create an Automation Add-In for Excel using .NET

By Govert van Drimmelen

Describes how to create an automation add-in for Excel using .NET.
C#, Windows, .NET1.0, .NET1.1VS.NET2003, Dev
Posted:18 Jul 2004
Updated:3 Aug 2004
Views:243,146
Bookmarked:62 times
printPrint Friendly   add Share
      Discuss Discuss   Broken Article?Report  
32 votes for this article.
Popularity: 6.09 Rating: 4.04 out of 5
4 votes, 12.5%
1

2
1 vote, 3.1%
3
7 votes, 21.9%
4
20 votes, 62.5%
5

Introduction

Excel versions 2002 (XP) and 2003 introduce the concept of an Automation Add-In. Automation Add-Ins allow public functions in COM libraries to act as User-Defined Functions (UDFs) in Excel, thus to be referenced directly from cell formulae.

This article provides a detailed walk-through of how to create an Automation Add-In for Excel using Visual Studio .NET.

Background

Some relevant knowledge base articles that discuss Automation Add-Ins are:

  • Q291392 - INFO: Excel COM Add-ins and Automation Add-ins.
  • Q285337 - How To Create a Visual Basic Automation Add-in for Excel Worksheet Functions.
  • Q278328 - XL2002: How to Mark an Automation Add-In Function as Volatile.

A commercial library that presents equivalent (and more) functionality, and makes this all very easy is ManagedXLL. However, this library is quite expensive and requires run-time licenses to distribute user code. It uses the native XLL API for creating an add-in to Excel, and thus also supports older versions of Excel.

The exact requirements for creating a COM server that can be used as an Automation Add-In are poorly documented, complicated by the fact that the default options in Visual Basic 6.0 seem to work perfectly.

When creating a COM library using .NET, an attempt to add the library as an Automation Add-In in Excel causes the error: �The file you selected does not contain a new Automation Server, or you do not have sufficient privileges to register the Automation Server�.

Here, I describe how to create an Automation Add-In in .NET, using C#. The techniques should apply to any .NET language.

There seem to be three tricks for implementing an Automation Add-In for Excel using .NET:

  1. The library needs to be registered for use through COM. This can be done by marking the project to �Register for COM Interop� or by manual registration using RegAsm.exe.
  2. The �Programmable� registry key needs to be added in the registry, under HKCR\CLSID\{xxx}\. This can be automated by adding appropriate ComRegisterFunction methods to the class.
  3. The class needs to be marked with the ClassInterface attribute, with value ClassInterfaceType.AutoDual (explicit interface implementations can work too). The default class interface that is generated is a dispatch interface - Excel seems to ignore the dispatch interface for Automation Add-Ins.

Walk-through

  1. Create the library:
    1. Create a new C# Class Library Project, called NAddIn.
    2. Select the project's properties; under �Configuration Properties�, �Build�, set �Register for COM Interop� to True.
    3. Rename the class, add a namespace declaration, set the ClassInterface attribute of the class, and add a function to be used from Excel:
      using System;
      using System.Runtime.InteropServices;
      
      namespace NAddIn
      {
          [ClassInterface(ClassInterfaceType.AutoDual)]
          public class Functions
          {
              public Functions()
              {
              }
      
              public double Add2(double v1, double v2)
              {
                  return v1 + v2;
              }
      
              [ComRegisterFunctionAttribute]
              public static void RegisterFunction(Type t)
              {
                  Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(
                      "CLSID\\{" + t.GUID.ToString().ToUpper() + 
                         "}\\Programmable");
              }
      
              [ComUnregisterFunctionAttribute]
              public static void UnregisterFunction(Type t)
              {
                  Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey(
                      "CLSID\\{" + t.GUID.ToString().ToUpper() + 
                        "}\\Programmable");
              }
          }
      }
    4. Build the NAddIn project to create bin\debug\NAddIn.dll.
  2. Test the Add-In in Excel:
    1. Open a new workbook in Excel.
    2. Select Tools, Add-Ins, Automation.
    3. NAddIn.Functions should be listed - select it. OK.
    4. In a cell, type =Add2(3,4)
    5. The cell should display 7.
To register the .dll after moving it, run regasm with the /codebase flag (typically as c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\RegAsm /codebase NAddIn.dll). You will get a warning about the assembly being unsigned - you can ignore this (or sign the assembly as documented).

History

  1. Initial version - 19 July 2004.
  2. Removed type library embedding instructions - 19 July 2004.
  3. Added ComRegisterFunction bits to automate registry changes - 30 July 2004.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Govert van Drimmelen


Member

Occupation: Web Developer
Location: South Africa South Africa

Other popular COM / COM+ articles:

 
Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 116 (Total in Forum: 116) (Refresh)FirstPrevNext
GeneralC# Method visible in VBA but not reachable PinmemberAsim Mahmood222:32 9 Apr '09  
GeneralThanks and promote more your ExcelDna! PinmemberAlain VIZZINI17:30 9 Mar '09  
Generalhow to make a value in an excel cell read only using c#? Pinmemberabhiram_nayan2:43 22 Jan '09  
Generala button on the excel active cell? Pinmemberabhiram_nayan3:46 7 Jan '09  
Generalhow to call this " Add2(3,4)" from another c#.2005 programme Pinmembervishal nikam8321:44 16 Dec '08  
GeneralRe: how to call this " Add2(3,4)" from another c#.2005 programme PinmemberGovert van Drimmelen13:08 24 Dec '08  
General#REF! Pinmemberabi805:26 11 Aug '08  
GeneralAddin in Excel 2002 getting registered - Add2 function is not shown in function browser in Excel 2002. PinmemberMember 38506454:20 9 Jul '08  
Questioncannot get .dll to work as addin PinmemberKl_Gl0:16 22 Jun '08  
QuestionUsing dll as an add-in for a different machine Pinmemberwilliamw4:08 7 May '08  
AnswerRe: Using dll as an add-in for a different machine Pinmemberwilliamw7:07 8 May '08  
GeneralIs it possible to create functions that take a range/an array as input? PinmemberJosefLagergren1:48 5 Mar '08  
QuestionInteresting Error Pinmemberpinkfloydfan3:36 26 Oct '07  
GeneralOnly works on my local machine PinmemberAnthonyLondon12:13 25 Oct '07  
GeneralRe: Only works on my local machine PinmemberAnthonyLondon2:18 26 Oct '07  
QuestionGreat! But how do we add explanation to the functions? [modified] Pinmemberpinkfloydfan0:33 24 Oct '07  
Thanks very much for posting this. I have been looking for some time with no joy for a way to use C# Express to build Excel Add-Ins and you have solved my problem.

What we are now missing is how to add the explanatory text to each function paramater that would come up if using the function wizard.

Is it possible to post how to do that please?

Many Thanks


-- modified at 8:27 Friday 26th October, 2007

Having now read through the comments on this site I see that you have to write an XLL not a DLL to do this.
GeneralNeed Help Pinmembermousum_cp3:04 3 Sep '07  
QuestionNeed Help moving the dll/addin to another machine !!!!!!!!!!! Pinmemberanjana198112:53 18 Jul '07  
AnswerRe: Need Help moving the dll/addin to another machine !!!!!!!!!!! Pinmemberlukejackson2:25 30 May '08  
QuestionNot see the function Add2 in Excel's insert function Pinmembersimplexyz4:37 13 Jun '07  
AnswerRe: Not see the function Add2 in Excel's insert function PinmemberGovert van Drimmelen5:54 13 Jun '07  
Generali se it in excel automation list :( Pinmember_sardaukar_14:47 12 Jun '07  
GeneralRe: i se it in excel automation list :( [modified] Pinmemberzuraw23:53 22 Dec '08  
GeneralGetting a "REF!" error on using Add2 Pinmemberameysj@gmail.com5:40 29 May '07  
GeneralRe: Getting a "REF!" error on using Add2 Pinmemberameysj@gmail.com5:30 31 May '07  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+PgUp/PgDown to switch pages.

PermaLink | Privacy | Terms of Use
Last Updated: 3 Aug 2004
Editor: Nishant Sivakumar
Copyright 2004 by Govert van Drimmelen
Everything else Copyright © CodeProject, 1999-2010
Web20 | Advertise on the Code Project