2013-05-12 69 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