[英]Getting ###### values while reading excel file in C#
使用C#读取excel文件时遇到一个问题。 在我的Excel文件中,一列是DateTime,它在excel文件中的值很长。 因此,当我使用在C#中获得的相同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);
}
如果您有日期列并且值超出范围,则日期转换可能会失败。 如果在日期列中输入“ 5555555555555555555555555”(例如),则会得到一系列“ #####”,并且工具提示会指出:
负数或太大的日期和时间将显示为######。
造成这种情况的最常见原因是您拥有美国格式(MM / dd / yyyy)的日期,并且试图将其转换为欧洲格式(dd / MM / yyyy)的日期,或者没有转换字符串完全没有
有关Excel为什么显示“ ######”而不是实际列值的更多信息,请参见此超级用户问题。
尝试这样:-
var conv = DateTime.FromOADate("B"+i);
您需要读取Value2
而不是相关单元格的Value
。 Value
将返回与单元格的显示内容相关的string
,而Value2
将返回一个object
,该object
显示Excel对该单元格的了解-即。 它可能是double,DateTime等,您将不得不对其进行测试并进行转换。
但是,我不确定您在代码中到底在做什么,好像您在此行中遗漏了什么?
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.