【问题标题】:How do I convert a Value2 string to a DateTime (Excel Interop)如何将 Value2 字符串转换为 DateTime(Excel 互操作)
【发布时间】:2015-07-28 21:55:05
【问题描述】:

我正在从 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。

【问题讨论】:

标签: c# excel-interop


【解决方案1】:

怎么样:

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

【讨论】:

  • 我试过了,但我得到一个编译错误。调试器没有做到这一点,但我怀疑这是因为 Excel 将我 2015 年 6 月 30 日的日期发送为 42185,这不是一个有效日期。
【解决方案2】:

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

        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() 不能处理的空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 2015-05-07
    • 2019-11-28
    • 2021-12-12
    • 1970-01-01
    • 2023-04-10
    • 2012-05-05
    • 2011-10-16
    相关资源
    最近更新 更多