我編碼C#(Visual Studio Express 2012)並使用ExcelIntegration。我想讓ExcelFunction
將用戶定義的對象返回給單元格。我還希望ExcelFunction
將用戶定義的對象作爲輸入。用戶自定義對象和ExcelIntegration
這是我的代碼的一個例子。這不起作用,從Excel中都不可以看到任何功能(CreateDog
或GetName
)。
namespace Test
{
public class Dog
{
public Dog(string name)
{
Name = name;
}
public readonly string Name;
}
public class TestClass
{
[ExcelFunction]
public static Dog CreateDog(string name)
{
return new Dog(name);
}
[ExcelFunction]
public static string GetName(Dog dog)
{
return dog.Name;
}
}
}
從昨天回答後,我加入了字典。我修改了下面的代碼。這工作。我現在的問題是如何使這個通用。我可以修改ExcelDNA代碼以某種方式自動爲我做這個字典的東西?
命名空間ExcelIntegration { 公共類犬 { 公狗(字符串名稱){ 名稱 =名稱; }
public readonly string Name;
}
public class TestClass
{
static Dictionary<string, Dog> DogStore;
[ExcelFunction]
public static string CreateDog(string name)
{
Dog dog = new Dog(name);
string key = dog.ToString() + "_" + DateTime.Now.Ticks.ToString();
try
{
if (DogStore.ContainsKey(key) == false) DogStore.Add(key, dog);
}
catch (NullReferenceException)
{
DogStore = new Dictionary<string, Dog>();
if (DogStore.ContainsKey(key) == false) DogStore.Add(key, dog);
}
return key;
}
[ExcelFunction]
public static string GetName(string dogKey)
{
Dog dog = DogStore[dogKey];
return dog.Name;
}
}
}
嗨,謝謝你的回答。我修改了代碼以添加字典(使用更新後的代碼編輯了我的原始帖子)。我幾個跟進問題: 1.我可以使這種通用?我可以修改ExcelDNA來爲我做這個嗎? 2.如果我創建了很多狗,那麼這可能會在內存中爆炸,我猜。實際上沒有必要將狗的歷史保存在同一個細胞中。這可以用一些聰明的方式來完成嗎? – Samuel 2013-05-14 15:07:02
因爲您的密鑰每次都會更改,所以您的函數的每個重新計算都會生成一個新的狗。名稱不足以確定一隻獨特的狗嗎? – Govert 2013-05-14 18:24:11