是否有可能从VSTO中的Range.Value得到一个int?

我有一个VSTO插件,我正在读取Excel工作表中的数据。

看起来,几乎所有的数字数据都是以doubleforms读取的。 是否有可能从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 ? 我想也许General0将工作,但似乎不是。

从调用var value = ((Range)w.Cells[1,1]).Value时的文档中 , Valuetypes是从Worksheet中的值types派生的。 所以看起来,你的Excel工作表的值格式化为doubles ,而不是int 。 没有“整数”格式的Excel将转换为C#,最好的办法是在读取时将integer值转换为integerValuetypes以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