繁体   English   中英

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

[英]Is it possible to get an int from Range.Value in VSTO?

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

似乎几乎所有的数字数据都被读作double精度数据。 是否有可能从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会起作用,但似乎没有。

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

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

例如

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

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

Excel存储的数值为Double Precision Floating Point数字,或者你知道Doubles的简称。

Doubles是8字节变量,可以精确存储大约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)
  • 输入为VarType(n)= 3 = vbLong(Int32)
  • 输出为VarType(v)= 5 = vbDouble

当您调用var value = ((Range)w.Cells[1,1]).Value时,从文档中 var value = ((Range)w.Cells[1,1]).Value Value类型是从Worksheet中的值类型派生的。 因此,您的Excel工作表似乎将值格式化为doubles ,而不是int Excel中没有“整数”格式转换为C#,最好的选择是在读取时将值转换为integerValue类型以Excel工作表中的任何格式显示。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM