我编码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