在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);
}
如果您有日期列并且值超出范围,则日期转换可能会失败。如果在日期列中输入"555555555555555 5555555"(例如),则会得到一系列"#####",工具提示状态为:
负数或过大的日期和时间显示为#######。
最常见的原因可能是您有一个美国格式(MM/dd/yyyy)的日期,而您正试图将其转换为欧洲格式(dd/MM/yyyy),或者根本没有转换字符串。
有关Excel为什么显示"#######"而不是实际列值的更多信息,请参阅此超级用户问题
这样尝试:-
var conv = DateTime.FromOADate("B"+i);
您需要读取有问题单元格的Value2
而不是Value
。Value
将返回与单元格显示内容相关的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;