使用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);
}
答案 0 :(得分:4)
如果您有日期列并且该值超出范围,则您的日期转换可能会失败。如果在日期栏中输入“5555555555555555555555”(比较),则会得到一系列“#####”,工具提示说明:
负数或太大的日期和时间显示为######。
最常见的原因是您有美国格式的日期(MM / dd / yyyy),并且您尝试将其转换为欧洲格式的日期(年/月/日),或者您不是完全转换字符串。
有关Excel显示“######”而不是实际列值的原因的详细信息,请参阅this Super User question
答案 1 :(得分:1)
尝试这样: -
var conv = DateTime.FromOADate("B"+i);
答案 2 :(得分:0)
您需要阅读相关单元格的Value2
而不是Value
。 Value
将返回与单元格显示内容相关的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;