C# Excel返回日期而不是计算值

C# Excel返回日期而不是计算值,c#,excel,C#,Excel,因此,我有一个excel导入器,它从excel工作表中获取数据并填充数据表,然后将其插入SQL表中。我已经使用它进行了数千次导入,但对于这张工作表,它无法从工作表中提取正确的单元格值。我的函数返回一个类似“1/4/1900 7:42:25AM”的值,此时单元格实际包含“$4.32”,对于“单位价格”的单元格标题值返回空值。该单元的公式类似于“=(J9*(1-K9)*(1-M9))”。整个列的格式为“货币” 我不知道发生了什么,所以任何见解都是值得赞赏的 获取excel工作表->数据表的代码: D

因此,我有一个excel导入器,它从excel工作表中获取数据并填充数据表,然后将其插入SQL表中。我已经使用它进行了数千次导入,但对于这张工作表,它无法从工作表中提取正确的单元格值。我的函数返回一个类似“1/4/1900 7:42:25AM”的值,此时单元格实际包含“$4.32”,对于“单位价格”的单元格标题值返回空值。该单元的公式类似于“=(J9*(1-K9)*(1-M9))”。整个列的格式为“货币”

我不知道发生了什么,所以任何见解都是值得赞赏的

获取excel工作表->数据表的代码:

DataTable dt;
        try
        {
            if (FileInUse(filename))
            {
                e.Result = false;
                Core.ShowExclamation("The file is already open. Please save and close the file before continuing.");
                return;
            }

            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + @";Extended Properties=""Excel 12.0;HDR=NO;""");
            string sheet = GetExcelSheetNames(con)[0];

            OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + sheet + "]", con);
            dt = new DataTable();
            da.Fill(dt);
        }
返回某些值的代码:

            string foo = dt.Rows[5][13].ToString() + "\r\n";
            foo += dt.Rows[6][13].ToString() + "\r\n";
            foo += dt.Rows[7][13].ToString() + "\r\n";
            foo += dt.Rows[8][13].ToString() + "\r\n";
            foo += dt.Rows[9][13].ToString() + "\r\n";
            foo += dt.Rows[10][13].ToString();
            Core.ShowInfo(foo);


终于从伊文德·克诺布洛赫·布里当时提出的一个问题中找到了这篇文章

修复方法:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + @";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1""");

只需设置“IMEX=1”

Excel内部将日期存储为浮点数。这里没有类型信息,只有控制含义的显示格式。当然,我发布了一篇文章,介绍了OleDBDataAdapter如何确定列的数据类型,而这正是问题所在。谢谢你的洞察力。
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + @";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1""");