如何在Excel Interop C#中读取DateTime

Wil*_*ill 2 c# excel excel-interop

可能重复:
从Excel工作表读取日期时间值

我正在尝试使用C#中的Interop从Excel电子表格中读取DateTime值.我一直都在表单的"C"栏中.我的代码如下:

    public void addTime(Microsoft.Office.Interop.Excel.Workbook workbook)
    {

        Excel.Worksheet ws = (Excel.Worksheet)workbook.Worksheets.get_Item("Time Series");
        Excel.Range range = ws.UsedRange;
        int num = 0;
        for (int row = 1; row <= range.Rows.Count; row++ )
        {
            String dtString = ((Excel.Range)ws.Cells[row, "C"]).Value2.ToString();
            DateTime dt = Convert.ToDateTime(dtString);

            this.addEdgeInstance(dt);
        }
    }
Run Code Online (Sandbox Code Playgroud)

然而,这在当时没有读到.读取字符串有效,但Convert函数不起作用.我是否以不同的方式阅读了价值观?值可以变化吗?(IE:我可以输入'11/11'或'11/11/2011',因为Excel在Excel中工作时将这两个条目识别为valie DateTime值吗?)

Luk*_*kas 9

哟哟萌芽.我为你修改了一些代码,以反映帮助器转换函数的用法.转换发生在这一行:DateTime dt = DateTime.Parse(ConvertToDateTime(dtString)); 可以根据需要随意修改辅助函数以返回DateTime变量而不是字符串,但这基本上是相同的.希望这可以帮助!

public void addTime(Microsoft.Office.Interop.Excel.Workbook workbook)  
{  
Excel.Worksheet ws = (Excel.Worksheet)workbook.Worksheets.get_Item("Time Series");  
Excel.Range range = ws.UsedRange;  
int num = 0;  
for (int row = 1; row <= range.Rows.Count; row++ )  
{  
    String dtString = ((Excel.Range)ws.Cells[row, "C"]).Value2.ToString();  
    DateTime dt = DateTime.Parse(ConvertToDateTime(dtString));  

    this.addEdgeInstance(dt);  
}  
}  


public static string ConvertToDateTime(string strExcelDate)
{
    double excelDate;
    try
    {
        excelDate = Convert.ToDouble(strExcelDate);
    }
    catch
    {
        return strExcelDate;
    }
    if (excelDate < 1)
    {
        throw new ArgumentException("Excel dates cannot be smaller than 0.");
    }
    DateTime dateOfReference = new DateTime(1900, 1, 1);
    if (excelDate > 60d)
    {
        excelDate = excelDate - 2;
    }
    else
    {
        excelDate = excelDate - 1;
    }
    return dateOfReference.AddDays(excelDate).ToShortDateString();
}
Run Code Online (Sandbox Code Playgroud)