То, что я пытаюсь сделать, - это создать пользовательские функции (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.