Каков базовый тип Value2?

Мне было интересно, какие типы Value2 могут быть возвращены. Я задаю этот вопрос, поскольку кажется, что тип Value2 всегда является объектом, но фактический базовый тип не всегда один и тот же. Например: учитывая, что ячейка A1 содержит «1234», следующая строка кода не работает на моем компьютере:

string targetValue = (string)Application.get_Range(“A1”).Value2

Однако, если ячейка A1 содержит «abcdef», предыдущая строка считается успешной. Теперь я видел тип double и тип string. Мой вопрос: есть ли еще возможные типы, которые могут привести к ошибке? Есть ли у Value2, например, целые числа? Или я всех поймал?

Я прочитал документацию, но не могу найти все возможные поддерживаемые типы.

PS: я использую Visual Studio 2017, Excel 2016 и C# для создания своей надстройки.

Документация по диапазонам


person Snowflake    schedule 10.05.2018    source источник


Ответы (1)


Единственное различие между свойством Value2 и свойством Value заключается в том, что свойство Value2 не использует типы данных Currency и Date. Вы можете возвращать значения, отформатированные с этими типами данных, как числа с плавающей запятой, используя тип данных Double.

См. Свойство Range.Value2

person Ron Rosenfeld    schedule 10.05.2018
comment
Я знаю, что свойство Value2 является Variant в VBA, но в C# у нас, похоже, нет Variant в качестве нативных типов. Но если я правильно сделаю вывод из вашего ответа, Value2 может содержать только двойное число или строку, я прав? ? - person Snowflake; 10.05.2018
comment
@Snowflake Аналогичная версия варианта существует в C #, и она называется Dynamic. On the other side object`, что также очень похоже на вариант. Это может быть что угодно. Вам решать распаковывать значение, когда вы хотите, что хотите. - person Franck; 10.05.2018
comment
@Snowflake Типы данных различаются в Excel и VBA. В частности, типы данных Date и Currency на самом деле не существуют в Excel, но преобразуются в эти типы данных VBA при чтении свойства .Value объекта диапазона. Таким образом, Value2 может содержать пустое значение, строку, ошибку, число (двойное) или логическое значение. У Теда Уильямса есть отличное обсуждение Значение, Значение2 и текст - person Ron Rosenfeld; 10.05.2018
comment
Основываясь на некоторых дальнейших экспериментах, я пришел к выводу, что VTSO C# в Excel имеет только несколько типов, null, string, int (который получен только через ошибку, я не смог получить это другим способом), двойное или логическое значение. - person Snowflake; 10.05.2018
comment
@Snowflake Предлагает опубликовать новый вопрос с конкретным кодом, вызывающим проблему, а также с примерами данных, ожидаемым выводом, фактическим выводом и любыми сообщениями об ошибках. - person Ron Rosenfeld; 10.05.2018
comment
@ Рон, у меня нет особой проблемы, но я только хотел сказать, что если ваша формула содержит ошибку, например =AAAAA, которая приводит к ошибке #NAME в Excel, это приведет к int в коде C# VTSO . - person Snowflake; 10.05.2018
comment
@Snowflake И если у вас есть int32, вы можете сделать вывод, что в ячейке есть ошибка! См. Ответ @Mike Rosenbloom в Как узнать, есть ли в ячейке ошибка в C# - person Ron Rosenfeld; 10.05.2018