我有一个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
吗?我想也许General
或0
可行,但似乎没有。
答案 0 :(得分:2)
Range.Value返回的数字值是双倍的(可能因为它们都存储为Excel中的双精度数,一个看起来像整数的数字是格式化的结果)
我通过GetValue看到的唯一内容是错误的错误代码
<强> e.g。强>
答案 1 :(得分:1)
Govert说Excel从不将数字存储为整数是正确的。
Excel将数值存储为Double Precision Floating Point
个数字,或者您知道Doubles
。
Doubles
是8字节变量,可以精确存储大约15位小数的数字。
修改强>:
由于您正在寻找链接,请参阅此
答案 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)
答案 3 :(得分:0)
当您致电var value = ((Range)w.Cells[1,1]).Value
时docs,Value
类型来自工作表中的值类型。因此,您的Excel工作表似乎具有格式为doubles
的值,而不是int
s。 Excel中没有“整数”格式转换为C#,最好的选择是在读取时将值转换为integer
。Value
类型的格式为任何格式。在Excel工作表中。
This article显示Excel如何处理双精度浮点值。