如何将 Value2 字符串转换为 DateTime (Excel Interop)

How do I convert a Value2 string to a DateTime (Excel Interop)

我正在从 Excel 文件导入数据并将其转换为我正在使用的数据集(有点)。我遇到的问题是 Excel 中的两个字段是日期,但是当我进行导入时,它们变成了数字,我不确定如何让它们回到日期。最后两列是日期列 (HDate & CDate)。

这是代码

    private void FillDatagrid()
    {
        Excel.Application xlApp = new Excel.Application();
        Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"\Server01\Ins\Eligible.xls");
        Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
        Excel.Range xlRange = xlWorksheet.UsedRange;

        DataTable table = new DataTable("Employees");
        table.Columns.Add("StoreID");
        table.Columns.Add("EmpID");
        table.Columns.Add("EmpName");
        table.Columns.Add("Position");
        table.Columns.Add("HDate");
        table.Columns.Add("CDate");

        int rowCount = xlRange.Rows.Count;

        for (int i = 2; i <= rowCount; i++)
        {
            table.Rows.Add(
                xlRange.Cells[i, 1].Value2.ToString(),
                xlRange.Cells[i, 2].Value2.ToString(),
                xlRange.Cells[i, 3].Value2.ToString(),
                xlRange.Cells[i, 4].Value2.ToString(),
                xlRange.Cells[i, 5].Value2.ToString(),
                xlRange.Cells[i, 5].Value2.ToString());
        }

        DataSet ds = new DataSet();
        ds.Tables.Add(table);
        dataGrid.ItemsSource = ds.Tables["Employees"].DefaultView;
    }

据我所知,Value2 只会转换为字符串。

注意 #1 虽然我在这个示例中将这些数据放入 DataGrid 中,但我并没有在实际的代码块中这样做。我只是想提一下,这样看来这似乎无法通过 XAML 等

中的格式来解决

注意#2 我意识到我有两次 xlRange.Cells[i, 5].Value2.ToString() 。我这样做是为了解决第 6 列有空值的问题,这是我的导入不喜欢的。我计划在解决此问题后回到该问题。

注意#3 当我说我将日期作为字符串获取时,我的意思是它来自 Excel 作为字符串但格式化为数字,所以,例如,单元格数据的日期类似于 2015 年 6 月 30 日,但它像 42185 一样进入我的数据集。

怎么样:

table.Columns.Add("HDate", typeof(DateTime));
table.Columns.Add("CDate", typeof(DateTime));

我可以通过改变我的循环来解决这个问题

        for (int i = 2; i <= rowCount; i++)
        {
            string storeId = xlRange.Cells[i, 1].Value2.ToString();
            string employeeId = xlRange.Cells[i, 2].Value2.ToString();
            string employeeName = xlRange.Cells[i, 3].Value2.ToString();
            string position = xlRange.Cells[i, 4].Value2.ToString();
            string hDate = Convert.ToString(xlRange.Cells[i, 5].Value);
            string cDate = Convert.ToString(xlRange.Cells[i, 6].Value);

            table.Rows.Add(storeId, employeeId, employeeName, position, hDate, cDate);
        }

这也解决了另一个问题。也就是说 Convert.ToString(xxx.Value) 处理空值,而 Value2.ToString() 不会。