【问题标题】:What is the underlying type of Value2?Value2 的底层类型是什么?
【发布时间】:2018-05-10 17:35:57
【问题描述】:

我想知道可以返回哪种类型的 Value2。我问这个问题是因为 Value2 的类型似乎总是一个对象,但实际的底层类型似乎并不总是相同的。 例如:假设单元格 A1 包含“1234”,以下代码行在我的计算机上失败:

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

但是,如果单元格 A1 包含“abcdef”,则上一行成功。现在,我已经看到了 double 类型和 string 类型。我的问题是,是否有更多可能导致错误的类型? Value2 是否有例如整数?还是我都抓到了?

我已阅读文档,但似乎无法找到所有可能支持的类型。

PS:我正在使用 Visual Studio 2017、Excel 2016 和 C# 来创建我的加载项。

Documentation regarding Ranges

【问题讨论】:

    标签: c# excel excel-2016


    【解决方案1】:

    Value2 属性和 Value 属性之间的唯一区别是 Value2 属性不使用 Currency 和 @ 987654324@ 数据类型。您可以使用 Double 数据类型将使用这些数据类型格式化的值作为浮点数返回。

    Range.Value2 Property

    【讨论】:

    • 我知道 Value2 属性是 VBA 中的 Variant,但在 C# 中,我们似乎没有 Variant 作为本机类型。但如果我从您的回答中正确推断,Value2 只能包含一个双精度还是字符串,我说的对吗?
    • @Snowflake 在 C# 中存在类似版本的变体,称为Dynamic. On the other side object`,也与变体非常相似。它可以是任何东西。您可以根据需要将值拆箱。
    • @Snowflake 数据类型在 Excel 和 VBA 中不同。特别是,日期和货币数据类型在 Excel 中并不真正存在,但当您读取范围对象的 .Value 属性时,它们会转换为这些 VBA 数据类型。所以Value2 可以包含空、字符串、错误、数字(双精度)或布尔值。 Ted Williams 对Value, Value2 and text 进行了精彩的讨论
    • 基于进一步的实验,我得出的结论是,Excel中的VTSO C#只有几种类型,null、string、int(这只是通过错误得到的,我一直无法使用任何其他方式获取),双精度或布尔值。
    • @Snowflake 建议您发布一个新问题,其中包含导致问题的特定代码,以及数据示例、预期输出、实际输出和任何错误消息
    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 2010-11-10
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2012-05-03
    • 2017-12-02
    相关资源
    最近更新 更多