Цепные вызовы функций с использованием Excel-ДНК - PullRequest
1 голос
/ 15 января 2020

Можно ли связывать вызовы функций с помощью Excel-ДНК?

Я пытаюсь вызвать что-то подобное из листа Excel:

=CreateAccount(CreateUser("John","Doe"))

Но внутренняя функция CreateUser возвращает ExcelErrorValue.

Демо C# код выглядит так:

namespace ExcelDnaDemo
{
    using ExcelDna.Integration;

    public static class MyFunctions
    {
        [ExcelFunction(Description = "C-U")]
        public static object CreateUser(string firstName, string lastName)
        {
            return new User(firstName, lastName);
        }

        [ExcelFunction(Description = "C-A")]
        public static string CreateAccount(
            [ExcelArgument(
                Name = "Usr",
                Description = "User test", AllowReference = true)]
            object user)
        {
            var a = new Account(user);
            return $"{a.User.FirstName} {a.User.LastName} {a.Id}";
        }
    }

    public class User
    {
        public User(string firstName, string lastName)
        {
            FirstName = firstName;
            LastName = lastName;
        }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public class Account
    {
        public object User { get; private set; }
        public Guid Id { get; private set; }
        public Account(object user)
        {
            User = user;
            Id = Guid.NewGuid();
        }
    }
}

1 Ответ

0 голосов
/ 15 января 2020

Вы можете добавить нового пользователя к внутреннему Dictionary<string, User> и вернуть какой-то ключ, например, «Пользователь: 1» из функции CreateUser. Затем в CreateAccount вы берете строковый ключ и проверяете, присутствует ли он в словаре для извлечения кэшированного User объекта.

...