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

本文关键字:获取 ##### 文件 excel 读取 | 更新日期: 2023-09-27 18:22:31

我在使用C#读取excel文件时遇到一个问题。在我的Excel文件中,有一列是DateTime,它在Excel文件中的值很长。所以当我使用C#读取相同的Excel时,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);
}

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

如果您有日期列并且值超出范围,则日期转换可能会失败。如果在日期列中输入"555555555555555 5555555"(例如),则会得到一系列"#####",工具提示状态为:

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

最常见的原因可能是您有一个美国格式(MM/dd/yyyy)的日期,而您正试图将其转换为欧洲格式(dd/MM/yyyy),或者根本没有转换字符串。

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

这样尝试:-

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

您需要读取有问题单元格的Value2而不是ValueValue将返回与单元格显示内容相关的string,而Value2将返回一个object,显示Excel对该单元格的理解,即它可能是一个double、一个DateTime等,您必须对其进行测试并强制转换。

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

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

如果你的意思是

worksheet.getValue("B" + i);

应该和worksheet.Value["B" + i]一样,只是用Value2代替Value。如果excel_getValue是您自己执行类似操作的函数,请查找对Value属性的访问权限,并将其更改为Value2。我通常按行和列编号访问内容,对我来说,有两个选项如下:

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