私がやろうとしているのは、VSTO の C#「Excel 2007 アドイン」プロジェクト タイプを使用して Excel 用のユーザー定義関数 (UDF) を作成することです (一般的な 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 オプション内) を見ると、リスト (設定されている) にアドインが表示されます。起動時に読み込む)。しかし、ここで問題が発生します.Excel内からUDFを呼び出そうとすると、Excelがメソッドを見つけることができません!
私が想像するのは間違っていると思いますが、メソッドを Excel UDF としてタグ付けする必要があるということです (角括弧を使用します。たとえば、Web サービスのコーディング時に行われるように -> "[WebService]")。しかし、私はこのタグを突き止めることができませんでした (そして、私の予感が正しいかどうかまったく確信が持てないため)。そのため、ここ SO の素晴らしい人々に会いに行くことにしました。
私の質問は基本的に、コードを使用している場所から、UDF を Excel でアクセスできるようにする簡単な方法はありますか? はいの場合、どのように?
現在のプロジェクトの全体的な目標は、VS2010/Excel2007 での C# UDF の実行が許容できる速度で動作するかどうかを確立することであるため、VSTO プロジェクトの種類 (アドイン、ワークブック、テンプレート) 内に留まりたいと考えています。これをテストするために、私は Windows7RC と VS2010 beta1 で作業しています。