Как легко создать Excel UDF с проектом надстройки VSTO
Я пытаюсь создать пользовательские функции (UDF) для Excel, используя тип проекта CST «Надстройка Excel 2007» (поскольку я просто хочу сгенерировать некоторые общие UDF). Поскольку я только пытаюсь изучить основы (на данном этапе, во всяком случае), вот как выглядит мой код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
using Microsoft.Office.Tools.Excel.Extensions;
using System.Runtime.InteropServices;
namespace ExcelAddIn1
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{}
//My UDF
public static double HeronicCal(int a, int b, int c)
{
//first compute S = (a+b+c)/2
double S = (a + b + c) / 2;
double area = Math.Sqrt(S * (S - a) * (S - b) * (S - c));
return area;
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}
Он прекрасно компилируется, и когда я его запускаю, Excel открывает новую электронную таблицу, и когда я смотрю на список «Надстройки» (в опциях Excel), я вижу свою надстройку в списке (который установлен «Загрузить при запуске». Но тут возникает моя проблема, когда я пытаюсь вызвать свой UDF из-за Excel, Excel не может найти метод!
То, что я считаю неправильным, это то, что я должен пометить свой метод как UDF Excel (используя квадратные скобки - как, например, это делается при кодировании веб-сервисов -> «[WebService]»). Но я не смог отследить этот тэг (и так как я совсем не уверен, что моя догадка верна), поэтому я решил пойти к вам, замечательные люди, здесь, в SO.
Итак, мой вопрос в основном таков: откуда я с моим кодом, есть ли какой-нибудь простой способ сделать мой UDF доступным для Excel? Если да, то как?
Я действительно хотел бы остаться в рамках типов проектов VSTO (Add-In, Workbook, Template), так как моя общая цель для моего текущего проекта - установить, работает ли C # UDF с VS2010 / Excel2007 с приемлемой скоростью. Чтобы проверить это, я работаю на Windows7RC и на бета-версии VS2010.