我正在编写C#(Visual Studio Express 2012)并使用ExcelIntegration。我想让ExcelFunction
将用户定义的对象返回给单元格。我还希望ExcelFunction
将用户定义的对象作为输入。
以下是我的代码示例。这不起作用,从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 Dog(字符串名称) { 名字=姓名; }
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;
}
}
}
答案 0 :(得分:0)
Excel-DNA还没有内置的这种自定义编组或对象支持。根据您的需要,它可能就像在代码中添加一些包装器和转换函数以及对象字典一样简单,或者您可能需要动态生成所有包装器并在运行时注册新函数。
Cubicle Tools是一个最近的(开源)项目,它在Excel-DNA之上添加了广泛的分布式对象和代码模型。但是,这是一个相当复杂的项目,可以让你了解。
在描述in this thread的RTD机制之上有一个非常简单的基于F#的对象处理程序实现。 (但是使用当前的Excel-DNA版本可以使代码更好。)
如果您只是寻求一些指导,并且您的“狗”并不太挑剔,那么Excel-DNA Google group可能是讨论的最佳位置。