Я кодирую C# (Visual Studio Express 2012) и используя ExcelIntegration. Я хочу, чтобы ExcelFunction
возвратил определенный объект в ячейку. И еще я хочу, чтобы ExcelFunction
принял пользовательский объект в качестве ввода.Пользовательские объекты и ExcelIntegration
Вот пример моего кода. Это не работает, ни одна из функций (CreateDog
или GetName
) не видна из Excel.
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 { общественного класс Dog { общественных собаки (имя строки) { 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;
}
}
}
Привет, большое спасибо за ответ. Я изменил код, чтобы добавить словарь (отредактировал мой оригинальный пост с обновленным кодом). Я несколько следующих вопросов: 1. Могу ли я сделать это общее? Могу ли я изменить ExcelDNA, чтобы сделать это для меня? 2. Если я создаю много собак, это может взорваться в памяти, я думаю. На самом деле нет необходимости сохранять историю собак в одной и той же ячейке. Можно ли это сделать каким-то умным способом? – Samuel
Поскольку ваш ключ меняется каждый раз, каждый recalc вашей функции сделает новую собаку. Недостаточно ли имени для идентификации уникальной собаки? – Govert