【问题标题】:reading excel fetching date in general format以一般格式读取excel获取日期
【发布时间】:2012-10-12 11:42:29
【问题描述】:

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

但是如果文件是打开的,程序会加载 excel,这一次所有的日期字段都是通用格式的。 例如: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);

谁能告诉应用程序或代码有什么问题?

【问题讨论】:

  • 您不能使用 TEXT 函数重新格式化日期字段吗?这样文件是否打开都没有关系。
  • 我怀疑,因为我不知道我在哪一列中有日期相关字段....excels可能一直在变化

标签: c# .net excel datetime oledb


【解决方案1】:

更多更新问题可以在here找到。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多