1

使用 C# 读取 excel 文件时遇到一个问题。在我的 Excel 文件中,一列是 DateTime,它在 excel 文件中的值很长。因此,当我使用 C# 读取相同的 Excel 时,Excel 会将其转换为 ###### 格式,并在 C# 中获取相同的值。谁能帮忙:我怎样才能得到日期时间值而不是#####?

我的代码如下所示:

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

3 回答 3

4

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

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

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

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

于 2013-07-15T07:42:07.347 回答
1

像这样尝试:-

var conv = DateTime.FromOADate("B"+i);
于 2013-07-15T07:37:49.647 回答
0

您需要阅读Value2而不是阅读Value相关单元格。Value将返回string与单元格显示内容相关的一个,而Value2将返回一个object显示 Excel 对该单元格的理解的一个 - 即。它可能是双精度数、日期时间等,您必须对其进行测试和转换。

但是,我不确定您在代码中到底在做什么,而且看起来您在这一行中遗漏了一些内容?

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

如果你的意思是

worksheet.getValue("B" + i);

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

string value = worksheet.Cells[2, i].Value;
object val2 = worksheet.Cells[2, i].Value2;
于 2013-08-05T12:47:10.607 回答