以一般格式阅读excel获取日期

时间:2012-10-12 11:42:30

标签: c# .net excel datetime oledb

在应用程序中,我们有一个带有多个选项卡的向导。在第一个选项卡上,我们可以使用浏览按钮选择Excel工作表路径。选择excel的那一刻,excel文件内容将加载到数据集中(所有内容都以正确的格式包括DATE字段)。然后单击“下一步”转到下一个向导选项卡。

但是如果文件是打开的,程序会加载excel,这次使用General格式的所有日期字段。 例如:2006年6月22日为38890

我们正在尝试查找excel是否已打开或被其他格式用作:

    bool IsFilebeingUsed(FileInfo file)
    {
        FileStream stream = null;

        try
        {
            stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
        }
        catch (IOException)
        {
            return true;
        }
        finally
        {
            if (stream != null)
                stream.Close();
        }
        return false;
    }

我们尝试阅读excel的方式如下:

string sql = string.Format("SELECT * FROM [{0}]", excelSheetName);
internal OleDbCommand command = new OleDbCommand();
command.CommandText = sql;
OleDbDataReader oleRdr = command.ExecuteReader();

DataTable dataTable = new DataTable();
datatable.TableName = excelSheetName;
dataTable.Load(oleRdr);

有人能说出应用程序或代码的错误吗?

1 个答案:

答案 0 :(得分:0)

可以找到更新的问题here

所以我以一种令人不满意的方式解决了这个问题。我注意到我的分析和实验,并最终得出结论,当excel在MS-Excel中打开并且我们尝试使用OleDbDataReader读取C#中的excel时,一些DataTypes无法正确读取,不幸的是DateTime在我的情况下是其中之一。

作为解决方案,目前我们正在强制用户在我们阅读excel文件时关闭excel。我甚至注意到如果excel在MS-Excel中以只读模式打开,那么对于包括DateTime在内的所有DataType,读取的数据都是正确的。但是在写模式下打开时,数据读取不正确。

这些是我的分析结果,我知道/同意结果有点奇怪。如果有人不同意或者有其他想法,请告诉我,请纠正我。