2010-04-30 113 views
3

我正在使用命名范围从excel中读取单元格值,在某些情况下,列宽度小于单元格中存在的值,因此它显示为# ####当它是巨大的数字。单元格值在excel中读取为####

当我从csharp读取它时,它读取为#####。此

示例代码的任何修正:

Excel.Application.get_Range(strRange, Type.Missing).Text.ToString() //If i make it 
Excel.Application.get_Range(strRange, Type.Missing).Value2.ToString() //and read any date string i get 40390 
+0

一些代码,请? – 2010-04-30 11:34:48

+0

你可以显示文件中的示例吗?至少有几行? – 2010-04-30 11:45:56

+0

Excel.Application.get_Range(strRange,Type.Missing).Text.ToString() 如果我使它Excel.Application.get_Range(strRange,Type.Missing).Value2.ToString()和读取任何日期字符串,我得到40390 – SSK 2010-04-30 11:56:50

回答

3

没有有任何代码来读取我猜你正在阅读的显示字符串或类似的,这Excel将各行的宽度变化时更新。

您可能需要阅读更原始的价值。

+0

是的,现在我读为.Text而不是.Value2这是因为当我读取日期我得到整数值有没有办法呢? – SSK 2010-04-30 11:52:29

+0

这是因为Excel中的日期存储存储为整数。日期时间存储为浮点数。该格式被称为OLE日期。要确定该值是否为日期,您还需要检查单元格的格式。 – Ian 2010-04-30 14:37:56

0

您是否试图导入否定日期? Excel不能很好地处理这些问题,处理日期通常是双打的。

2

.Text为您提供了任何您在Excel渲染层中格式化的内容(如果列太小,则为####) .Value2为您提供基础Excel值。

Excel中的日期/时间内部存储为代表自1900年以来的天数1月0日加上小数部分表示时间的24小时小数,因此您的日期以整数形式显示。

如果要数转换回你可以使用格式的日期:例如 格式(40390,“DDMMYYYY”)或格式(40390,“日/月/ YYYY”)

+0

或者您可以将双精度转换为日期: DateTime date = DateTime.FromOADate(d) – Mathias 2010-04-30 18:04:28