1

我正在编写 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 class Dog { public Dog(string name) { Name = name; }

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

}

}

4

1 回答 1

0

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

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

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

如果您只是在寻找一些指导,并且您的“狗”不是太挑剔,那么Excel-DNA Google 小组可能是讨论的最佳场所。

于 2013-05-13T20:15:57.970 回答