是否可以从VSTO中的Range.Value获取int?

时间:2012-07-09 14:53:03

标签: c# excel vsto int

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

似乎几乎所有数字数据都被读作double。是否有可能从int获得Range.Value值?

这是一些代码来证明我的意思。

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可行,但似乎没有。

4 个答案:

答案 0 :(得分:2)

Range.Value返回的数字值是双倍的(可能因为它们都存储为Excel中的双精度数,一个看起来像整数的数字是格式化的结果)

我通过GetValue看到的唯一内容是错误的错误代码

<强> e.g。

  • DIV / 0!是Int32,值为-2146826281

答案 1 :(得分:1)

Govert说Excel从不将数字存储为整数是正确的。

Excel将数值存储为Double Precision Floating Point个数字,或者您知道Doubles

Doubles是8字节变量,可以精确存储大约15位小数的数字。

修改

由于您正在寻找链接,请参阅此

链接:http://support.microsoft.com/kb/78113

答案 2 :(得分:1)

我很确定所有数字在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)
  • 输入为VarType(n)= 3 = vbLong(Int32)
  • 输出为VarType(v)= 5 = vbDouble

答案 3 :(得分:0)

当您致电var value = ((Range)w.Cells[1,1]).ValuedocsValue类型来自工作表中的值类型。因此,您的Excel工作表似乎具有格式为doubles的值,而不是int s。 Excel中没有“整数”格式转换为C#,最好的选择是在读取时将值转换为integerValue类型的格式为任何格式。在Excel工作表中。

This article显示Excel如何处理双精度浮点值。