2013-05-12 28 views
0

我编码C#(Visual Studio Express 2012)并使用ExcelIntegration。我想让ExcelFunction将用户定义的对象返回给单元格。我还希望ExcelFunction将用户定义的对象作为输入。用户自定义对象和ExcelIntegration

这是我的代码的一个例子。这不起作用,从Excel中都不可以看到任何功能(CreateDogGetName)。

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; 
    } 

} 

}

回答

0

Excel-DNA还没有这种自定义编组或对象的支持内置的。根据你的需要的,这可能是因为增加了一些包装和转换功能和简单对象字典添加到您的代码中,或者您可能需要动态生成所有包装并在运行时注册新函数。

Cubicle Tools是一个最近的(开源)项目,它在Excel-DNA之上添加了一个广泛的分布式对象和代码模型。但是,这是一个相当复杂的项目,让你头脑清醒。

在描述in this thread的RTD机制之上,有一个非常简单的基于F#的对象处理程序实现。 (但是,使用当前的Excel-DNA版本,该代码可以变得更好)。

如果你只是寻找一些指导,而你的'狗'不是太挑剔,那么Excel-DNA Google group可能是最好的地方讨论。

+0

嗨,谢谢你的回答。我修改了代码以添加字典(使用更新后的代码编辑了我的原始帖子)。我几个跟进问题: 1.我可以使这种通用?我可以修改ExcelDNA来为我做这个吗? 2.如果我创建了很多狗,那么这可能会在内存中爆炸,我猜。实际上没有必要将狗的历史保存在同一个细胞中。这可以用一些聪明的方式来完成吗? – Samuel 2013-05-14 15:07:02

+0

因为您的密钥每次都会更改,所以您的函数的每个重新计算都会生成一个新的狗。名称不足以确定一只独特的狗吗? – Govert 2013-05-14 18:24:11