Excel互操作中读取数据的方法(Range.Value2属性)

1. Range.Value2属性

MSDN:Returns or sets the cell value. Read/write Variant.

使用该属性读取某一范围内的数据。

1.1 返回值

返回值将返回Range.Value2属性的副本,而非内部对象的引用。
object[,] value = (object[,])range.Value2;   
object v11 = value[1, 1];//v11 = "aaa"  
v11 = 10;//v11 = 10  
object v11new = ((object[,])range.Value2).GetValue(1, 1);//v11new = "aaa" 
1.2 范围类型

对于单个单元格来说,返回的是单元格类型。例如,Excel中的数字1.4返回的是double类型。

对于多个单元格来说,返回的是object二维数组(object[,])类型。而且需要注意的是,这些数组的维数下限(下标)是从1开始的。

Excel.Range range1 = sheet.get_Range("A1", "A1");   
object value1 = range1.Value2;//value1 = "aaa"  
object[,] value11 = (object[,])range1.Value2;//引发InvalidCastException         

Excel.Range range2 = sheet.get_Range("A1", "E3");   
object value2 = range2.Value2;//value2 is object[1...3, 1...5]  
object[,] value22 = (object[,])range2.Value2;//value22与value2同  
1.3 单元格类型

Excel支持2种数据类型:Numbers和Strings(参考Data Types Used By Excel)。

1.3.1 空白单元格 
空白单元格返回null。

1.3.2 数字单元格 
数字单元格返回double类型。

bool isDouble = value[1, 3] is double;//isDouble = true

表示日期和时间的数字单元格仍然返回double,而不是DateTime。例如double值2000.0表示1905年6月22日。要将double转换为DateTime,您需要调用DateTime.FromOADate静态方法。

DateTime dt = DateTime.FromOADate((double)value[4, 1]);//(double)value[4, 1] = 1.0

string s = dt.ToString();//s = "1899-12-31 0:00:00"

1.3.3 文本单元格 
文本单元格返回string。

2. Range.Text属性

MSDN:Returns or sets the text for the specified object. Read-only String.

2.1 返回类型

对于单个单元格来说,返回的始终是在Excel中显示的文本常量。例如,数字单元格的值2000.0显示为1905年6月22日,则Range.Text返回"1905年6月22日"。另外,对于空白单元格,返回空字符串。

对于多个单元格来说,返回的始终是DBNull.Value。

3. Range.Value属性(C#不支持)

4. 小结

使用Range.Value2属性和Range.Text属性均可以获取Excel中的数据,但我们应该尽量避免Range.Text属性。因为Range.Text无法读取多个单元格的值,而且它不支持像Range.Value2那样的“强类型”。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值