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

时间:2013-07-15 07:24:46

标签: c# excel

使用C#读取excel文件时遇到一个问题。在我的Excel文件中,一个是DateTime的列,它在excel文件中的值很长。因此,当我使用C#在C#中获取相同值时,Excel将其转换为######格式。任何人都可以请求帮助:我如何获得日期时间值而不是#####?

我的代码如下:

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);
}

3 个答案:

答案 0 :(得分:4)

如果您有日期列并且该值超出范围,则您的日期转换可能会失败。如果在日期栏中输入“5555555555555555555555”(比较),则会得到一系列“#####”,工具提示说明:

  

负数或太大的日期和时间显示为######。

最常见的原因是您有美国格式的日期(MM / dd / yyyy),并且您尝试将其转换为欧洲格式的日期(年/月/日),或者您不是完全转换字符串。

有关Excel显示“######”而不是实际列值的原因的详细信息,请参阅this Super User question

答案 1 :(得分:1)

尝试这样: -

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

答案 2 :(得分:0)

您需要阅读相关单元格的Value2而不是ValueValue将返回与单元格显示内容相关的string,而Value2将返回object,表示Excel对该单元格的理解 - 即。它可能是一个双倍的,一个日期时间等,你将不得不测试并投射它。

但是,我不确定你在代码中到底做了什么,看起来你在这一行中遗漏了什么?

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

如果您的意思是

worksheet.getValue("B" + i);

应该与worksheet.Value["B" + i]相同,只需将Value替换为Value2即可。如果excel_getValue是您自己的功能,它会执行类似操作,请查找对Value属性的访问权限并将其更改为Value2。我通常按​​行和列号访问内容,对我来说,两个选项看起来像这样:

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