5

我有一个 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 中使用哪种格式,单元格 A1isInt总是返回错误。

我应该使用某种格式来获取int吗?我认为可能General0会工作,但似乎没有。

4

4 回答 4

2

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

我通过 GetValue 看到的唯一整数是错误的 ErrorCodes

例如

  • 分区/0!是一个 Int32,值为 -2146826281
于 2012-07-09T15:19:08.777 回答
1

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

Excel 将数值存储为Double Precision Floating Point数字,或者Doubles简称为数字。

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

编辑

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

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

于 2012-07-09T15:29:29.780 回答
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
于 2012-07-09T15:33:23.087 回答
0

文档中调用时var value = ((Range)w.Cells[1,1]).ValueValue类型是从工作表中的值类型派生的。所以看起来您的 Excel 工作表的值格式为doubles,而不是ints。Excel 没有可以转换为 C# 的“整数”格式,最好的办法是integer在读入时将值转换为 。Value类型以 Excel 工作表中的任何格式出现。

本文介绍 Excel 如何处理双精度浮点值。

于 2012-07-09T15:01:56.787 回答