是否有可能从VSTO中的Range.Value得到一个int?
我有一个VSTO插件,我正在读取Excel工作表中的数据。
看起来,几乎所有的数字数据都是以double
forms读取的。 是否有可能从Range.Value
得到一个int
值?
这里有一些代码来演示我的意思。
Worksheet w = (Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets["Sheet1"]; var value = ((Range)w.Cells[1, 1]).Value; bool isInt = value is int; bool isDouble = value is double;
无论我在工作表Sheet1,单元格A1中使用哪种格式, isInt
总是返回false。
有什么格式我应该用来获得int
? 我想也许General
或0
将工作,但似乎不是。
从调用var value = ((Range)w.Cells[1,1]).Value
时的文档中 , Value
types是从Worksheet中的值types派生的。 所以看起来,你的Excel工作表的值格式化为doubles
,而不是int
。 没有“整数”格式的Excel将转换为C#,最好的办法是在读取时将integer
值转换为integer
。 Value
types以Excel工作表中的任何格式显示。
本文介绍Excel如何处理双精度浮点值。
Range.Value返回的数值是双精度(可能是因为它们全部作为Excel中的双精度来存储,看起来像一个整数的数字是格式化的结果)
唯一通过GetValue看到的整数是用于错误的ErrorCodes
例如
- DIV / 0! 是一个值为-2146826281的Int32
Govert是正确的说,Excel从不将数字存储为整数。
Excel将数字值存储为Double Precision Floating Point
,或者您知道Double Precision Floating Point
。
Doubles
是8字节的variables,可以将数字精确保存在15个小数位左右。
编辑 :
既然你正在寻找一个链接,看看这个
链接: http : //support.microsoft.com/kb/78113
我很确定所有的数字在Excel中都是双打的。 例如,下面的VBA代码将单元格值设置为长整型(Int32),然后将其读回。
Dim n As Long n = 123 Range("A1").Value = n Debug.Print VarType(n) Dim v As Variant v = Range("A1").Value Debug.Print VarType(v)
- input是VarType(n)= 3 = vbLong(Int32)
- 输出是VarType(v)= 5 = vbDouble