0

アプリケーションには、複数のタブを持つウィザードがあります。最初のタブでは、参照ボタンを使用して 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;
    }

エクセルを読み込もうとしている方法は次のとおりです。

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);

アプリケーションまたはコードの何が問題なのか誰にもわかりますか?

4

1 に答える 1

0

より更新された質問はここにあります。

それで、私は不十分な方法で問題を解決しました。私は分析と実験に気づき、最終的に、ExcelがMS-Excelで開いていて、OleDbDataReaderを使用してC#でExcelを読み取ろうとすると、一部のDataTypeが正しく読み取られず、残念ながらDateTimeがその1つであると結論付けました。

解決策として、現在、Excelファイルを読み取っているときにユーザーにExcelを閉じるように強制しています。ExcelがMS-Excelの読み取り専用モードで開いている場合、データの読み取りはDateTimeを含むすべてのDataTypeに対して正しいことに気づきました。ただし、書き込みモードで開いた場合、データの読み取りは正しくありません。

これらは私の分析結果であり、結果が少し奇妙であることを私は知っている/同意します。誰かが同意しないか、何か他のことを考えている場合は、私に知らせて、私を訂正してください。

于 2012-11-05T07:56:02.773 に答える