在C#中读取excel文件时获取######值

使用C#读取excel文件时遇到一个问题。 在我的Excel文件中,一个是DateTime的列,它在excel文件中的值很长。 所以当我用C#读取相同的C#相同的值时,Excel会将其转换为######格式。 任何人都可以请帮忙:我怎样才能得到Date Time值而不是#####?

我的代码如下所示:

using Excel = Microsoft.Office.Interop.Excel; Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; ExcelObj = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(oldg.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Microsoft.Office.Interop.Excel.Sheets sheets = theWorkbook.Worksheets; Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)sheets.get_Item(1); for (int i = 3; i <= worksheet.UsedRange.Rows.Count; i++) { var getvalue = excel_getValue("B" + i); } 

像这样尝试:

 var conv = DateTime.FromOADate("B"+i); 

如果您有date列,并且该值超出范围,则date转换可能会失败。 如果在date列中input“5555555555555555555555”(说),则会看到一系列“#####”,工具提示显示如下:

date和时间负值或太大显示为######。

这最常见的原因是你有一个美国格式的date(MM / dd / yyyy),你试图把它转换为欧洲格式的date(dd / MM / yyyy),或者你不转换string在所有。

有关为什么Excel显示“######”而不是实际列值的更多信息,请参阅此超级用户问题

您需要阅读Value2而不是相关单元格的ValueValue将返回一个与单元格的显示内容相关的string ,而Value2将返回一个显示Excel对该单元格的理解的object – 即。 它可能是一个double,一个DateTime等,你将不得不testing它,并施放它。

但是,我不确定你在代码中究竟做了什么,看起来你在这一行中留下了什么?

 var getvalue = excel_getValue("B" + i); 

如果你的意思是类似的

 worksheet.getValue("B" + i); 

这应该与worksheet.Value["B" + i] ,只需用Value2replaceValue 。 如果excel_getValue是您自己的类似的函数,请查看Value属性并将其更改为Value2 。 我通常按​​行号和列号访问东西,对于我来说,这两个选项看起来像这样:

 string value = worksheet.Cells[2, i].Value; object val2 = worksheet.Cells[2, i].Value2;