Я пытаюсь создать пользовательские функции (UDF) для Excel, используя тип проекта VSTO C # «Надстройка 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 (надстройка, рабочая книга, шаблон), поскольку моя общая цель для моего текущего проекта - установить, работает ли выполнение UDF C # с VS2010 / Excel2007 с приемлемой скоростью. Чтобы проверить это, я работаю над Windows7RC и VS2010 beta1.